104: MinutiƦ
00:00:00
◼
►
There's brief moments of time when I listen to the two of you go back and forth and for
00:00:04
◼
►
a minute I'm like, man, I'm not even here anymore.
00:00:08
◼
►
And I feel ever so slightly sad.
00:00:10
◼
►
But then I continue to listen to you two going back and forth and I just don't even care
00:00:14
◼
►
anymore because I'm entertained as hell.
00:00:17
◼
►
We had recently received an email as recently as about two hours ago about how we say to
00:00:24
◼
►
to each other, or say actually to you, the listener,
00:00:27
◼
►
please email anyone other than us,
00:00:30
◼
►
or please don't send us email, et cetera.
00:00:32
◼
►
Would you like to talk a little more about this email?
00:00:34
◼
►
- All right, so the first sentence is,
00:00:36
◼
►
I'm a little surprised about your whole email topic.
00:00:39
◼
►
Now, this is already kind of like spreading the topic wider
00:00:43
◼
►
because this started with Marco getting specific feedback
00:00:47
◼
►
and bug reports about Overcast, right?
00:00:49
◼
►
But then this sort of expanded into like the entire topic
00:00:52
◼
►
of us getting email.
00:00:53
◼
►
And so this feedback is not about Marco and his bug reports, really.
00:00:57
◼
►
It's really about when we say on the show, please don't email us about whatever.
00:01:02
◼
►
Right. So I already think this is kind of off topic and it's just like it's
00:01:05
◼
►
related to the discussion, but whatever we want this.
00:01:08
◼
►
It's not interested in really discussing how Marco handle his feedback.
00:01:12
◼
►
He's more interested in discussing the joke that we do when we say, please don't
00:01:15
◼
►
send us email.
00:01:16
◼
►
And he says it makes him feel like that we don't appreciate the listeners that,
00:01:20
◼
►
you know, I find a good sentence here.
00:01:22
◼
►
He says he loves us, loves the show.
00:01:23
◼
►
It doesn't make me feel entitled to anything.
00:01:25
◼
►
I know that obviously, and I know that it's impossible to get back to everybody.
00:01:29
◼
►
But what is impossible is to appreciate your position,
00:01:31
◼
►
to appreciate the fact that people devote their time to actually tell you what they think,
00:01:35
◼
►
to appreciate that people are the ones that are attracting sponsors, etc.,
00:01:39
◼
►
to appreciate that a podcast by nitpickers is going to attract nitpickers,
00:01:42
◼
►
to appreciate that so many people really care.
00:01:44
◼
►
And I know you do appreciate your listeners, but the whole email joke,
00:01:46
◼
►
the whole annoyance is neither funny nor respectful.
00:01:48
◼
►
It's strange, off-putting, very arrogant and makes me kind of angry.
00:01:51
◼
►
"It makes my engagement feel pathetic and needy.
00:01:54
◼
►
"It's really not that hard just to say
00:01:55
◼
►
"a few nice words, you know?"
00:01:57
◼
►
To this I would say that we don't have a,
00:02:01
◼
►
ignoring the fact that most of the time we're just joking,
00:02:03
◼
►
right, because jokes can be hurtful too, right?
00:02:05
◼
►
We don't have a blanket ban on email.
00:02:09
◼
►
We don't say, it's like a prohibition.
00:02:11
◼
►
In fact, we encourage, tacitly encourage email
00:02:14
◼
►
by responding to email on the show.
00:02:16
◼
►
And a lot of the followup is about things
00:02:18
◼
►
that people send us, either corrections for things
00:02:21
◼
►
expansions on topics, we take real-time feedback and real-time follow-up from the chat room
00:02:25
◼
►
from people saying the same thing, right? So it's clear that we're not like, nobody
00:02:28
◼
►
ever emails us anything, you know, for whatever reason. We don't say that.
00:02:32
◼
►
I mean, there's a feedback form on our site that I made when we made the site. Like, we
00:02:37
◼
►
have this form on the site that says "send feedback". If we wanted to not actually receive
00:02:42
◼
►
any feedback, we would just take the form down.
00:02:44
◼
►
Like Marco, like Marco and his app doesn't want to imply that he's providing support,
00:02:48
◼
►
just fries the feedback bank.
00:02:49
◼
►
So first of all, I would say the premise of the idea that we just are saying we don't
00:02:52
◼
►
want any feedback.
00:02:53
◼
►
That's not our message at all.
00:02:55
◼
►
We do very frequently though say, "Please don't email us about whatever topic."
00:03:00
◼
►
And that is specifically focused on whatever it was we were talking about.
00:03:04
◼
►
So if it's like, "I'm going to tell you about this toaster oven I got.
00:03:10
◼
►
Please don't send me email about slot toasters."
00:03:13
◼
►
And then I follow up by saying, "I know about slot toasters.
00:03:16
◼
►
I know slot toasters exist.
00:03:17
◼
►
I know that they are different than toaster ovens.
00:03:19
◼
►
I am reviewing toaster ovens, right?
00:03:21
◼
►
- And they're worse.
00:03:22
◼
►
- Right, you know, like, right?
00:03:24
◼
►
And part of that is like, the please don't email thing
00:03:27
◼
►
is a long running gag from any podcast
00:03:29
◼
►
that we've listened to and been on in the past.
00:03:30
◼
►
So if you don't have that context,
00:03:31
◼
►
maybe that doesn't make much sense.
00:03:32
◼
►
It's also kind of a joke like,
00:03:34
◼
►
oh, I don't wanna hear from those people
00:03:35
◼
►
who are just gonna tell me about the slot toasters, right?
00:03:37
◼
►
But it's very specifically focused on this one thing.
00:03:39
◼
►
It is not saying please don't email me ever about anything.
00:03:42
◼
►
If you know something cool
00:03:44
◼
►
about a new DisplayPort specification,
00:03:47
◼
►
Yes, send us the email about it.
00:03:48
◼
►
If you say I've been an Apple genius for X number of years
00:03:51
◼
►
and this is my experience, yes, send us email about it.
00:03:53
◼
►
Like, of course we want that email.
00:03:54
◼
►
Like we read it on the show, we appreciate it.
00:03:56
◼
►
We appreciate our listeners.
00:03:57
◼
►
So I don't want people listening to think,
00:03:59
◼
►
and I don't think most people do,
00:04:00
◼
►
but this person does apparently,
00:04:01
◼
►
that we don't want feedback from anybody.
00:04:05
◼
►
It's 50% of the time a joke
00:04:07
◼
►
and the other 50% of the time very focused
00:04:09
◼
►
kind of exasperation at a particular type of feedback
00:04:13
◼
►
that we expect to get because we said something
00:04:15
◼
►
that we know leaves us open to a particular kind of correction and we're trying to say,
00:04:19
◼
►
you don't need to send us that correction because we are fully aware that we have either
00:04:22
◼
►
intentionally ignored this thing or whatever.
00:04:25
◼
►
Right, it's a way, I use it as a way to preempt getting a whole bunch of emails that begin
00:04:33
◼
►
with "well, you know..." and some big argument about something that like, I know the thing
00:04:37
◼
►
I just said is contentious, or I know there is something that other people are going to
00:04:42
◼
►
want to tell me about what I just said, and I'm just like, I don't want to engage that
00:04:45
◼
►
entire discussion right now.
00:04:47
◼
►
It's a way for me to basically try to preempt
00:04:50
◼
►
getting a whole bunch of duplicate emails
00:04:53
◼
►
telling me something I already know.
00:04:54
◼
►
And that saves everybody time.
00:04:56
◼
►
- And it's not to say it's not annoying.
00:04:57
◼
►
If you're annoyed by it,
00:04:58
◼
►
it's totally your right to be annoyed by it.
00:04:59
◼
►
It can be annoying, I fully admit that.
00:05:02
◼
►
But we are human and we get exasperated sometimes too,
00:05:04
◼
►
and we express that on the show.
00:05:06
◼
►
- Yeah, so this email was from Pell D.
00:05:09
◼
►
I feel like we should attribute, I'm assuming him.
00:05:13
◼
►
And what I had replied to him or her, I'm thinking him,
00:05:17
◼
►
and saying, and what I said was,
00:05:19
◼
►
we don't, or we say don't email us,
00:05:22
◼
►
either because we really don't care about the minutiae,
00:05:24
◼
►
minutiae, minutiae, all the nuance of the topic at hand.
00:05:29
◼
►
- You're gonna get on me about Bezel,
00:05:31
◼
►
but you're gonna go minutiae, okay.
00:05:35
◼
►
Minutiae, Kit Tacy, like, touche.
00:05:37
◼
►
- I was pretty sure it was minutiae,
00:05:39
◼
►
and then I was envisioning all the emails of it,
00:05:41
◼
►
saying to me, "No, it's not minutiae, it's minutiae."
00:05:43
◼
►
So should people not email you about the correct pronunciation of minutiae?
00:05:46
◼
►
So please do not email me.
00:05:50
◼
►
That's a perfect use.
00:05:51
◼
►
It's a perfect use of it.
00:05:53
◼
►
Anyway, let me try this again.
00:05:56
◼
►
So we say please don't email us either because we really don't care about the minutiae of
00:06:01
◼
►
the topic at hand or because we know we won't be able to respond to everyone.
00:06:05
◼
►
And actually that reminded me as we were talking of another piece of follow-up, which is I
00:06:10
◼
►
I saw a handful of people, generally speaking from Europe, who seemed confused about the
00:06:16
◼
►
whole toaster oven thing.
00:06:18
◼
►
Yeah, someone asked me, "Isn't that just a grill?"
00:06:20
◼
►
And then I realized we had a language barrier between English speakers.
00:06:25
◼
►
I think it was someone from the UK or some other thing that Marco can tell us the correct
00:06:30
◼
►
Can we maybe just put a "U" somewhere in it?
00:06:32
◼
►
Would that make them know what we're talking about?
00:06:33
◼
►
A "touster oven"?
00:06:34
◼
►
Yeah, no, it was great.
00:06:36
◼
►
It was great because someone said, "Isn't that just a grill?"
00:06:38
◼
►
And I replied, "No," because I didn't look up where they were from or something, but
00:06:42
◼
►
I was confused by it.
00:06:43
◼
►
And then another person who obviously speaks the variant of English that that person was
00:06:47
◼
►
speaking, tweeted back to them and said, "I think that what you mean by grill isn't what
00:06:51
◼
►
they mean by..."
00:06:52
◼
►
Seriously, it's like an actual language barrier.
00:06:54
◼
►
We don't know the words for things.
00:06:56
◼
►
But we put links in the show notes, right?
00:06:58
◼
►
You can click on them and see what it is.
00:06:59
◼
►
It's a thing.
00:07:00
◼
►
Toaster ovens are a thing in America anyway.
00:07:02
◼
►
And so if you live in one of these barbaric countries that doesn't really have a toaster,
00:07:07
◼
►
Doesn't have toaster ovens basically. It's like a little tiny oven that can serve either as a toaster or an oven hence
00:07:14
◼
►
Toaster oven and they're extremely convenient if you'd like to reheat something especially something bready
00:07:20
◼
►
pizza being the most obvious example
00:07:23
◼
►
French fries anything like that if you want to reheat something bready
00:07:28
◼
►
But you don't want to do so in the microwave because then it'll end up all gummy
00:07:31
◼
►
Toast oven is a great way to do it now. Yes, you could use a traditional oven
00:07:35
◼
►
but why in the world would you start up what is probably
00:07:38
◼
►
multiple square feet worth of space
00:07:41
◼
►
to heat one slice of pizza or two slices of pizza?
00:07:44
◼
►
And so a toaster oven is the best of both worlds
00:07:46
◼
►
because it's a little tiny oven,
00:07:47
◼
►
big enough for usually a slice of pizza or two,
00:07:50
◼
►
or it's a toaster, big enough for maybe a couple of bagels
00:07:53
◼
►
or something like that.
00:07:54
◼
►
- Right, and it tends to heat up just about as quickly
00:07:57
◼
►
as doing it in the microwave for me.
00:07:58
◼
►
Like if you're gonna, I mean, it's not 30 seconds,
00:08:01
◼
►
but if you're gonna reheat a slice of pizza,
00:08:03
◼
►
A toaster oven has it done in like two or three minutes at most.
00:08:06
◼
►
And so it's way faster than using a full-size oven.
00:08:09
◼
►
Nobody should ever put a pizza in a microwave, I just want to say that.
00:08:13
◼
►
Oh, completely agreed.
00:08:14
◼
►
But anyway, so if you don't know what a toaster oven is, well perhaps it's time to move to
00:08:19
◼
►
a different country.
00:08:22
◼
►
But nevertheless, maybe you could import it or something like that.
00:08:25
◼
►
So you need nationalized healthcare or toaster ovens?
00:08:27
◼
►
I'm going toaster ovens.
00:08:28
◼
►
I think I might too.
00:08:29
◼
►
The brand of my toaster oven Breville apparently that's a proprietary eponym.
00:08:34
◼
►
See I did remember that from the past episode.
00:08:36
◼
►
It's pronounced Brazil.
00:08:38
◼
►
That is a proprietary eponym in the UK like Kleenex or whatever and so someone in the
00:08:42
◼
►
chat room says a Breville refers to something we would call a grill in the UK for sandwiches
00:08:47
◼
►
so they've taken that entire brand and turned it into you know that it's a signifier for
00:08:51
◼
►
the entire category of things like a panini grill type of thing or whatever but anyway
00:08:56
◼
►
that's definitely not what I'm talking about.
00:08:57
◼
►
and follow the links in the show notes.
00:08:59
◼
►
I'll show you exactly what we were talking about
00:09:01
◼
►
last week's show notes, not this week's show notes.
00:09:02
◼
►
- Yeah, we're not gonna put in this week's show notes
00:09:04
◼
►
because it was already there.
00:09:05
◼
►
You should have clicked the links, kids.
00:09:08
◼
►
- Our first sponsor before we've done a single topic
00:09:11
◼
►
Igloo is an internet you'll actually like.
00:09:13
◼
►
It's kind of funny that this is the first tech
00:09:15
◼
►
that we're discussing is the sponsor itself.
00:09:18
◼
►
With Igloo, you can share news, organize your files,
00:09:20
◼
►
coordinate calendars, and manage projects all in one place.
00:09:24
◼
►
This is like taking the best of the web
00:09:26
◼
►
productivity apps, things like calendars, Twitter like micro blogs, file sharing, task
00:09:29
◼
►
management, wikis, and more, all available privately and securely for your company or
00:09:34
◼
►
group intranet.
00:09:35
◼
►
Alu intranets are highly functional, stylish, and easy to use, with a widget-based drag
00:09:40
◼
►
and drop interface.
00:09:41
◼
►
Their latest upgrade, Viking, revolves around documents and how you interact with them,
00:09:45
◼
►
gather feedback, and make changes.
00:09:46
◼
►
They've even added the ability to track who has read critical information to keep
00:09:50
◼
►
everyone on the same page.
00:09:52
◼
►
It's kind of like read receipts in your email, but less annoying, and it helps you
00:09:55
◼
►
track whether employees have read and acknowledged policies, signed off on legal agreements,
00:10:00
◼
►
or confirmed completion of training materials.
00:10:05
◼
►
Igloo is all built on their advanced HTML5 platform.
00:10:08
◼
►
It's a fully responsive platform and offers all these features, even things like previewing
00:10:12
◼
►
and annotating documents, all that is done in HTML5, so it works no matter what device
00:10:21
◼
►
You have all that functionality, all the annotations, all the admin controls, everything, whether
00:10:25
◼
►
you're on a computer, iPhone, Android phone, or even a Blackberry, and when new devices
00:10:28
◼
►
and screen sizes hit the market, igloo already works on them.
00:10:31
◼
►
So if your company has a legacy intranet that looks like it was built in the 90s, you should
00:10:35
◼
►
definitely give igloo a try.
00:10:37
◼
►
Igloo is even completely free to use for as long as you want if you have a group of 10
00:10:44
◼
►
or fewer people.
00:10:45
◼
►
And then if you get past 10 people, it's very reasonably priced after that.
00:10:48
◼
►
So really, if you have a group of 10 or fewer people, igloo's free for you.
00:10:52
◼
►
Just go try it, it's amazing.
00:10:53
◼
►
Anyway, sign up for a free trial at igloo software comm slash ATP. That is igloo software comm slash ATP
00:11:01
◼
►
Thanks a lot to a glue for sponsoring our show. Once again, they've been a longtime sponsor a friend of our show
00:11:05
◼
►
Yeah, very much. Thank you a glue
00:11:08
◼
►
We should talk about the photos app that we all thought may have kind of gone away
00:11:15
◼
►
Hang on real-time follow up on the Breville. It's not a panini. It's not a panini press look at the thing
00:11:20
◼
►
I just put in the show notes. It's the thing like
00:11:23
◼
►
It's like a a clamshell thing that closes and it has two little compartments for
00:11:28
◼
►
Bread like if you cut a piece of bread on diagonal and it kind of like heats them from both sides
00:11:33
◼
►
Different than a panini breast which is you know the flat surfaces with the little ridges on them
00:11:37
◼
►
This is a common thing like that's what they prefer. I've seen them in the US
00:11:41
◼
►
I just I don't think many people have them, but that's what they call it
00:11:43
◼
►
That's what they call a Breville and if you read the history of the thing, that's that's really peculiar
00:11:47
◼
►
I mean well, I've seen them before but it looking at the chat room
00:11:51
◼
►
It seems like in the UK and Australia everyone has one of these and I cannot think of any one of my friends or family
00:11:56
◼
►
That has one so it's labeled there as a durable stainless steel jaffle maker. So are those jaffles?
00:12:02
◼
►
Is that like that's what we call this thing. I want to try to pronounce that word. I don't think maybe it's jaffa le
00:12:07
◼
►
Jaffle like waffle
00:12:11
◼
►
So quick aside I was at work
00:12:14
◼
►
this is a year ago now and somebody was one of my
00:12:19
◼
►
Co-workers was talking about doing something in JavaScript and at one point he said something about just song and I was like what oh my god
00:12:26
◼
►
I think he was saying it. I you know
00:12:31
◼
►
Comically and or ironically or whatever, but what I heard just saw I was like wait what and sure enough
00:12:38
◼
►
He meant just saw Jason. God. I just did it again accidentally my boss used to say H over
00:12:42
◼
►
What H over that's when you put your H over an item
00:12:46
◼
►
- Yep. - And the H-over style
00:12:49
◼
►
and the links.
00:12:51
◼
►
He was just avoiding trying to pronounce that word
00:12:53
◼
►
because he knew it was such a problem.
00:12:56
◼
►
- That's true because you never know when that'll go wrong.
00:13:00
◼
►
But for the record, it's hover.
00:13:01
◼
►
- We'll talk about them in 20 minutes.
00:13:03
◼
►
All right, sorry for the derail, photos, back to photos.
00:13:05
◼
►
- Yeah, so let's talk about photos.
00:13:08
◼
►
We had all, not genuinely, but kind of wondered,
00:13:10
◼
►
hey, what happened to photos?
00:13:12
◼
►
Because somebody had pointed out to us
00:13:14
◼
►
that it disappeared from Apple's website.
00:13:16
◼
►
Well, apparently it's back.
00:13:18
◼
►
It's back in a big way,
00:13:19
◼
►
because it's actually in the latest Yosemite beta.
00:13:23
◼
►
Now, have either of you guys tried this?
00:13:25
◼
►
- What, are you crazy?
00:13:26
◼
►
I was actually gonna try it,
00:13:27
◼
►
like not on my computer with my actual photos,
00:13:29
◼
►
but just to load the program
00:13:31
◼
►
and throw some sample photos at it or whatever.
00:13:33
◼
►
But then I realized,
00:13:34
◼
►
and I'm pretty sure this is still the case,
00:13:35
◼
►
that you have to upgrade to the 1010.3 beta,
00:13:40
◼
►
and I wasn't willing to do that,
00:13:41
◼
►
just to try the Photos app, so I'll just wait.
00:13:44
◼
►
- Yeah, that's the reason I'm not using it,
00:13:45
◼
►
because I'm not going to run a beta OS on my main computer, so that's not going to happen.
00:13:50
◼
►
Yeah, I've already put in a lot of time doing stuff like that. I deserve a break.
00:13:56
◼
►
I also feel like this is a good opportunity that I really should take to go back and clean out some
00:14:02
◼
►
of my photo library, because there's so many timesāI'm sure this happens for a lot of peopleāI'll go on
00:14:08
◼
►
a trip or something, or we'll do a shoot with the kid or the dog or both or whatever, and we'll just
00:14:13
◼
►
dump all the photos into the photo library
00:14:15
◼
►
and then just never really pick through them.
00:14:17
◼
►
So I have these giant 30 gig folders
00:14:21
◼
►
full of some shoot or something like that
00:14:22
◼
►
and it's like, if I just took an hour to go through this,
00:14:25
◼
►
I would probably delete 95% of those pictures
00:14:28
◼
►
and just keep the 5% of the best ones
00:14:31
◼
►
that I actually want to see again.
00:14:32
◼
►
And basically I need to apply that process
00:14:35
◼
►
to five years of photos.
00:14:38
◼
►
It's like spring cleaning, I keep meaning to do this
00:14:39
◼
►
and maybe this is my motivation to do it finally.
00:14:43
◼
►
Do you guys have that problem?
00:14:45
◼
►
- I used to use iPhoto,
00:14:47
◼
►
this was, I don't know, three, four years ago now,
00:14:50
◼
►
and I felt it was nothing but a burden.
00:14:53
◼
►
And there's probably a million and seven ways
00:14:56
◼
►
that you can blame that on me,
00:14:57
◼
►
and probably a million and six of them are correct.
00:15:00
◼
►
But for whatever reason,
00:15:01
◼
►
I just didn't have a workflow
00:15:02
◼
►
that really worked well for me.
00:15:04
◼
►
And what I've ended up doing since then is just eschewing,
00:15:06
◼
►
that's how you pronounce that word, right?
00:15:08
◼
►
Eschewing iPhoto altogether.
00:15:10
◼
►
This is the Accidental Pronunciation Podcast.
00:15:12
◼
►
And now what I'm doing is,
00:15:15
◼
►
and I think it was Bradley Chambers,
00:15:17
◼
►
learning to love photo management
00:15:19
◼
►
in combination with some scripts from Dr. Drang.
00:15:23
◼
►
And so basically what I do is I have all of my pictures
00:15:27
◼
►
renamed consistently and stored consistently
00:15:30
◼
►
in my file system.
00:15:30
◼
►
And that's as close as I get to any sort of organization.
00:15:33
◼
►
And I wish I had a better organization system
00:15:36
◼
►
in so far as something where maybe I've tagged pictures
00:15:40
◼
►
that I think are really good
00:15:41
◼
►
or I've grouped them into events or what have you,
00:15:43
◼
►
the sorts of things that I suspect
00:15:45
◼
►
Photos app will be great for.
00:15:47
◼
►
But for whatever reason,
00:15:48
◼
►
it just felt like such a pain in the butt with iPhoto
00:15:50
◼
►
that I never really did it.
00:15:52
◼
►
- I think I've described my system before.
00:15:54
◼
►
I put them all in iPhoto and then I star rate them.
00:15:56
◼
►
And the only cleaning I really do,
00:15:59
◼
►
I tend to be like not want to get rid of pictures
00:16:03
◼
►
of my kids, even if like they're not framed correctly,
00:16:05
◼
►
or even if they're a little out of focus,
00:16:07
◼
►
'cause sometimes they're still cute.
00:16:08
◼
►
But what I do is I do rate them all.
00:16:10
◼
►
And when I feel like doing a little cleaning,
00:16:13
◼
►
I just show all the one stars,
00:16:14
◼
►
and the one stars are basically like,
00:16:15
◼
►
you should really delete these,
00:16:16
◼
►
'cause the lighting is really bad,
00:16:18
◼
►
or it's blurry, or whatever.
00:16:19
◼
►
And I will delete,
00:16:20
◼
►
I'll look at every picture when I load them into iPhoto,
00:16:23
◼
►
I'll delete the ones, obviously,
00:16:24
◼
►
they're like, excellent, I took a picture of my foot,
00:16:25
◼
►
or like something, you know, they're totally bad.
00:16:28
◼
►
But all one star ones, and then when I wanna clean,
00:16:30
◼
►
it's really easy for me to just show a smart album
00:16:32
◼
►
that shows one star, and then just go through
00:16:34
◼
►
and just delete whole swaths of them.
00:16:35
◼
►
- Yeah, but see, then you can't see the ones around them
00:16:37
◼
►
that were better, so you can really know,
00:16:39
◼
►
Like which of these do I need to keep?
00:16:41
◼
►
- One star means, I mean I can look at the pictures.
00:16:43
◼
►
Like it's like these are so blurry.
00:16:45
◼
►
Like they're not, I'm not one starring.
00:16:46
◼
►
If it's in focus and people are in the,
00:16:48
◼
►
like those never get one star.
00:16:50
◼
►
One star basically means you should really delete this.
00:16:52
◼
►
One star is the thing that most people
00:16:53
◼
►
would delete immediately.
00:16:54
◼
►
I just let them stew and then if I feel like cleaning house,
00:16:57
◼
►
I delete all, I think I deleted every one star
00:17:00
◼
►
from my collection a couple years ago
00:17:01
◼
►
and it was a lot of photos.
00:17:02
◼
►
But now I just kind of let them build up.
00:17:04
◼
►
- Maybe you're just letting them develop like a Polaroid.
00:17:06
◼
►
Like figuring maybe it'll get better
00:17:07
◼
►
I just leave it here for a little few more hours.
00:17:10
◼
►
And also, a picture that is actually out of focus, sometimes we do family calendars where
00:17:17
◼
►
you make the calendar for the year with pictures and everything and they have these little
00:17:20
◼
►
collages where you can put the pictures.
00:17:21
◼
►
Sometimes there's little spots on the calendar for small photos.
00:17:24
◼
►
And even a picture that's blurry, like it's not in focus, when you shrink it down to be
00:17:28
◼
►
like one of the small thumbnails at an angle in the corner of a calendar thing, it doesn't
00:17:32
◼
►
actually even look that bad.
00:17:33
◼
►
So occasionally that's why I'm kind of keeping the one stars around.
00:17:36
◼
►
Or if it's like me trying to see a picture of like,
00:17:40
◼
►
what do I have on this shelf in this year?
00:17:44
◼
►
Where was that thing or whatever?
00:17:46
◼
►
- Oh my God.
00:17:48
◼
►
I wish this system was more intelligent about finding things.
00:17:51
◼
►
For example, I do keyword them,
00:17:53
◼
►
but my keywords are limited to like,
00:17:55
◼
►
I have a keyword for each of my children
00:17:56
◼
►
and then one keyword for me and my wife,
00:17:59
◼
►
'cause I'm not gonna do us individually.
00:18:01
◼
►
You know what I mean?
00:18:02
◼
►
And that's about it.
00:18:03
◼
►
And you just think like, why do you need to do that?
00:18:05
◼
►
doesn't the faces feature find all the people that you want for you?
00:18:08
◼
►
Well, I started doing this before the faces feature existed, long before, first of all.
00:18:12
◼
►
But second of all, no, it's not reliable enough.
00:18:15
◼
►
Like me manually keywording them is much more reliable than faces.
00:18:18
◼
►
I wish I could turn faces off because it's always grinding away, making the fans spin
00:18:22
◼
►
up on the MacBook Air to try to detect people's faces.
00:18:25
◼
►
But that's the same thing I do with iTunes.
00:18:28
◼
►
Starring them and basically using the star as a threshold system easily lets me sort
00:18:32
◼
►
get what people are trying to get by cleaning things out, which is just like, "Just show
00:18:36
◼
►
me three stars or better." Those are the good pictures. There's very few of them. Suddenly
00:18:39
◼
►
my collection becomes small and manageable. And if I want to share photos on PhotoStream
00:18:44
◼
►
or send them to relatives, I just show the three stars. It's super manageable. People
00:18:48
◼
►
want their collections to actually be like that. I can't bring myself to throw out the
00:18:51
◼
►
two-star ones, but the one-star ones I do delete.
00:18:53
◼
►
Now, going back to the Photo app for a second, I think, so one thing that we were skeptical
00:18:59
◼
►
of or hesitant or whatever the right word here is.
00:19:02
◼
►
We are disasters.
00:19:04
◼
►
Yeah, right. I'm still sick. I have a good reason. We were wondering like, you know,
00:19:10
◼
►
one of the issues with cloud service backed things and iCloud stuff in particular is that
00:19:15
◼
►
there's pretty much no visibility into the storage and no recourse if it does something
00:19:21
◼
►
crazy like delete half your contacts. Like it's pretty hard to recover from that in a
00:19:25
◼
►
lot of cases for a lot of these services.
00:19:28
◼
►
And if you have this on your Mac and it has all these files sitting there locally, you
00:19:32
◼
►
can back up these files and then hopefully have some way to reimport them if you had
00:19:37
◼
►
to nuke your whole iCloud account and start clean or restore a bunch of stuff that was
00:19:42
◼
►
And it seems from earlier reports that the storage layout of it, you can import things
00:19:48
◼
►
off disk and it can just leave them where they are and not copy them in.
00:19:51
◼
►
But by default it seems to maintain a very iPhoto-like library structure so that these
00:19:56
◼
►
files are just sitting there as files on your disk.
00:19:59
◼
►
All of your photos are there by default.
00:20:01
◼
►
It will only be smart and try to delete some of the originals or cache things online only
00:20:06
◼
►
if you enable the special low space mode.
00:20:09
◼
►
So you can just have one computer that has the whole library on it and has all those
00:20:13
◼
►
originals sitting there as files and you can always reimport them later.
00:20:16
◼
►
So it does seem like it is durable enough in that way to be used as your main photo
00:20:21
◼
►
app, at least once they work out any glaring bugs.
00:20:24
◼
►
It's actually even better than that.
00:20:25
◼
►
We should explain what the experience of this is.
00:20:27
◼
►
So iPhoto was an app and Aperture was an app that Apple had both discontinued, both being
00:20:31
◼
►
replaced by this app.
00:20:32
◼
►
Both mediocre.
00:20:34
◼
►
Functionality-wise, Photos does not include all the functionality of Aperture.
00:20:37
◼
►
It includes most of the functionality of iPhoto.
00:20:39
◼
►
So this application is coming into people's lives with the expectation that you've already
00:20:44
◼
►
got all your photos in one of these other applications or in a folder of crap somewhere.
00:20:49
◼
►
And it handles all those situations.
00:20:51
◼
►
So like if you have an iPhoto library, when you start it up it will import that iPhoto
00:20:55
◼
►
library and it won't actually make duplicates of the files, it'll just make hard links to
00:20:59
◼
►
We'll put a link in the show notes explaining the hard links.
00:21:01
◼
►
Basically it doesn't take up any more room on your disk, but it makes a separate parallel
00:21:04
◼
►
structure of its own.
00:21:07
◼
►
At that point your libraries are divorced from each other and if you make changes to
00:21:10
◼
►
either one of them, the changes are no longer visible.
00:21:12
◼
►
So it's a one-time kind of import process that doesn't actually take up much more disk
00:21:17
◼
►
space, but at that point they're diverged, like they're not kept in sync with each other.
00:21:21
◼
►
If you have a file full of pictures that just like you've organized yourself, you can just
00:21:25
◼
►
start photos up, make a new empty library, and import those pictures.
00:21:29
◼
►
I believe it will copy them, no it won't copy them in that case.
00:21:32
◼
►
You can tell it to leave the pictures where they are.
00:21:33
◼
►
There's a preference, kind of like the iTunes preference of copy media into the library.
00:21:37
◼
►
You can tell it, "Don't move my stuff, I have it arranged in folders."
00:21:40
◼
►
Just reference them from where they are, and it will do that.
00:21:42
◼
►
It will leave them in your nice organized folder structure.
00:21:44
◼
►
It will put a little thing in the app that shows you like,
00:21:46
◼
►
oh, by the way, this picture isn't in a library.
00:21:48
◼
►
It's referenced from another location.
00:21:50
◼
►
And if you want to work that way,
00:21:51
◼
►
which I would totally recommend not doing
00:21:53
◼
►
because it's crazy and you're a crazy person,
00:21:56
◼
►
the application will do that for you.
00:21:57
◼
►
You can organize your photos into little folders by date
00:22:01
◼
►
and name them whatever the heck you want,
00:22:02
◼
►
and then just reference them from the Photos app
00:22:04
◼
►
and continue that crazy workflow
00:22:06
◼
►
where you act as a little person
00:22:08
◼
►
putting things into folders
00:22:09
◼
►
and then reference them from the application.
00:22:11
◼
►
And just like iPhoto, you can hold on the option key
00:22:14
◼
►
on launch and switch among different libraries.
00:22:16
◼
►
The only limitation you have is,
00:22:18
◼
►
and this is all just like totally local,
00:22:20
◼
►
forget about network connection.
00:22:21
◼
►
This just all works totally locally,
00:22:22
◼
►
no cloud stuff involved at all, right?
00:22:24
◼
►
If you wanna do some cloud stuff,
00:22:26
◼
►
then you can designate one library as like,
00:22:29
◼
►
the what, the system library, whatever,
00:22:31
◼
►
like the iPhoto, the iCloud library.
00:22:33
◼
►
One library on your system can be cloud backed up.
00:22:36
◼
►
And then you have the choice of,
00:22:38
◼
►
do I want to keep all the originals on my Mac
00:22:40
◼
►
and then also put them in the cloud,
00:22:42
◼
►
or they want to use whatever it calls
00:22:43
◼
►
like smart or advanced storage
00:22:45
◼
►
or whatever some other preference that says,
00:22:47
◼
►
I don't care if they're all on my Mac,
00:22:48
◼
►
you can actually take some of them off my Mac
00:22:50
◼
►
as long as they're in the cloud,
00:22:51
◼
►
and that's the second option.
00:22:52
◼
►
So this is an extremely flexible application
00:22:54
◼
►
that does things in pretty much the smartest way possible
00:22:57
◼
►
given the current file system technology we have,
00:22:59
◼
►
that leaves every person able to do whatever it is
00:23:02
◼
►
that they want with their photos.
00:23:04
◼
►
The only bad thing about it transition-wise
00:23:06
◼
►
is if this app is completely buggy and like erases stuff
00:23:09
◼
►
and destroys your photos and they get lost in the cloud
00:23:10
◼
►
and everything, any changes you made after that initial
00:23:14
◼
►
kind of one-time import process will be lost
00:23:17
◼
►
because once you do that import,
00:23:19
◼
►
you are now leaving iPhoto behind.
00:23:21
◼
►
I suppose you could import your photos into both of them
00:23:23
◼
►
in parallel, but then you will actually be duplicating
00:23:25
◼
►
because the one-time import with the hard linking stuff,
00:23:28
◼
►
it doesn't take up much more space,
00:23:30
◼
►
that's not an ongoing thing.
00:23:32
◼
►
So there is a transition point.
00:23:34
◼
►
And so I suspect if I try out this program,
00:23:36
◼
►
I will try it out and then, I don't know,
00:23:40
◼
►
maybe just like bail out after importing
00:23:42
◼
►
a couple of pictures into it
00:23:43
◼
►
and then reimport those same things into my photo library.
00:23:46
◼
►
Like I still don't have a good transition pan,
00:23:47
◼
►
but spec wise, the photos application
00:23:51
◼
►
seems like it does all the right things
00:23:53
◼
►
to make everybody except for aperture users who are screwed.
00:23:57
◼
►
It will import your aperture library,
00:23:58
◼
►
everybody happy except for the people who use the aperture
00:24:01
◼
►
and will miss all the features that aperture have
00:24:03
◼
►
that this doesn't have in terms of advanced photo editing.
00:24:06
◼
►
Well, the editing controls are actually not that far off.
00:24:09
◼
►
This is one of the reasons I'm very excited about this app,
00:24:11
◼
►
that the actual editing process
00:24:14
◼
►
and the controls you have for editing are very advanced
00:24:17
◼
►
and really are pro-level editing tools
00:24:19
◼
►
compared to Aperture and Lightroom.
00:24:22
◼
►
Lightroom is probably slightly more advanced
00:24:24
◼
►
in certain areas.
00:24:25
◼
►
Aperture, I'm not sure I haven't used it in a couple years,
00:24:26
◼
►
but it's probably very closely matched
00:24:30
◼
►
to those editing tools.
00:24:31
◼
►
Where it falls short is in the organizational tools
00:24:34
◼
►
things like Aperture and Lightroom, and especially if you're coming from Aperture, I think it's
00:24:38
◼
►
going to be, if you were really heavily using those organizational systems of vaults and
00:24:44
◼
►
all these things, most of that is not going to transfer over gracefully. So that's really
00:24:50
◼
►
where Aperture users are going to be very rightfully upset. But besides that, it looks,
00:24:55
◼
►
again, I haven't used it yet, but it sure looks like the editing and processing of the
00:25:01
◼
►
photos is just as good as Aperture was.
00:25:03
◼
►
But they don't have the interface of doing the pics.
00:25:06
◼
►
A lot of Aperture was about professional photographers
00:25:09
◼
►
taking lots of photos and then designating
00:25:12
◼
►
the ones they think are good in an efficient manner.
00:25:15
◼
►
There's no workflow like that, as far as I can tell,
00:25:17
◼
►
built into photos.
00:25:18
◼
►
Whereas Aperture, so much of Aperture
00:25:20
◼
►
was focused on the editing tools, which is one thing,
00:25:23
◼
►
and then this whole, like you said,
00:25:25
◼
►
the vaults and the management, and then the picking process.
00:25:28
◼
►
I forget what they call it.
00:25:28
◼
►
Is that the word they use?
00:25:30
◼
►
It might be.
00:25:30
◼
►
I don't know.
00:25:31
◼
►
Again, it's been a couple of years since I've used Aperture.
00:25:33
◼
►
But yeah, I mean Aperture and Lightroom are both gonna be way better for what pros actually do.
00:25:38
◼
►
Like my wife, Tiff, is not gonna use this photo app. I can already tell you that. She's not gonna use it.
00:25:42
◼
►
She has, even Aperture and Lightroom are too heavy-handed for her.
00:25:46
◼
►
She just uses Bridge and a bunch of directories because like the one she does client shoots,
00:25:50
◼
►
she doesn't want to bring it into some giant library
00:25:52
◼
►
program and have it organize things for her. Like she does it all in the file system with Bridge and does all the picking that
00:25:58
◼
►
way and it works great for her.
00:25:59
◼
►
Most pros are going to have a system like that where they're going to use one of these pro apps
00:26:03
◼
►
To do all that organizational and stuff and managing the shoots and managing the picking and all that stuff
00:26:08
◼
►
They're not going to use this app, but that's fine. This isn't made for them
00:26:11
◼
►
this is made for the people like me who and and of course everybody else but like
00:26:17
◼
►
People like me who were using
00:26:19
◼
►
Aperture and or lightroom for its advanced editing controls primarily and then secondarily we would occasionally touch some of these library functions
00:26:27
◼
►
but we were mainly there for the editing controls.
00:26:30
◼
►
That's definitely the case for me.
00:26:31
◼
►
I know it's the case for a lot of people
00:26:34
◼
►
who bought SLRs in the last eight years
00:26:38
◼
►
and got into photography as a nice hobby.
00:26:40
◼
►
Just having these nice editing controls
00:26:43
◼
►
built into the main photos library mechanism
00:26:47
◼
►
on iOS devices and Macs is going to be awesome.
00:26:49
◼
►
Because for all these years, we've
00:26:51
◼
►
had to decide between something that's fully integrated
00:26:55
◼
►
into Apple's ecosystem and syncs everywhere
00:26:57
◼
►
and is all in all the photo pickers and all that stuff,
00:26:59
◼
►
or has great editing controls and pro stuff,
00:27:03
◼
►
and there were always these things you'd have to give up
00:27:05
◼
►
one way or the other,
00:27:07
◼
►
and this looks like it's perfect for people like me.
00:27:10
◼
►
Any prosumer who's really into SLR photography,
00:27:13
◼
►
but is not doing pro photo shoots actually for clients
00:27:17
◼
►
every day or on the weekends or whatever,
00:27:19
◼
►
this is for us, and I'm very much looking forward to that.
00:27:22
◼
►
- I think the editing controls,
00:27:23
◼
►
like the adding intelligence to the editing controls
00:27:25
◼
►
is really important because they default for most photo apps, including Apple's, with the
00:27:30
◼
►
exception of the little magic wand enhance button.
00:27:33
◼
►
They give you one button, it's like, "You don't understand all these crazy controls.
00:27:36
◼
►
Press the magic wand and maybe it will make your photo look better or maybe it won't."
00:27:39
◼
►
And if you press that button and didn't like it, you're like, "Whatever."
00:27:41
◼
►
And then you're faced with, "Okay, well, so the magic wand didn't work?
00:27:44
◼
►
Here's 8,000 sliders.
00:27:46
◼
►
And if you don't know how to use those sliders, it's daunting to figure out how to just, you
00:27:51
◼
►
know, there's a million different combinations and you're trying like, "I don't know, do
00:27:53
◼
►
I move this and that or whatever?"
00:27:55
◼
►
Well, so Photos has this sort of intelligent thing
00:27:57
◼
►
where they give you sliders that are sort of meta sliders
00:28:00
◼
►
that cause the other sliders to move
00:28:01
◼
►
in what it hopes are pleasing ways.
00:28:03
◼
►
And you're like, oh, well, that's bad.
00:28:04
◼
►
I don't want it to be smart
00:28:05
◼
►
and move those other sliders around.
00:28:06
◼
►
I wanna move the actual sliders.
00:28:07
◼
►
Well, the great thing is you can use these meta controls
00:28:10
◼
►
that influence the other sliders to try to,
00:28:12
◼
►
like most people can do that and say,
00:28:14
◼
►
oh, I would never have thought
00:28:15
◼
►
to put those other sliders in this position,
00:28:17
◼
►
but when I slide this top slider,
00:28:18
◼
►
all these other things move around.
00:28:19
◼
►
But you still have the ability to edit
00:28:21
◼
►
every single one of the detail sliders manually as well.
00:28:24
◼
►
So if you want to use the sliders by hand, you can.
00:28:26
◼
►
But most people have no idea how to get good results
00:28:28
◼
►
with that so they can use those other meta sliders.
00:28:30
◼
►
So it's a big step up from either Magic Wand
00:28:33
◼
►
or you're on your own.
00:28:34
◼
►
- And all these edits are fully synced,
00:28:37
◼
►
not just like burning it into a JPEG and syncing that.
00:28:40
◼
►
The actual edit states are synced so that you can go
00:28:43
◼
►
on your phone or your iPad and make adjustments
00:28:46
◼
►
and that syncs back.
00:28:47
◼
►
- Well, in theory, I mean, let's be serious.
00:28:50
◼
►
- Well, I mean, this is all based on CloudKit.
00:28:52
◼
►
So far, our CloudKit stuff has been solid.
00:28:54
◼
►
- Why didn't my contacts sync, Marco?
00:28:56
◼
►
Contacts, it's like a tiny set of data, why?
00:28:59
◼
►
- That's a good question, I have no idea.
00:29:01
◼
►
- My faith is like, yeah, I'm ready to be impressed.
00:29:04
◼
►
- It seems like, you know, I've heard rumblings,
00:29:08
◼
►
I'm sure everyone's heard these rumblings,
00:29:09
◼
►
that like, Eddy Cue's team took over iCloud,
00:29:13
◼
►
something something, and was really like,
00:29:15
◼
►
revolutionizing and fixing stuff like a year ago.
00:29:17
◼
►
Like that's when all this stuff started, allegedly.
00:29:20
◼
►
and it seems like CloudKit and the Cloud Photo Library stuff
00:29:25
◼
►
and all the stuff that came out of that
00:29:26
◼
►
that's all based on CloudKit,
00:29:28
◼
►
seems like that is most likely to be
00:29:31
◼
►
the result of that rumor.
00:29:33
◼
►
And that we're seeing now,
00:29:34
◼
►
they're doing good things with the cloud stuff now.
00:29:38
◼
►
Rather than the initial iCloud services stuff,
00:29:40
◼
►
which was the document stuff,
00:29:42
◼
►
which is a fairly simple problem set,
00:29:45
◼
►
but it was done kinda oddly, but mostly worked.
00:29:49
◼
►
Key value store, which works all right,
00:29:50
◼
►
and then core data sync, which was a disaster,
00:29:53
◼
►
'cause they tried to tackle this incredibly complex problem
00:29:56
◼
►
that really can't be done well
00:29:57
◼
►
in the way they attempted to do it,
00:30:00
◼
►
and of course, so it sucked.
00:30:02
◼
►
CloudKit was like, we talked about this
00:30:04
◼
►
when they announced it back in the summer,
00:30:05
◼
►
like CloudKit is Apple kind of saying,
00:30:08
◼
►
okay, we're gonna do a cloud service
00:30:09
◼
►
that actually is much easier to do well,
00:30:13
◼
►
and so far, it seems like they did.
00:30:16
◼
►
So I'm pretty confident in this service probably being good.
00:30:21
◼
►
I mean, we'll see what happens in practice
00:30:24
◼
►
once it's launched full scale and everything,
00:30:25
◼
►
and we've all been using it for a few months.
00:30:27
◼
►
But I think all the pieces seem to be in place
00:30:30
◼
►
for this to actually be good and work pretty well
00:30:33
◼
►
most of the time or all the time.
00:30:35
◼
►
- Well, just the fact that they're dogfooding it so heavily,
00:30:37
◼
►
I think is a pretty big change from, say, iCloud
00:30:41
◼
►
with Core Data or Core Data with iCloud
00:30:42
◼
►
or whatever the terminology was.
00:30:45
◼
►
The impression I had was that nobody was dogfooding that,
00:30:48
◼
►
but just like you said, Marco,
00:30:50
◼
►
it sounds like Apple's heavily dogfooding CloudKit,
00:30:55
◼
►
and that's definitely a good thing for all of us,
00:30:58
◼
►
because I think Apple is fairly tolerant
00:31:01
◼
►
of third-party developers having to jump through hoops,
00:31:04
◼
►
and fairly intolerant of their own people
00:31:07
◼
►
having to jump through hoops.
00:31:09
◼
►
- Oh yeah, that's fair, and as far as I know,
00:31:10
◼
►
I don't think any Apple app ever used Core Data Sync.
00:31:15
◼
►
I'm pretty sure we never found one.
00:31:16
◼
►
I know some people were trying to like,
00:31:18
◼
►
they were asking around on Twitter like, you know,
00:31:20
◼
►
a year ago or whenever, like,
00:31:20
◼
►
"Does any Apple app actually use this?"
00:31:21
◼
►
I don't think we ever found one.
00:31:23
◼
►
But anyway, I'm confident.
00:31:25
◼
►
And also, you know, I wouldn't necessarily like
00:31:27
◼
►
be all nostalgic for Aperture,
00:31:29
◼
►
because Apple has been a terrible steward of Aperture
00:31:31
◼
►
since the beginning.
00:31:32
◼
►
Like, it always had delays, issues,
00:31:35
◼
►
it was always pretty buggy,
00:31:37
◼
►
it always had terrible performance.
00:31:39
◼
►
Most of all, it would just go years
00:31:42
◼
►
without any major updates,
00:31:44
◼
►
and everything was always just too little, too late.
00:31:46
◼
►
It was always getting better soon
00:31:48
◼
►
and never actually great.
00:31:50
◼
►
That's why Lightroom does so well,
00:31:52
◼
►
because Apple basically said,
00:31:55
◼
►
"Hey, we're gonna eat at Apple."
00:31:56
◼
►
I think they basically invented the category
00:31:58
◼
►
of apps that work like this, basically.
00:32:01
◼
►
I think, I'm not sure about that.
00:32:02
◼
►
Please email Casey.
00:32:05
◼
►
And then Adobe came in with Lightroom
00:32:08
◼
►
and just ate their lunch,
00:32:09
◼
►
because they just iterated so much faster
00:32:11
◼
►
and it was so much better.
00:32:13
◼
►
Apple really, you know,
00:32:14
◼
►
Aperture was always pretty badly neglected.
00:32:16
◼
►
So, you know, rose colored glasses and everything,
00:32:19
◼
►
I don't think we're gonna see people looking back
00:32:21
◼
►
in six months saying, "Oh, I really miss Aperture."
00:32:23
◼
►
Like, I don't think so.
00:32:24
◼
►
And for the few who do say that,
00:32:26
◼
►
I think they're probably gonna be misremembering
00:32:29
◼
►
how good it actually was.
00:32:31
◼
►
- I thought I saw somewhere,
00:32:33
◼
►
and it might have been in Jason Snell's review,
00:32:35
◼
►
but I thought I saw somebody had loaded
00:32:37
◼
►
just a crud load of images, of pictures,
00:32:40
◼
►
into the new Photos app,
00:32:42
◼
►
and they said you could scroll that thing
00:32:44
◼
►
at a solid 60 frames per second like it was nothing.
00:32:46
◼
►
- I will be excited to see that if that's true.
00:32:48
◼
►
That's why I wanted to try it.
00:32:49
◼
►
I'm like, I've gotta see this
00:32:50
◼
►
'cause it is so terrible in iPhoto.
00:32:52
◼
►
I have maybe 30, 40, maybe I have more than that.
00:32:55
◼
►
40,000 photos, 50, and maybe it's up to 60.
00:32:57
◼
►
Anyway, it doesn't seem like that big a number,
00:32:59
◼
►
but I wanna see that scroll nicely.
00:33:01
◼
►
- We are also sponsored this week by H-Over.
00:33:05
◼
►
H-Over is the best way, oh, it's also Hover, or Hova,
00:33:09
◼
►
all of those things.
00:33:10
◼
►
Hover is the best way to buy Manix domain names.
00:33:12
◼
►
Go to hover.com and you can get 10% off your first purchase by using promo code "SLOTTOASTERPEOPLE".
00:33:21
◼
►
When you have a great idea, you want a great domain name that's catchy and memorable.
00:33:24
◼
►
Hover gives you exactly what you need to find the perfect domain for your idea so you can
00:33:28
◼
►
get started actually working on it.
00:33:30
◼
►
Like I've mentioned before, if I'm working on a new project, I need to find a name first.
00:33:34
◼
►
I can't really move forward without a name.
00:33:37
◼
►
That just blocks me until I get a name, and domain names are the very first thing I go
00:33:40
◼
►
to go to search, and hover is great for that.
00:33:43
◼
►
Hover gives you easy to use powerful tools to bio-manage domains so anybody can do it,
00:33:47
◼
►
and the support team is always ready if you need a hand.
00:33:50
◼
►
They're known for their no-wait, no-hold, no-transfer phone service, so when you call,
00:33:54
◼
►
a real-life human being is ready to help.
00:33:57
◼
►
They pick up the phone, that's it, they're ready to help you, you're not put on hold,
00:33:59
◼
►
you're not transferred to anybody, that's it, they pick up and they help you, it's amazing.
00:34:04
◼
►
Plus they have great online tutorials and email support if you hate the phone like me.
00:34:08
◼
►
You can find new domain names that you want to get up and running in less than 5 minutes.
00:34:11
◼
►
All you gotta do is type in a few keywords, and Hover will show you the best available
00:34:15
◼
►
options across all TLDs out there.
00:34:18
◼
►
Now if you've ever used any other domain host before, you know that it can be a pretty unpleasant
00:34:23
◼
►
experience at a lot of these different companies.
00:34:26
◼
►
They make it very complicated to buy just what you need, or they try to upsell you with
00:34:29
◼
►
crazy stuff, or they make you pay extra to upgrade for things that really should be included.
00:34:34
◼
►
Hover does not believe in this kind of approach.
00:34:36
◼
►
Instead of charging you for something that should just be there, Hover includes everything
00:34:39
◼
►
you need with your domain.
00:34:40
◼
►
You get a smart control panel, you get whois privacy, always for free on any domain that
00:34:44
◼
►
supports it.
00:34:45
◼
►
They even offer this really cool service called Valley Transfer Service.
00:34:48
◼
►
Now what they do is, if you will let them, they will log into your old registrar and
00:34:52
◼
►
do any transfers for you.
00:34:55
◼
►
They'll transfer over all your DNS and everything so it's all correct because it's very easy
00:34:58
◼
►
to get that stuff wrong and then your site's down for a few hours, it sucks.
00:35:01
◼
►
They will log in and do it for you if you want because some registrars make it pretty
00:35:05
◼
►
difficult to leave and of course they don't. They also have this great email service. Hover
00:35:10
◼
►
has great solutions for your own custom email address for your domain. 20 bucks a year gets
00:35:14
◼
►
you a fully functional email account at your domain with 10 gigs of storage. You guys remember
00:35:18
◼
►
when Gmail came out, it was 1 gig, this was like in 2004, and that was revolutionary to
00:35:25
◼
►
have a gigabyte. No one could ever use that much. Well, we do. And Hover now offers 10
00:35:31
◼
►
a year for just 20 bucks. Now if you need more than that, for just $29 a year, you can
00:35:36
◼
►
get the big mailbox. It's actually what it's called. It's called Big Mailbox. That gets
00:35:39
◼
►
you a terabyte of storage plus some other nice bonuses. So $29 a year gets you a mailbox
00:35:44
◼
►
that can hold a terabyte of email, which I think sounds like my personal hell. They even
00:35:49
◼
►
have email forwarding for just $5 a year, so you can keep using, if you already have
00:35:53
◼
►
an email account somewhere else like Fastmail, whatever, you can keep using that for just
00:35:57
◼
►
$5 a year. That will forward your email for your domain to anywhere you want.
00:36:00
◼
►
Anyway, all this is great.
00:36:01
◼
►
You can get 10% off your first purchase from Hover
00:36:03
◼
►
by going to hover.com and use promo code SLOTTOASTERPEOPLE,
00:36:07
◼
►
all one word, SLOTTOASTERPEOPLE.
00:36:10
◼
►
Thanks a lot to Hover for sponsoring our show once again.
00:36:13
◼
►
- Okay, so there was a little bit of a surprise
00:36:17
◼
►
within the Photos app, and some people went spelunking.
00:36:20
◼
►
I'm assuming it was Steve Troutonsmith.
00:36:23
◼
►
Is that right, Steven Troutonsmith?
00:36:24
◼
►
I'm sorry, but that guy.
00:36:27
◼
►
and we have, he, they, someone has discovered UXKit.
00:36:32
◼
►
So UXKit appears to be sorta kinda UIKit for the Mac.
00:36:37
◼
►
Marco, do you wanna talk about this a little bit?
00:36:41
◼
►
- Yeah, so it's a private framework that is used
00:36:43
◼
►
only by the Photos app at the moment
00:36:45
◼
►
that Apple shipped with the Photos app beta.
00:36:47
◼
►
And it appears, you know, you can't,
00:36:49
◼
►
no one's like disassembling it, I don't think,
00:36:51
◼
►
but you can class dump it and you can kinda see
00:36:53
◼
►
just like what classes and methods are contained within it
00:36:56
◼
►
from the Objective-C runtime.
00:36:58
◼
►
- It's not just photos, by the way.
00:37:00
◼
►
People say that Xcode 6.3 beta also uses UXKit.
00:37:03
◼
►
- That's interesting if that's true.
00:37:05
◼
►
I do not know that.
00:37:05
◼
►
- Yeah, there's a tweet from Don Mowry saying that.
00:37:08
◼
►
I suppose it's easy enough to confirm,
00:37:10
◼
►
but I put a tweet in the show notes.
00:37:12
◼
►
- That is interesting.
00:37:13
◼
►
Well, anyway, so, and what it appears to be
00:37:16
◼
►
is a subset of UIKit ported to the Mac,
00:37:19
◼
►
and so there are things, and just like, you know,
00:37:22
◼
►
with the UI prefix replaced with UX,
00:37:25
◼
►
And so there's things like, I think there's a UX navigation
00:37:28
◼
►
controller and stuff like that.
00:37:29
◼
►
And there's UX color or UX-- all this.
00:37:33
◼
►
Because normally, between UIKit on the iPhone
00:37:35
◼
►
and AppKit on the Mac, there are a lot of big differences,
00:37:39
◼
►
but a lot of also just little superficial differences.
00:37:42
◼
►
The prefix for UIKit is just UI.
00:37:45
◼
►
The prefix for AppKit is NS.
00:37:47
◼
►
And so you have some classes like UI color versus NS color,
00:37:51
◼
►
and UI image versus NS image.
00:37:53
◼
►
And many of these classes that have these superficial name differences aren't that
00:37:58
◼
►
different, or the Mac version supports some ancient stuff that no one really uses anymore,
00:38:03
◼
►
so you might as well just unify them.
00:38:06
◼
►
So there's a lot of overlap that seems trivial, and many people have written C macros or utility
00:38:14
◼
►
classes to have a unified codebase that shares some of this code between iOS and Mac more
00:38:20
◼
►
So this appears to be Apple's version of this on this one app in this one team, where this
00:38:27
◼
►
is their translation layer to have the same code, probably, to have the same code running
00:38:32
◼
►
on iOS and Mac.
00:38:35
◼
►
So the question is, is it just this one team?
00:38:38
◼
►
Is it just this one app?
00:38:39
◼
►
Or is this going to be a more widespread thing?
00:38:41
◼
►
Is it going to become public?
00:38:43
◼
►
And is this going to be the new unified UI framework so that you can share a lot more
00:38:47
◼
►
code between iOS and Mac?
00:38:49
◼
►
That's all, basically nobody knows anything about that yet, everyone's just speculating,
00:38:54
◼
►
but that's why this is interesting. What do you guys think?
00:38:58
◼
►
Guy English had a good point, and it's the analogy that came to mind when I thought it
00:39:02
◼
►
was well. So, setting aside that Xcode 6.3 also appears to use it according to this tweet,
00:39:09
◼
►
Guy pointed out ProKit.framework, remember that?
00:39:11
◼
►
Yeah, all the pro apps, Logic and everything, Aperture.
00:39:15
◼
►
What are the other apps that used it?
00:39:19
◼
►
Maybe Shake when that was out.
00:39:21
◼
►
Not Final Cut.
00:39:22
◼
►
Well, maybe Final Cut.
00:39:23
◼
►
Anyway, a whole bunch of Apple's apps that look different, like the window chrome was
00:39:26
◼
►
different, it was darker and sometimes it was smaller and they had their own little
00:39:30
◼
►
weird set of controls and everything.
00:39:31
◼
►
They used ProKit framework, which was a framework shared among Apple applications that gave
00:39:39
◼
►
a different UI.
00:39:40
◼
►
I mean, I assume it wasn't just look and feel.
00:39:42
◼
►
I assume it had other features as well.
00:39:43
◼
►
But the point is that it was a framework that was not for public consumption
00:39:47
◼
►
That Apple used on multiple applications that never became the future of AppKit, right?
00:39:53
◼
►
So the idea that UXKit could just be a thing that Apple uses internally to make its applications
00:39:58
◼
►
This is a completely viable idea. It's not crazy to think
00:40:02
◼
►
Oh, well now once they UXKit like because Apple also does the opposite they they take
00:40:07
◼
►
Frameworks they use them privately for a release or two and then make them public, right?
00:40:12
◼
►
So now we can't tell whether this is going to be one of those things that's used privately
00:40:16
◼
►
and becomes public, or is it just another ProKit that Apple will use internally to make
00:40:20
◼
►
its life easier when it makes its applications, but it is not the future of making UIs on
00:40:26
◼
►
There is some debate around this from smart programmers who are saying, "Look, you really
00:40:30
◼
►
don't want to have the unified framework because the Mac and iOS UI-wise are different."
00:40:37
◼
►
And the very low-level stuff, the foundation classes, that's like the data structures,
00:40:41
◼
►
the networking, stuff like that, that all is unified already.
00:40:45
◼
►
And what's mainly not is UI stuff.
00:40:49
◼
►
And there is a great argument to be made there that many people have made that that should
00:40:53
◼
►
be separate because just porting an iOS app directly to Mac and using a lot of the iOS
00:41:00
◼
►
interface paradigms like navigation controllers and things like that, it doesn't really work
00:41:04
◼
►
well on the Mac.
00:41:05
◼
►
It's really not like that's kind of a waste of what the Mac is good at and it just kind
00:41:09
◼
►
and it feels like you're clicking an iPad app basically.
00:41:11
◼
►
- But what about things like collection views,
00:41:13
◼
►
like the fancy iOS collection views
00:41:14
◼
►
that sort of reflow themselves,
00:41:17
◼
►
or even just something like a better table view.
00:41:19
◼
►
I mean, I know they've improved table view
00:41:20
◼
►
getting rid of NSL and everything.
00:41:22
◼
►
Those type of things kind of span the range.
00:41:24
◼
►
I mean, they might still have weird APIs
00:41:26
◼
►
like touches begin inside cell,
00:41:28
◼
►
and it's like, what do you mean touches?
00:41:30
◼
►
There's no, you know what I mean?
00:41:31
◼
►
What you have to think is, look, this framework exists,
00:41:34
◼
►
and the class names make you think it's very UI,
00:41:37
◼
►
Like why would Apple bother making this?
00:41:39
◼
►
And for the Photos app, the obvious answer to me is,
00:41:42
◼
►
the photos for the Mac app looks like photos for iOS,
00:41:46
◼
►
right down to zooming out and seeing that giant grid
00:41:48
◼
►
of like photos for this month or week or year.
00:41:50
◼
►
Like it is very clearly a Mac-ification
00:41:54
◼
►
of the iOS Photos app.
00:41:56
◼
►
So UI wise, you know, ignoring like the backend
00:41:58
◼
►
and how it stores photos and the iCloud
00:42:00
◼
►
and everything like that.
00:42:02
◼
►
So much, it looks much more like,
00:42:04
◼
►
hey, someone ported iOS photos to the Mac
00:42:05
◼
►
in anything like, "Hey, someone made a new version of iPhoto."
00:42:09
◼
►
So if you have the existing Photos app, which presumably uses UIKit, and you wanted to make
00:42:15
◼
►
a Mac version of that, being able to reuse, if not that code directly, then that code
00:42:23
◼
►
indirectly or the structure of the program, it would be really convenient to have something
00:42:27
◼
►
like UXKit where you can get the benefit of all that UIKit code and get some semblance
00:42:33
◼
►
of a Mac version up and running faster.
00:42:35
◼
►
That doesn't answer the question of why it would be used in Xcode, but historically Xcode
00:42:39
◼
►
has been used to dogfood all sorts of weird stuff like garbage collection and, uh, what
00:42:43
◼
►
was the other one, it was dogfood-arc, I think?
00:42:45
◼
►
Did it dogfood-arc first?
00:42:47
◼
►
Anyway, that could also just be Xcode dogfooding things, because if you're gonna experiment
00:42:51
◼
►
with weird technologies you should definitely do it on the application that developers use
00:42:54
◼
►
to write programs.
00:42:56
◼
►
The argument of "you should keep them separate" is weakened once you start looking at, like,
00:43:02
◼
►
What things in iOS would you not have on the Mac, and vice versa?
00:43:07
◼
►
And I think that list is actually a lot smaller than you might expect if you're starting to
00:43:12
◼
►
make this argument.
00:43:13
◼
►
And if you look, like, as you said, Collection View, that's applicable to both.
00:43:19
◼
►
So many little components.
00:43:20
◼
►
UI Control, UI Image, UI Image View, UI Label, Table View, Text View, so many of these things
00:43:27
◼
►
actually, like, there's not a great argument that they shouldn't be the same on both.
00:43:32
◼
►
It's really just the very high level structures, the very high level navigation concepts, navigation
00:43:38
◼
►
layouts, that kind of stuff should be different on both.
00:43:41
◼
►
But that's really a very small part of UIKit in the grand scheme of things.
00:43:44
◼
►
And you don't even know, like you say "Oh, navigation controller, we don't really push
00:43:47
◼
►
new things on it."
00:43:48
◼
►
But there's no reason you couldn't make a Mac app that in one of its windows does a
00:43:52
◼
►
sort of UI navigation controller thing of pushing a new view on and popping it off.
00:43:57
◼
►
It might be weird, but arguably a lot of the existing OS X apps do a lot of iOS-y type
00:44:05
◼
►
Hell, I think in Messages it has buttons that aren't buttons but are just colored text.
00:44:09
◼
►
I think I pointed that out in my Yosemite review if I meant to.
00:44:12
◼
►
There's a details button or something in Messages that is not a button, it is just blue text.
00:44:15
◼
►
It's like, "This is not iOS, what do you think you're doing here?"
00:44:17
◼
►
But people accept it.
00:44:19
◼
►
It's like, "Alright, whatever, I know when I click that I get details."
00:44:23
◼
►
serving certain interests, as an iOS programmer who doesn't know much about the Mac, it
00:44:29
◼
►
would make me way more likely to start tackling a Mac app if this stuff was more consistent.
00:44:34
◼
►
And I know, like, if I just dive into the Mac and really am committed to it, I could
00:44:38
◼
►
work through AppKit pretty well, I could figure it out, you know, that's not the only reason
00:44:44
◼
►
I'm not making a Mac app, but it would definitely make me a lot more likely to make a Mac app
00:44:48
◼
►
sooner and it would make it a smaller undertaking if a lot of this stuff is unified, instead
00:44:53
◼
►
of having all these little superficial differences, some big, some small.
00:44:58
◼
►
That has to play in somewhat to any decision they make to this.
00:45:02
◼
►
If Apple wants to encourage more Mac apps, if they want to populate the desolate, awful
00:45:08
◼
►
landscape of the Mac App Store, which is really sad in a lot of places, if they want to help
00:45:13
◼
►
populate that with more, better apps, if they want to get more people making Mac apps, more
00:45:18
◼
►
people using the Mac for a lot of this stuff. They have to make it easier for developers.
00:45:22
◼
►
Right now, all the people who are saying this shouldn't be unified are all long-time Mac
00:45:30
◼
►
programmers. Long-time iOS programmers, I think, are very excited about this idea. We
00:45:37
◼
►
look at the Mac as like, "Well, we could go here fairly easily, but all this stuff
00:45:41
◼
►
is needlessly different."
00:45:43
◼
►
Yeah, and like even if you made the core of your app like oh it's all written in
00:45:48
◼
►
sort of completely platform agnostic manner and it doesn't really matter or
00:45:51
◼
►
I'm using some framework that's on both places like core data or something, the
00:45:55
◼
►
UI part is like you see like oh and just we'll just put a different UI on top of
00:46:00
◼
►
it. I'm not gonna say it's the hard part but it's a surprising amount of work and
00:46:03
◼
►
if you have to repeat it and keep them in sync and every time you want to add a
00:46:06
◼
►
feature you have to add it in both places of a totally different code
00:46:08
◼
►
using different APIs it's just it's a lot of extra work. I'm not sure UXKit
00:46:13
◼
►
it makes it, you know, lowers the barrier enough to really move the needle on the Mac
00:46:19
◼
►
App Store because it has other problems, you know, and it's just there's so few Mac users,
00:46:25
◼
►
like I think you'd have to really make it a low barrier for someone's, "Hmm, I can address
00:46:28
◼
►
the market of like hundreds of millions of iOS devices or like a couple of Mac people
00:46:33
◼
►
like there's like a million or two or five or whatever."
00:46:36
◼
►
So the iPhone is just such a monster and that's just one iOS device compared to the Mac, right?
00:46:41
◼
►
But if this was their goal, like their long-term goal, like we're going to dog food this, we're
00:46:46
◼
►
going to see if it's possible, because we as Apple have a bunch of iOS apps that we've
00:46:50
◼
►
decided this is the right way to do photos with the stupid view where you zoom out and
00:46:53
◼
►
see everything as a big thing and you put your finger or your cursor over it and see,
00:46:57
◼
►
you know, that's the future of photos.
00:46:59
◼
►
We already wrote that app.
00:47:01
◼
►
Can't we just get that to run on the Mac?
00:47:02
◼
►
Well, no, because X, Y, and Z.
00:47:03
◼
►
It's like, well, okay, so we have a job to do.
00:47:05
◼
►
We can use this UX Git framework to be the first people to try to do that.
00:47:09
◼
►
But Apple has way more resources to throw towards the successor to iPhoto than the average
00:47:15
◼
►
developer with an iOS app who might be thinking about making a Mac app.
00:47:18
◼
►
So if Apple runs this experiment and decides, "Boy, this really makes porting much easier,"
00:47:23
◼
►
then what do they do about it?
00:47:24
◼
►
Do they just say...
00:47:26
◼
►
How would they...
00:47:27
◼
►
Assume that this is a successful experiment inside Apple and assume that the goal of it
00:47:30
◼
►
was to see if this is something that developers might want for the reasons that Marco stated.
00:47:34
◼
►
How does Apple then at WWDC announce this as a thing?
00:47:38
◼
►
And tell, like, what is the messaging?
00:47:41
◼
►
It's like, so you're thinking of writing a Mac app.
00:47:43
◼
►
If you have an iOS version, then look at UXKit,
00:47:47
◼
►
'cause you could reuse a lot of that same code,
00:47:48
◼
►
changing all the capital I's to capital X's or something.
00:47:51
◼
►
But otherwise use AppKit, or is the message like,
00:47:54
◼
►
this is the future of writing Mac applications.
00:47:57
◼
►
It just happens to look like the iOS one.
00:47:59
◼
►
But even if you never write an iOS Mac,
00:48:00
◼
►
we're telling you you should use UXKit
00:48:02
◼
►
to write your Mac apps.
00:48:04
◼
►
- Well, honestly, I think if they actually unified it,
00:48:07
◼
►
it would just be called UIKit Everywhere.
00:48:09
◼
►
- Like that's the direction they would go.
00:48:11
◼
►
They would work from iOS back to the Mac,
00:48:14
◼
►
and they would just bring over everything named UIKit
00:48:17
◼
►
that makes sense to have on the Mac.
00:48:19
◼
►
And also, one advantage they would have here is right now,
00:48:22
◼
►
they're maintaining two different frameworks.
00:48:24
◼
►
They're maintaining two different UI libraries,
00:48:26
◼
►
and AppKit is very, very old,
00:48:30
◼
►
and there's a lot of cruft in there from the olden days.
00:48:33
◼
►
UIKit was kind of like a rewrite of AppKit for the iPhone,
00:48:38
◼
►
and to be more modern and to be more efficient
00:48:42
◼
►
and have all these new capabilities
00:48:44
◼
►
and be simpler in a lot of ways.
00:48:46
◼
►
UIKit is like, it is the rethink of AppKit,
00:48:49
◼
►
it is the rewrite of AppKit.
00:48:51
◼
►
They just didn't replace AppKit with it quite yet.
00:48:53
◼
►
- If they were gonna call it UIKit everywhere though,
00:48:55
◼
►
doesn't that count?
00:48:56
◼
►
Because the code is not the same.
00:48:58
◼
►
Like UXKit, I'm led to believe,
00:49:00
◼
►
is more or less just a wrap around the existing App Kit
00:49:03
◼
►
APIs to begin with.
00:49:04
◼
►
And maybe they would gut that out later.
00:49:06
◼
►
But I don't think you can pull that out
00:49:07
◼
►
because you have to maintain support for App Kit
00:49:09
◼
►
for a long, long time into the future.
00:49:11
◼
►
So linking against the--
00:49:13
◼
►
if they called it UI Kit, you couldn't link against
00:49:18
◼
►
that framework if one set of code
00:49:21
◼
►
is the native code for the iOS devices, and another set of code
00:49:24
◼
►
is the wrap around App Kit.
00:49:26
◼
►
I don't know how you could do that with the same name.
00:49:29
◼
►
I think the reason the X is there,
00:49:32
◼
►
it just doesn't make sense to me.
00:49:34
◼
►
It's not going to be a single unified code base.
00:49:36
◼
►
It's going to be two separate code bases.
00:49:38
◼
►
And having two separate code bases in a framework
00:49:40
◼
►
with the same name on two--
00:49:41
◼
►
I mean, I suppose you could pull it off,
00:49:42
◼
►
because the SDKs are in different folders.
00:49:44
◼
►
This is the iOS SDK, and this is the Mac SDK.
00:49:46
◼
►
But it just looks like--
00:49:47
◼
►
I mean, think about looking up documentation for it.
00:49:49
◼
►
Surely there would be differences.
00:49:50
◼
►
So I don't know.
00:49:51
◼
►
Messaging-wise, though, that's--
00:49:54
◼
►
we'll get to those after the next sponsor.
00:49:55
◼
►
but that is a weird message that like AppKit,
00:50:00
◼
►
we've been evolving and improving for a long time,
00:50:02
◼
►
but now, you know, it's like,
00:50:05
◼
►
I always wonder that when they bought Next,
00:50:07
◼
►
like how, I wonder how long the NS prefix will keep,
00:50:09
◼
►
I wondered initially,
00:50:10
◼
►
would they keep the NS prefix and everything?
00:50:11
◼
►
'Cause it's kind of weird, you know, NS next step,
00:50:13
◼
►
like why do all these KOHO classes have NS prefix?
00:50:16
◼
►
I bet there's tons of people just starting out programming
00:50:18
◼
►
for the Mac and wondering what the hell
00:50:19
◼
►
this NS crap is about, right?
00:50:21
◼
►
But it's held on for a surprisingly long time, right?
00:50:25
◼
►
And if they get out from under it and say,
00:50:28
◼
►
all right, this is the new thing, and we call it UXKit,
00:50:32
◼
►
and maybe in the future it'll be unified,
00:50:34
◼
►
but for now we have UIKit and UXKit.
00:50:36
◼
►
And I still think they would be stuck
00:50:39
◼
►
maintaining three things--
00:50:41
◼
►
AppKit, UXKit, which is on top of AppKit, and UIKit.
00:50:45
◼
►
So it wouldn't be-- maybe long, long term it's a unification.
00:50:48
◼
►
But I don't know, the messaging just-- it seems weird to me.
00:50:51
◼
►
Yeah, I mean, that's fair about maintenance.
00:50:53
◼
►
The messaging I don't think would matter.
00:50:55
◼
►
I mean, look, they have two languages now.
00:50:57
◼
►
- Well, but one of them is clearly a successor to the other.
00:51:01
◼
►
- Yeah, I think it's gonna be long-term.
00:51:02
◼
►
And by the way, a lot of people are speculating
00:51:04
◼
►
that UXKit might be Swift-only or Swift-native.
00:51:08
◼
►
I think we can already tell it's not
00:51:10
◼
►
just by inspecting the file and everything,
00:51:13
◼
►
but if you look at the timing of this,
00:51:18
◼
►
the Photos app was introduced at the same time
00:51:20
◼
►
as Swift Beta 1.
00:51:21
◼
►
When Swift Beta 1 was announced at WWDC last year, very few people inside Apple had even
00:51:27
◼
►
used it yet.
00:51:28
◼
►
So I think it's extremely unlikely that there's any Swift code in the Photos app.
00:51:32
◼
►
Well, there's probably some Swift code.
00:51:35
◼
►
That's the way they would, you know, but I don't think it's written from the ground up
00:51:38
◼
►
in Swift, and I think you're right that this is an Objective-C framework.
00:51:41
◼
►
The whole point of Swift is you can call through to the Objective-C frameworks, and half of
00:51:45
◼
►
the stuff they did in Swift 1.2, which we didn't even talk about, was making it less
00:51:49
◼
►
painful and less awkward to interoperate between Swift and Objective-C stuff by adding a whole
00:51:54
◼
►
bunch of annotations that you can mark up an Apple. I'm assuming it's marking up its
00:51:57
◼
►
own Objective-C APIs with all these annotations that mean nothing to Objective-C but totally
00:52:01
◼
►
let Swift know how it needs to write the adapter classes to be less annoying.
00:52:05
◼
►
Exactly, and I think that's the biggest sign as anything that Objective-C is not going
00:52:10
◼
►
to go away two years from now. This is going to be a very long-term replacement. Right
00:52:17
◼
►
now, look at how many Apple classes are still using C++, as there are so many APIs that
00:52:23
◼
►
are still in C++ that I don't think we have to worry anytime soon that Objective-C is
00:52:28
◼
►
going to be just ended.
00:52:29
◼
►
Well, I mean, it could be ended in the sense that they tell you when you're writing your
00:52:33
◼
►
application the only code you will ever write is Swift.
00:52:35
◼
►
You could get away with that, but it's like, "I'm not limited.
00:52:38
◼
►
I can call all the existing frameworks and APIs.
00:52:40
◼
►
I can call them all from Swift, right?
00:52:43
◼
►
I can do weird C-style stuff too."
00:52:45
◼
►
So you could say, third-party developers, if you were starting a fresh new application
00:52:49
◼
►
and opening a new project in Xcode, write all your code in Swift, and you'll be fine.
00:52:54
◼
►
They're not at that point yet, but that's where they want to get.
00:52:56
◼
►
And that point could come way before all the Objective-C code is gone, because that's going
00:53:00
◼
►
to take forever.
00:53:02
◼
►
People at Apple are going to be writing Objective-C for a long time, but they could be telling
00:53:04
◼
►
all third-party developers, "We would like it if you just wrote all your code in Swift,
00:53:10
◼
►
and you won't be limited in which APIs you call."
00:53:13
◼
►
The idea of a Swift-only or a Swift-native API, what's the selling point of that other
00:53:18
◼
►
than ideological purity at this point and in the near future?
00:53:24
◼
►
Surely that day will come, but unless there's some big advantage in terms of speed or interface,
00:53:31
◼
►
it's going to be difficult to justify it because then you'd be cutting off all the people with
00:53:34
◼
►
existing Objective-C apps and there's a lot of them.
00:53:38
◼
►
I would not expect a Swift exclusive API
00:53:41
◼
►
for anything important to be available in the next,
00:53:45
◼
►
I don't know, two years at least.
00:53:46
◼
►
I mean, I think it's gonna be a while.
00:53:49
◼
►
- Apple likes to move fast.
00:53:50
◼
►
They like to like, "Oh, it's sooner than I expected.
00:53:52
◼
►
"I didn't think," you know, and in fact,
00:53:54
◼
►
they will probably do it with something important
00:53:56
◼
►
when they decide to do it,
00:53:57
◼
►
but it seems like it's just way too soon now.
00:53:59
◼
►
So that probably means that whatever your estimate
00:54:01
◼
►
was two years, like maybe cut that in half.
00:54:03
◼
►
'Cause don't they always surprise us where it's like,
00:54:06
◼
►
You know, the way they herd everybody into whatever new thing they want to do is like
00:54:11
◼
►
the new hotness is only available with X and...
00:54:13
◼
►
Yeah, but not necessarily... first of all, not necessarily on this level of like the
00:54:18
◼
►
language level of what you're doing with the API level, not necessarily on that level,
00:54:21
◼
►
and also I think the last time they did that, like with, what was it, with Carmen, like
00:54:26
◼
►
when was the last time they did that?
00:54:27
◼
►
Oh no, the best example I think is how you can't build applications for older versions
00:54:31
◼
►
of OSs with the newest version of Xcode.
00:54:34
◼
►
They want to push everybody to the newest version of Xcode.
00:54:37
◼
►
And that's why people have to keep seven versions
00:54:38
◼
►
of Xcode running on old machines.
00:54:40
◼
►
Like they're like, you can't even target, you know,
00:54:43
◼
►
Snow Leopard anymore with this thing.
00:54:44
◼
►
And like they are pushing people up their OS support chain
00:54:48
◼
►
forcibly by saying, look, you're gonna have to have
00:54:50
◼
►
this version of Xcode, 'cause it's the only way
00:54:51
◼
►
you can develop for the iPhone 5,
00:54:53
◼
►
but you can't develop for Snow Leopard with it.
00:54:55
◼
►
So, you know, all these people keeping these VMs alive
00:54:58
◼
►
with ancient versions of Xcode and the old SDKs,
00:55:00
◼
►
that is Apple aggressively pushing people way too fast.
00:55:03
◼
►
Like as soon as people are running VMs
00:55:05
◼
►
with old versions of your IDE,
00:55:06
◼
►
you know you're going too fast.
00:55:07
◼
►
And that is a very common thing that people do.
00:55:10
◼
►
- Yeah, actually a lot of Mac developers need to do that.
00:55:13
◼
►
- I think it'll be sooner.
00:55:14
◼
►
I tend to come down on this closer
00:55:16
◼
►
to Jon's point of view than Marco's.
00:55:18
◼
►
I think the push to Swift is going to be more aggressive
00:55:21
◼
►
and sooner than any of us expect.
00:55:24
◼
►
I think I'm on the edge.
00:55:27
◼
►
I almost want to say something will be Swift specific
00:55:31
◼
►
or this year, maybe at the end of the year,
00:55:35
◼
►
I think perhaps it's more reasonable
00:55:37
◼
►
to say sometime in 2016, but I think it'll be soon.
00:55:39
◼
►
I think it'll be really soon.
00:55:41
◼
►
And certainly Swift is making
00:55:43
◼
►
some really significant steps in doing so very quickly.
00:55:48
◼
►
What I keep thinking is, you know,
00:55:51
◼
►
Swift is supposed to make a lot of the dangers
00:55:54
◼
►
of Objective-C go away.
00:55:55
◼
►
And that's of course causing a lot of,
00:56:00
◼
►
I don't know about drama, but maybe doubt in the community, especially amongst those
00:56:05
◼
►
who have worked with Objective-C for a long time.
00:56:08
◼
►
But I think that if Swift prevents really silly programming errors, and if it's a little
00:56:16
◼
►
more stable eventually, and it runs faster eventually, it's in Apple's best interest
00:56:21
◼
►
to push everyone that direction.
00:56:23
◼
►
And I think they will, and I think they'll do so really aggressively.
00:56:25
◼
►
Yeah, but I mean, honestly, I think most of the drama is already really fizzling out,
00:56:33
◼
►
and I think it's only a matter--it's only a couple more Swift revisions.
00:56:37
◼
►
I mean, look at how much they did in 1.2.
00:56:39
◼
►
It was a pretty substantial upgrade in a lot of ways, and I don't even use it yet, but
00:56:44
◼
►
I can tell just by looking at what they changed and other people's reactions to it, it's a
00:56:47
◼
►
pretty substantial upgrade.
00:56:49
◼
►
I read a bunch of these blog posts of like, "We switched our big project to Swift," or
00:56:53
◼
►
rebuilt a big project in Swift and here's how it went."
00:56:56
◼
►
And overall it seems to be, people are mostly okay with the language itself, with a few
00:57:04
◼
►
minor differences here and there, but mostly okay with the language itself, but they just
00:57:09
◼
►
complain that the tools are immature still.
00:57:11
◼
►
That's working itself out pretty quickly, really.
00:57:13
◼
►
They just added the incremental compilation, which was probably the biggest complaint in
00:57:18
◼
►
its absence before.
00:57:20
◼
►
In less than a year, Apple has eliminated most major complaints about the language.
00:57:28
◼
►
There's still some minor complaints, and there's still some people who really object to certain
00:57:32
◼
►
things about it that will probably never change, but for the most part, they've already addressed
00:57:37
◼
►
many, many good complaints about it in less than a year.
00:57:42
◼
►
And they're moving really fast.
00:57:43
◼
►
They're making big, big breaking changes, almost so much like it's frustrating reading
00:57:48
◼
►
the documentation for the language and trying to learn the language just to the point you
00:57:51
◼
►
think you're actually learning things, they change it all.
00:57:53
◼
►
And you're like, "But I just learned how it worked before, now it's totally different
00:57:57
◼
►
And they don't do it in minor ways.
00:57:58
◼
►
Like, "Oh, we tweaked this little syntax here, but there's big fundamentals."
00:58:02
◼
►
Just wait until they add exceptions and regular expressions, people's brains are going to
00:58:05
◼
►
explode, right?
00:58:06
◼
►
This is why I haven't learned it yet.
00:58:07
◼
►
This language is moving fast.
00:58:10
◼
►
And it's like, "Wow, at one point it was a big change.
00:58:13
◼
►
I feel like, well, my program got five times faster and I didn't change anything.
00:58:17
◼
►
might compile times are lower.
00:58:19
◼
►
It's still super young,
00:58:21
◼
►
and I think it's probably still super buggy,
00:58:22
◼
►
and they've got a long way to go.
00:58:23
◼
►
But I think the inclination is to think,
00:58:26
◼
►
well, it's young now, and there's these big changes,
00:58:29
◼
►
but the rate of change will slow down.
00:58:30
◼
►
And I expect it to not slow down,
00:58:33
◼
►
to make people uncomfortable with the amount
00:58:35
◼
►
that it doesn't slow down for the next couple of years.
00:58:38
◼
►
At a certain point, it's gonna be kinda like
00:58:40
◼
►
the change fatigue with the OS.
00:58:41
◼
►
Go like, all right already.
00:58:43
◼
►
My annoyances with whatever features in Swift
00:58:46
◼
►
are now dwarfed by my annoyance that you keep changing
00:58:49
◼
►
the language every three months.
00:58:51
◼
►
We understand you're addressing all of our problems
00:58:53
◼
►
and trying to make things better,
00:58:54
◼
►
but now I just want it to be stable so I can write some code
00:58:56
◼
►
and feel like I actually know the language.
00:58:58
◼
►
That's gonna happen in like eight months
00:59:00
◼
►
if they keep up this pace.
00:59:02
◼
►
- Yeah, hopefully.
00:59:02
◼
►
I mean, I said last year I was gonna wait about a year
00:59:05
◼
►
before I even looked at it,
00:59:07
◼
►
and so far that's working out very well.
00:59:09
◼
►
I can see in passing, oh, they're making
00:59:11
◼
►
all these big changes, but I have no investment in it.
00:59:14
◼
►
I haven't even read the Apple Swift book yet,
00:59:17
◼
►
the thing they release on iBooks for free,
00:59:18
◼
►
I haven't even read that yet.
00:59:19
◼
►
- That's good because every page of it has changed by now.
00:59:23
◼
►
And so I'd rather just wait until it settles down,
00:59:26
◼
►
at least most of the way.
00:59:28
◼
►
I would expect within the,
00:59:30
◼
►
you said within the next couple years,
00:59:31
◼
►
I think it will be pretty stable even in a year from now.
00:59:35
◼
►
- But I think the reason I don't think
00:59:37
◼
►
it'll ever really stay is just like,
00:59:39
◼
►
built into this language is the idea
00:59:41
◼
►
that it is a versioned language,
00:59:42
◼
►
and there's no backward syntax compatibility,
00:59:46
◼
►
their entire path forward, and we'll see how this works,
00:59:48
◼
►
is that the IDE is going to update your source code.
00:59:51
◼
►
They're not going to support Swift 1.0, 1.1,
00:59:54
◼
►
for the source.
00:59:56
◼
►
It's not like I wrote this in Swift 1.0,
00:59:58
◼
►
and I'm gonna be able to compile it in Xcode 9
01:00:00
◼
►
many years from now.
01:00:01
◼
►
No, you won't, no, you can't even compile that now probably.
01:00:04
◼
►
Their whole strategy is source compatibility, forget.
01:00:06
◼
►
I mean, maybe they'll change their policy.
01:00:08
◼
►
When it comes to the maturing point,
01:00:10
◼
►
they're gonna say, okay, now the new policy is
01:00:11
◼
►
we will actually respect the sanctity of your source code
01:00:13
◼
►
and not require you to like, you know,
01:00:15
◼
►
use our refactoring tools to upgrade the syntax.
01:00:18
◼
►
But they're not in that phase yet.
01:00:19
◼
►
They're in the phase that says,
01:00:21
◼
►
"We told you we're gonna break syntax compatibility.
01:00:23
◼
►
"We are going to.
01:00:24
◼
►
"We're never gonna compile your Swift 1.0,
01:00:26
◼
►
"1.1 stuff anymore.
01:00:27
◼
►
"So just get used to it and you better upgrade to Swift 1.2.
01:00:30
◼
►
"And by the way, 1.3 will do the same thing to you."
01:00:33
◼
►
- Our final sponsor this week is Automattic,
01:00:35
◼
►
your smart driving assistant on your smartphone.
01:00:38
◼
►
go to automatic.com/ATP.
01:00:41
◼
►
So, automatic is this little dongle
01:00:43
◼
►
that plugs into your car's OBD2 port.
01:00:46
◼
►
It's the same port they use at the mechanics
01:00:48
◼
►
or the dealers where they check it for error codes.
01:00:50
◼
►
It's usually in the driver footwell.
01:00:52
◼
►
Automatic plugs into that, and so all the information
01:00:54
◼
►
that the dealers can get and the mechanics can get
01:00:56
◼
►
out of your car, automatic can get,
01:00:58
◼
►
and it has a smartphone app that integrates with this
01:01:00
◼
►
and does cool stuff.
01:01:01
◼
►
So, one thing it does, so by the way,
01:01:03
◼
►
this works on iPhones and Android phones,
01:01:06
◼
►
which is pretty great.
01:01:07
◼
►
And it can show you by combining the smarts in your car
01:01:10
◼
►
with the smarts in your phone, it shows you things like where
01:01:14
◼
►
you've driven and how efficiently you drive.
01:01:16
◼
►
It gives you feedback on your driving in real time that can
01:01:19
◼
►
save hundreds of dollars a year on gas.
01:01:22
◼
►
They can even call emergency services for free in a serious
01:01:26
◼
►
crash, so if your car crashes and your phone is at all
01:01:30
◼
►
workable, it can use your phone to call emergency
01:01:33
◼
►
services for you.
01:01:34
◼
►
This could really seriously be a benefit here.
01:01:37
◼
►
Automatic also can diagnose any check engine light code.
01:01:41
◼
►
So because it's in that port that all the mechanics use,
01:01:44
◼
►
if there's any kind of error code
01:01:45
◼
►
that causes the check engine light to come on,
01:01:47
◼
►
the car has a lower level error code than that.
01:01:50
◼
►
It's just not showing you
01:01:51
◼
►
'cause it usually just lacks the display for that.
01:01:53
◼
►
That's why it just says check engine.
01:01:55
◼
►
But usually there's some lower level code.
01:01:57
◼
►
And a lot of those codes are really obvious things
01:01:59
◼
►
that you can fix.
01:02:00
◼
►
Things like the gas cap isn't sealed all the way.
01:02:03
◼
►
stuff like that you can just fix that yourself or you know minor parts swaps
01:02:06
◼
►
you can do you know you can go to a mechanic instead of going all the way to
01:02:09
◼
►
the dealer and paying all this money so it can save you lots of money with check
01:02:12
◼
►
engine light codes it can give you lots of money savings on gas it can call the
01:02:16
◼
►
emergency services for free in a crash and it even has little useful things
01:02:20
◼
►
like parking reminders again it's combining your car with your phone so it
01:02:24
◼
►
knows where you parked and you can use the automatic app on your phone you just
01:02:28
◼
►
go find your car again they even have integration with a few different things
01:02:32
◼
►
So they integrate with the Nest learning thermostat.
01:02:35
◼
►
So for example, if you're headed home,
01:02:37
◼
►
and Nest has you in away mode, so your house is cold
01:02:40
◼
►
in the winter, Automattic knows you're
01:02:42
◼
►
getting close to your home, so it will tell the Nest
01:02:45
◼
►
to turn the heat on.
01:02:46
◼
►
And so then by the time you get home,
01:02:47
◼
►
your house is nice and warm for your arrival.
01:02:50
◼
►
And even if you don't have a Nest,
01:02:52
◼
►
they have integration with IFTTT, if this, then that.
01:02:55
◼
►
So with that integration, you can integrate
01:02:57
◼
►
countless other online services with your Automattic device.
01:03:00
◼
►
So it's really great.
01:03:01
◼
►
There's also an API.
01:03:02
◼
►
You can download your driving data.
01:03:04
◼
►
You can subscribe to events, like when you start and stop
01:03:06
◼
►
the car, when your check engine light comes on, et cetera.
01:03:08
◼
►
There's a whole API for use for whatever you want.
01:03:11
◼
►
And if you have an Android phone,
01:03:12
◼
►
they even have a feature called Do Not Disturb mode,
01:03:15
◼
►
so that if you want, you can have it automatically mute
01:03:17
◼
►
your phone buzzing or beeping while you're driving,
01:03:20
◼
►
so you don't get distracted by those notifications.
01:03:22
◼
►
So great stuff here.
01:03:23
◼
►
automatic.com/atp.
01:03:26
◼
►
And this is normally about $100.
01:03:28
◼
►
There's no subscription fees.
01:03:30
◼
►
This is one time up front, just $100.
01:03:33
◼
►
There is no monthly fee.
01:03:35
◼
►
You can buy the device, that's it.
01:03:37
◼
►
Now there's a special offer for the podcast listeners, 20% off.
01:03:40
◼
►
So for you guys, by going to automatic.com/atp, it's just $80.
01:03:47
◼
►
So just $80.
01:03:48
◼
►
Free shipping in just two business days, and they have a 45 day return policy.
01:03:54
◼
►
This is really risk free.
01:03:55
◼
►
Fantastic deal.
01:03:58
◼
►
free shipping in two days and a 45 day return policy.
01:04:01
◼
►
Automatic.com/ATP.
01:04:03
◼
►
Thanks a lot.
01:04:05
◼
►
- And speaking of different ways
01:04:08
◼
►
of writing your user interfaces,
01:04:11
◼
►
a couple of things have happened over the last weeks
01:04:13
◼
►
or months that a few listeners have asked us to talk about.
01:04:17
◼
►
And the first, actually might have even been a year ago now,
01:04:20
◼
►
is Async Display Kit.
01:04:22
◼
►
Do you wanna tell us about that, John?
01:04:24
◼
►
- Yeah, all this talk about UX Kit has,
01:04:26
◼
►
Like the idea, oh, UXKit is a successor to AppKit,
01:04:29
◼
►
and AppKit has this corrupted UIKit,
01:04:31
◼
►
you know, learned from AppKit and did things better,
01:04:34
◼
►
which is why it seems nicer to do a lot of things in UIKit
01:04:37
◼
►
than it is in AppKit and everything.
01:04:38
◼
►
And AsyncDisplayKit and the other topic we'll go after
01:04:43
◼
►
about React, or React Native, rather,
01:04:47
◼
►
point to sort of a larger leap above both the AppKit
01:04:52
◼
►
and the UIKit paradigm, particularly having to do
01:04:55
◼
►
with the requirements that certain things only be done on the main thread, laying out
01:05:00
◼
►
the UI drawing, and there's some exceptions to that, where you can try to do some of those
01:05:04
◼
►
things off the main thread, but generally that leads to sadness, unless you're super
01:05:07
◼
►
careful and know what you're doing.
01:05:10
◼
►
And that's a limitation kind of built into the framework, a framework that if you trace
01:05:15
◼
►
its lineage through, you know, OpenStep and NextStep, AppKit going way back in time, made
01:05:20
◼
►
sense when you didn't have a multi-core CPU in your little handheld crazy phone.
01:05:24
◼
►
Symmetric multiprocessing was barely a glimmer in people's eyes back then.
01:05:29
◼
►
Forget about these 12-core CPUs and everything like that.
01:05:34
◼
►
But the reality is that now we do have multicore in everything, and even if you just offload
01:05:40
◼
►
some of that work to another core, it can be a big benefit.
01:05:43
◼
►
So AsyncDisplayKit is a thing, I think it's a thing that Facebook made for its native
01:05:47
◼
►
applications, the paper application, where they wanted to do layout calculations.
01:05:52
◼
►
basically math of saying how wide is this,
01:05:53
◼
►
how much room is it going to take up, blah, blah, blah.
01:05:56
◼
►
And they wanted to do it in parallel,
01:05:57
◼
►
not on the main thread,
01:05:59
◼
►
because they didn't want to block the main thread.
01:06:00
◼
►
They wanted the main thread to be available
01:06:01
◼
►
to pick up events and process them
01:06:03
◼
►
and make the UI, you know, reactive,
01:06:06
◼
►
not to use that word, the next thing.
01:06:08
◼
►
And so they made AsyncDisplayKit,
01:06:11
◼
►
which is a thing on top of AppKit
01:06:14
◼
►
that lets you do UI type calculations
01:06:17
◼
►
in asynchronously and possibly in parallel
01:06:21
◼
►
and other threads and then do it in a nice way
01:06:24
◼
►
so that the actual layout gets done on the main thread
01:06:26
◼
►
as it has to to work with the thing,
01:06:28
◼
►
but you can actually do the calculations elsewhere.
01:06:30
◼
►
And that's what makes me look at UXKit and think like,
01:06:34
◼
►
this can't really be the future of anything.
01:06:36
◼
►
It seems just like an interim step
01:06:38
◼
►
because I would wanna see a leap,
01:06:40
◼
►
like UIKit was a nice step up from AppKit,
01:06:42
◼
►
but it was kind of like more like a cleaned up AppKit,
01:06:45
◼
►
but it didn't revisit some fundamental assumptions
01:06:48
◼
►
in light of the hardware realities that we have today.
01:06:52
◼
►
And I think something like,
01:06:54
◼
►
something that incorporated something like Async Display Kit
01:06:57
◼
►
into the fabric of the framework would be much better
01:06:59
◼
►
than someone taking AppKit or UIKit
01:07:01
◼
►
and layering another framework on top of it
01:07:03
◼
►
to offload stuff to other threads and stuff like that.
01:07:06
◼
►
- Yeah, so Async Display Kit was most,
01:07:10
◼
►
gained most of its fame, I guess, from paper,
01:07:14
◼
►
which was, is an app that Facebook wrote
01:07:17
◼
►
as a kind of alternative to their traditional Facebook app.
01:07:21
◼
►
And it's actually the app that I use on my phone
01:07:23
◼
►
because it freaking supports sending messages,
01:07:26
◼
►
which is nice.
01:07:27
◼
►
You don't have to have a separate app for that.
01:07:28
◼
►
But anyway, it's very pretty
01:07:29
◼
►
and the animations are very cool and it's very nice.
01:07:34
◼
►
And that and Async Display Kit powers it.
01:07:36
◼
►
Now lately, Facebook has taken a different approach
01:07:40
◼
►
'cause React Native is Facebook, right?
01:07:41
◼
►
I'm not making that up, am I?
01:07:43
◼
►
- I think you're right.
01:07:45
◼
►
- All right, well, we'll just assume I'm right, why not?
01:07:47
◼
►
email me and tell me if I'm wrong.
01:07:49
◼
►
Anyway, so React Native is also by Facebook
01:07:53
◼
►
and React originated as, or at least to my knowledge,
01:07:58
◼
►
as a JavaScript front-end framework,
01:08:01
◼
►
kind of, sort of, but not really at all like Angular.
01:08:04
◼
►
And then somebody at Facebook said,
01:08:06
◼
►
"Well, you know what?
01:08:07
◼
►
We could do something on the Native side with this."
01:08:12
◼
►
And so there's an unbelievably good video
01:08:16
◼
►
that I had seen by way of Andy Matuszak,
01:08:20
◼
►
who has been coming up a lot lately, actually, on the show.
01:08:23
◼
►
And it's an overview by one of the developers
01:08:27
◼
►
of React Native at Facebook,
01:08:29
◼
►
talking about how it works and kind of what it does.
01:08:32
◼
►
And I haven't watched it for a week or two
01:08:35
◼
►
since whenever it came out.
01:08:36
◼
►
And so I can't really get into the specifics
01:08:39
◼
►
'cause I'll steer us into a black hole of incorrectness.
01:08:42
◼
►
But some of the stuff that it does was just unreal,
01:08:46
◼
►
including being able to mess about with your UI
01:08:49
◼
►
without doing another build.
01:08:52
◼
►
And so you can have your app running in the simulator,
01:08:57
◼
►
fart around with some stuff in Xcode,
01:08:59
◼
►
and it will refresh itself in the simulator
01:09:02
◼
►
without recompiling.
01:09:03
◼
►
And additionally, you could actually connect Chrome
01:09:07
◼
►
to the app, the running app,
01:09:09
◼
►
kind of like we talked about, I think, last episode
01:09:11
◼
►
with web views, but this isn't a web view.
01:09:14
◼
►
This is all real honest to goodness native stuff.
01:09:17
◼
►
And so you can connect Chrome,
01:09:19
◼
►
they have some sort of interpreter connector, whatever,
01:09:21
◼
►
and you can connect Chrome to your native app
01:09:24
◼
►
running React Native and go inspecting it.
01:09:27
◼
►
Kind of like, what was the third party thing
01:09:29
◼
►
that got Sherlock this year?
01:09:31
◼
►
Do you know what I'm thinking of?
01:09:32
◼
►
- Oh yeah, the thing that exploded all the views.
01:09:34
◼
►
- But yeah, so it's kind of similar to that.
01:09:36
◼
►
And I haven't played with it yet,
01:09:38
◼
►
But just watching this half an hour video,
01:09:41
◼
►
my mind exploded probably 15 times.
01:09:44
◼
►
Reveal, thank you for the chat room.
01:09:46
◼
►
It was revealed that I was thinking--
01:09:47
◼
►
- You're not gonna try and pronounce that?
01:09:49
◼
►
- No, thank you person in the chat room.
01:09:51
◼
►
Marius Sirachi, that's totally wrong.
01:09:54
◼
►
Anyway, this video is really, really incredible.
01:09:59
◼
►
And Marco especially, I'd be,
01:10:02
◼
►
well, you haven't seen this, have you?
01:10:04
◼
►
- No, of course not.
01:10:04
◼
►
- Okay, nevermind.
01:10:05
◼
►
So you're useless.
01:10:06
◼
►
- Hey, in my defense, I did spend all day today
01:10:08
◼
►
making another Go program.
01:10:10
◼
►
So I was in this century.
01:10:12
◼
►
- Okay, well that's good.
01:10:14
◼
►
I would like to hear about that if we have time.
01:10:15
◼
►
But John, what are your thoughts on this React Native thing?
01:10:18
◼
►
Have you done React, the JavaScript framework at all?
01:10:21
◼
►
- I retweeted a thing from like,
01:10:23
◼
►
someone was making a joke, like a sign of the W3C
01:10:25
◼
►
and it was one of those signs of the library.
01:10:27
◼
►
I said, there have been blank days
01:10:31
◼
►
since a new JavaScript framework
01:10:32
◼
►
and it had zero whiteboard.
01:10:35
◼
►
Like, I'm pretty sure I know what React is
01:10:38
◼
►
and have seen it, like the JavaScript version
01:10:40
◼
►
for web applications.
01:10:41
◼
►
You can correct me if I'm wrong, Casey,
01:10:43
◼
►
'cause you've watched the thing,
01:10:44
◼
►
'cause I haven't watched it yet.
01:10:45
◼
►
But React is the one where they do,
01:10:47
◼
►
where they have all,
01:10:49
◼
►
is it the one where they have like the DOM
01:10:51
◼
►
sort of as a structure not actually connected to the DOM
01:10:54
◼
►
and they do diffing against it
01:10:55
◼
►
to figure out what actually needs to be updated
01:10:57
◼
►
and that ends up being faster?
01:10:58
◼
►
It's like, it's one of those crazy solutions
01:11:00
◼
►
that has to do with,
01:11:01
◼
►
it's not Shadow DOM, Crystal, TD, and the thing,
01:11:03
◼
►
although that's a separate thing.
01:11:04
◼
►
and web components are related to this,
01:11:06
◼
►
but it's like, you would think it would be so much slower
01:11:09
◼
►
to build these parallel structures in memory
01:11:13
◼
►
that aren't the DOM,
01:11:14
◼
►
and then figure out what the changes are
01:11:16
◼
►
by diffing it against something else.
01:11:17
◼
►
And then only at the end,
01:11:19
◼
►
after you've done this crazy diffing thing
01:11:21
◼
►
and it's just these abstract memory structures
01:11:22
◼
►
that have no connection to the browser that you say,
01:11:24
◼
►
now, finally, I know what I have to update in the DOM,
01:11:26
◼
►
and you do the minimal update to the DOM,
01:11:28
◼
►
but updating the DOM is so damn slow
01:11:30
◼
►
that doing that diffing ends up being way faster
01:11:32
◼
►
than doing it like the quote unquote direct way.
01:11:36
◼
►
- It's worth pointing out also the Flipboard thing
01:11:38
◼
►
on this topic, where Flipboard came out,
01:11:40
◼
►
I think it was yesterday or the day before,
01:11:42
◼
►
it was very recent, and they launched a web version,
01:11:45
◼
►
and then their engineering department posted
01:11:47
◼
►
this whole thing, how they're basically doing
01:11:49
◼
►
a React-like diffing system in the middle
01:11:54
◼
►
of this whole system where they're basically,
01:11:55
◼
►
they basically rewrote part of WebKit
01:11:58
◼
►
that just runs on a canvas.
01:12:00
◼
►
And it's a very small part, but still.
01:12:02
◼
►
Yeah, they call it a web version.
01:12:04
◼
►
I put scare quotes around a web, because once
01:12:06
◼
►
your entire application is just a big Canvas tag
01:12:08
◼
►
that you draw stuff in with your own framework,
01:12:10
◼
►
yeah, I guess that's the web.
01:12:11
◼
►
But you've just reinvented ActiveX controls.
01:12:14
◼
►
Like you're--
01:12:15
◼
►
Oh, no, that's terrible.
01:12:17
◼
►
That's really insulting.
01:12:18
◼
►
You know what I mean.
01:12:19
◼
►
But you are not-- it's a difference.
01:12:20
◼
►
We used to talk about this with Flash.
01:12:22
◼
►
The web is-- we know what the web is.
01:12:24
◼
►
And anything that is a rectangle in a web page in which
01:12:27
◼
►
some other program runs is not the web.
01:12:29
◼
►
And Canvas is like the borderline of that.
01:12:31
◼
►
It's like, well, is that the web?
01:12:33
◼
►
Or is it like you've written, you know, yes,
01:12:36
◼
►
that you have a nice display layer
01:12:38
◼
►
and you could in theory do everything yourself.
01:12:40
◼
►
And they're not doing everything themselves,
01:12:42
◼
►
but it's like, as many people pointed out
01:12:44
◼
►
in terms of like accessibility
01:12:46
◼
►
of a Canvas native application,
01:12:48
◼
►
like unless you're signing up to re-implement,
01:12:51
◼
►
you know, UI kit or app kit
01:12:52
◼
►
with all the accessibility things
01:12:54
◼
►
that are inherent there and support for all the tools,
01:12:57
◼
►
it strikes me a lot as a big rectangle on a webpage
01:13:00
◼
►
where other things happen,
01:13:01
◼
►
which may be fine for Flipboard, but I don't think it's--
01:13:03
◼
►
- That's fine for Flipboard.
01:13:04
◼
►
- Yeah, right, but React is more like,
01:13:07
◼
►
we're going to take the web as it exists
01:13:09
◼
►
and we're just going to find out a nicer way
01:13:11
◼
►
for you to write applications
01:13:13
◼
►
or what they think is a nicer way.
01:13:15
◼
►
React has some weird stuff going on.
01:13:17
◼
►
They violate, they sort of sacrifice a lot of sacred cows.
01:13:21
◼
►
They're the big things, I think,
01:13:22
◼
►
also where they like mix JavaScript handlers in line with these fake things that look like
01:13:28
◼
►
tags but really aren't and freaks people out because it looks like you're doing like the
01:13:31
◼
►
old style on mouse over equals whatever but you're not really because that's not actually
01:13:35
◼
►
DOM markup that's just a way to communicate with the like there's a lot of weird things
01:13:40
◼
►
about React but I think that's all besides the point because I think the important part
01:13:43
◼
►
of it is that it is a different model and it's a very different model from AppKit and
01:13:47
◼
►
UIKit of how to make GUI applications and it's like well that's for the web the web
01:13:52
◼
►
is so different than native, it has to be different.
01:13:54
◼
►
And React Native is like, what if we take that same model
01:13:57
◼
►
and apply it to native things?
01:14:00
◼
►
Does that work?
01:14:01
◼
►
Is it actually better than using UIKit or AppKit?
01:14:03
◼
►
And some people apparently think it is.
01:14:04
◼
►
I think the jury's still out on whether this new paradigm
01:14:08
◼
►
is the way to go, but I think this combined
01:14:10
◼
►
with AsyncDisplayKit show two different
01:14:13
◼
►
potentially complementary approaches
01:14:16
◼
►
that show, that are so different from AppKit and UIKit
01:14:21
◼
►
and UXKit that it's like, it makes UIKit and UXKit
01:14:25
◼
►
and AppKit look like Objective-C 2.0,
01:14:28
◼
►
and it makes these things look like potentially Swift
01:14:30
◼
►
or something like, I just feel like there's a bigger leap
01:14:32
◼
►
to be had and it's like, I would recommend that Apple
01:14:36
◼
►
not invest some huge amount of time pushing some unified
01:14:41
◼
►
UIKit, UXKit type of thing for the future
01:14:43
◼
►
because that transition will take a long time
01:14:44
◼
►
and when you're done with the transition,
01:14:45
◼
►
what you've got is basically,
01:14:46
◼
►
now everything's as good as UIKit.
01:14:48
◼
►
And UIKit may be nicer than AppKit in important ways,
01:14:50
◼
►
but it is not sort of a large,
01:14:55
◼
►
it's not as big a leap, potentially as big a leap
01:14:57
◼
►
as Swift potentially is over Objective-C.
01:15:00
◼
►
Like I'm looking for the next big step.
01:15:01
◼
►
And I would say refine what you have now,
01:15:03
◼
►
make AppKit better as you've been doing,
01:15:05
◼
►
make UIKit better as you've been doing,
01:15:07
◼
►
and get busy working on whatever the next big thing is.
01:15:10
◼
►
And if it's something like React Native, fine.
01:15:11
◼
►
If it's something that incorporates the ideas
01:15:13
◼
►
of Async Display Kit, fine.
01:15:14
◼
►
If you think you can retrofit those to both UIKit
01:15:17
◼
►
and AppKit and let people do more things
01:15:18
◼
►
off the main thread, maybe try that too.
01:15:20
◼
►
but I'm not going to say this is my next Copeland 2010 type of thing, but I do look at these
01:15:27
◼
►
other frameworks and I'm not convinced that they're the future, but they look different
01:15:31
◼
►
enough from the present that I'm interested in potential ideas for the future.
01:15:35
◼
►
Yeah, I agree. I think you're totally right that if you're going to make everyone do a
01:15:40
◼
►
big transition, if there is this other thing that has come up in computer science-y type
01:15:46
◼
►
circles and everyone thinks this is a really great idea and it turns out in practice to
01:15:49
◼
►
to really be a really great idea,
01:15:51
◼
►
it is definitely worth considering.
01:15:53
◼
►
Is it worth, if you're gonna force people
01:15:55
◼
►
to go through a transition,
01:15:56
◼
►
to make a bigger leap, like Swift?
01:15:58
◼
►
- It's not even like computer science-y,
01:16:00
◼
►
just recognizing the hardware.
01:16:01
◼
►
The hardware is so different now.
01:16:03
◼
►
The frameworks we have are not a good match
01:16:05
◼
►
for everything being multi-core
01:16:06
◼
►
because of the main thread constraints.
01:16:08
◼
►
And GCD helps that a lot.
01:16:10
◼
►
GCD does help, but for UI code, it doesn't help
01:16:13
◼
►
because it's like certain things you have to do
01:16:15
◼
►
on the main thread or bad things happen.
01:16:17
◼
►
And so that's like the Async Display Kit.
01:16:18
◼
►
is like we're going to hack around that limitation
01:16:21
◼
►
of Apple's frameworks and say,
01:16:22
◼
►
you just sit there framework, don't worry,
01:16:24
◼
►
we'll actually do the UI updates on the main thread,
01:16:26
◼
►
but we're gonna do a whole bunch of other math over here
01:16:28
◼
►
in our sort of play world.
01:16:30
◼
►
And same thing with React, our sort of play world of,
01:16:33
◼
►
this is not the UI,
01:16:34
◼
►
but this is our little fake model of the UI
01:16:37
◼
►
so we can actually take advantage of parallel processing.
01:16:39
◼
►
And then we'll get back to you with like,
01:16:40
◼
►
okay, now that your actual UI,
01:16:42
◼
►
or now your actual DOM, please do this change.
01:16:44
◼
►
And that is hacky and clever,
01:16:46
◼
►
but it shows that the current frameworks
01:16:49
◼
►
are just not a good fit for current hardware.
01:16:51
◼
►
- Well, I think the multi-core hardware rendering
01:16:54
◼
►
on main thread thing is kind of red herring.
01:16:57
◼
►
In practice, the reason why a lot of UI code now
01:17:02
◼
►
is tricky to write is not because drawing calls
01:17:06
◼
►
have to happen on the main thread.
01:17:07
◼
►
It's because, jeez, is it declarative versus procedural?
01:17:12
◼
►
Whatever the, it's a different paradigm,
01:17:15
◼
►
is what I'm saying.
01:17:16
◼
►
It's not that it's tricky to write.
01:17:17
◼
►
It's just that if you have performance concerns,
01:17:20
◼
►
like you want to treat it more like a game engine, where
01:17:23
◼
►
it's like, if you're going to do anything,
01:17:26
◼
►
you have to be done, because I have to pull the next event off
01:17:29
◼
►
You need to leave the main thread alone.
01:17:31
◼
►
Do not-- that's the whole thing of GCD.
01:17:32
◼
►
Stop blocking the main thread, for crying out loud.
01:17:34
◼
►
I don't care what you have to do.
01:17:36
◼
►
Get in, get out.
01:17:37
◼
►
I need to get the next event, because if it's
01:17:39
◼
►
stuttery when it's scrolling, it's super bad.
01:17:41
◼
►
And that's why AsyncDisplayKit has this cool--
01:17:44
◼
►
one of the classes they have is like,
01:17:45
◼
►
Say you're gonna show a big giant grid of images
01:17:47
◼
►
and they're coming from the internet.
01:17:48
◼
►
You can't wait to get all those downloaded
01:17:50
◼
►
to figure out what sizes they are so you can lay it out.
01:17:52
◼
►
It'll take forever.
01:17:53
◼
►
So there's like this procedural thing
01:17:55
◼
►
where like we'll download super low res versions of those
01:17:59
◼
►
and asynchronously bring in the higher res versions
01:18:01
◼
►
but just so you can get a scrollable correctly laid out
01:18:04
◼
►
thing as soon as possible so you can start scrolling it.
01:18:07
◼
►
That's the type of thing that's very difficult to do
01:18:09
◼
►
with the existing framework
01:18:10
◼
►
which it's like they don't expect sort of asynchronous
01:18:12
◼
►
updates to all these features.
01:18:16
◼
►
It should be easier than it is.
01:18:17
◼
►
And it's not because of, like you said,
01:18:20
◼
►
declarative versus procedural, that's part of it.
01:18:22
◼
►
And you could say, oh, it's easier if I could describe
01:18:24
◼
►
my UI in this way instead of writing a bunch of code
01:18:25
◼
►
to make my UI in this way.
01:18:27
◼
►
But it's like for large grids with lots of things on them,
01:18:32
◼
►
I don't want to block the main thread with the amount,
01:18:34
◼
►
I don't want my main thread to be blocked
01:18:37
◼
►
if N is really large for something that's performance
01:18:41
◼
►
is dependent on the number of items.
01:18:43
◼
►
- Yeah, but I think it's more, you know,
01:18:45
◼
►
like you said, like with GCD,
01:18:46
◼
►
we can already step off the main thread, come back later.
01:18:49
◼
►
Like, it's more of a paradigm shift.
01:18:52
◼
►
It's not that like the APIs have to happen
01:18:55
◼
►
on this main thread, it's that like,
01:18:56
◼
►
the paradigm for how you update the UI,
01:18:59
◼
►
like, 'cause the way React does it,
01:19:01
◼
►
like if you look, like I don't know React,
01:19:03
◼
►
so whenever I see snippets of React code,
01:19:05
◼
►
it just breaks my mind.
01:19:07
◼
►
Like, I'm looking at it and I'm like,
01:19:08
◼
►
oh my god, this is totally backwards, inside out,
01:19:12
◼
►
upside down, and in French.
01:19:14
◼
►
Like it's so, it looks so foreign to me
01:19:17
◼
►
'cause it's so different from what I'm used to.
01:19:20
◼
►
- Yeah, so let me jump in here.
01:19:21
◼
►
So one of the links is,
01:19:23
◼
►
that we're gonna put in the show notes,
01:19:24
◼
►
Why React Native Matters, and this is by Joshua,
01:19:28
◼
►
I'm guessing that's Josh Haber.
01:19:30
◼
►
Anyway, he says, right now we write UIs by poking at them,
01:19:34
◼
►
manually mutating their properties when something changes,
01:19:37
◼
►
adding and removing views, et cetera.
01:19:39
◼
►
This is fragile and error prone.
01:19:40
◼
►
Some tools exist to lessen the pain,
01:19:43
◼
►
but they can only go so far.
01:19:45
◼
►
UIs are big, messy, mutable, stateful bags of sadness.
01:19:48
◼
►
React lets us describe our UIs for a given state,
01:19:51
◼
►
and then it does the hard work of figuring out
01:19:54
◼
►
what needs to change.
01:19:55
◼
►
It abstracts all the fragile error prone code
01:19:58
◼
►
out away from us.
01:19:58
◼
►
We describe what we want,
01:19:59
◼
►
React figures out how to accomplish it.
01:20:01
◼
►
UIs become composable, immutable, stateless value types.
01:20:04
◼
►
React Native is fantastic news.
01:20:06
◼
►
And that's building, oh, it's Josh Abernathy, I'm sorry.
01:20:09
◼
►
That's building on what you were saying, Marco,
01:20:11
◼
►
where this is just a whole different model
01:20:14
◼
►
of how you interact with user interfaces.
01:20:17
◼
►
And it makes a lot of sense.
01:20:20
◼
►
Maybe the particulars are a little bit wonky
01:20:22
◼
►
and I'll concede that.
01:20:23
◼
►
But the premise of really this is just moving
01:20:27
◼
►
from one concrete state to another
01:20:29
◼
►
and it should just be a finite state machine,
01:20:31
◼
►
hopefully in theory.
01:20:33
◼
►
That is a really cool premise.
01:20:34
◼
►
And building on that, going back to Andy Matuszak,
01:20:38
◼
►
he tweeted a few days ago,
01:20:39
◼
►
put a link in the show notes,
01:20:40
◼
►
"I say with confidence as a former UI kit author,
01:20:43
◼
►
"React's model for the UI layer
01:20:44
◼
►
"is vastly better than UI kits.
01:20:46
◼
►
"React Native is a huge deal."
01:20:49
◼
►
In another tweet, "They've just got to figure out
01:20:50
◼
►
"the interaction and animation pieces."
01:20:53
◼
►
And so he goes on just briefly,
01:20:54
◼
►
"To all asking me what's React, filter bubble danger,
01:20:57
◼
►
"you must watch the broader development landscape
01:20:59
◼
►
"don't get trapped in one platform."
01:21:00
◼
►
And I think that's a really good call.
01:21:02
◼
►
And this is something very interesting
01:21:04
◼
►
that's influenced from a web framework coming into native
01:21:09
◼
►
and it's making some really interesting moves.
01:21:13
◼
►
And I wouldn't be surprised if something along these lines
01:21:17
◼
►
gets adopted by Apple in the same way
01:21:19
◼
►
something along the lines of Reveal,
01:21:20
◼
►
which isn't an apples to apples comparison,
01:21:22
◼
►
but, you know, Reveal was kind of Sherlocked.
01:21:24
◼
►
It wouldn't surprise me if they took a very similar
01:21:27
◼
►
spiritual, spiritually similar approach
01:21:29
◼
►
to whatever replaces UIKit and AppKit
01:21:32
◼
►
eventually one day maybe. Oh yeah, because you know React, I mean it's making big waves,
01:21:37
◼
►
and it's making waves with a lot of the people who matter with such decisions. People like Andy Matuszak,
01:21:42
◼
►
and like people who are developing these frameworks, people who are in important positions, or were, or know people, you know like, or those
01:21:50
◼
►
you know the new people in those positions. These are, it's making big waves. I've heard so much about React.
01:21:55
◼
►
Every JavaScript framework out there besides React that's come out in the last decade, I hear nothing about because I don't care.
01:22:02
◼
►
React makes big enough waves that I keep hearing about it.
01:22:05
◼
►
Like, I don't know anything about Angular.
01:22:07
◼
►
Is that the one that has like a million different levels
01:22:09
◼
►
of factories?
01:22:10
◼
►
- Yeah, Ember and Angular, yeah.
01:22:11
◼
►
Like, you don't, those are confined to the client side.
01:22:14
◼
►
React is coming over to the native side.
01:22:16
◼
►
Like, I think to tie this together with AsyncDisplayKit
01:22:19
◼
►
was like, you know, we were talking in two different things.
01:22:21
◼
►
Like, I was mostly talking about AsyncDisplayKit
01:22:23
◼
►
with the performance concerns,
01:22:24
◼
►
and you were talking about React as the paradigm thing.
01:22:25
◼
►
They're connected though, because React's functional thing,
01:22:29
◼
►
where like, you know, you operate on state
01:22:30
◼
►
and it's a value type thing, that sort of, you know,
01:22:34
◼
►
lack of side effects where you just operate
01:22:36
◼
►
on your arguments and return a value
01:22:37
◼
►
and everything is sort of, you know,
01:22:39
◼
►
like just a value type and all that stuff,
01:22:41
◼
►
that you see a lot of that in Swift as well,
01:22:43
◼
►
that allows you to parallelize that stuff.
01:22:45
◼
►
Because if you don't have side effects,
01:22:46
◼
►
if you're not, if it's not just one giant big ball
01:22:48
◼
►
of mutable state, then you can only update
01:22:50
◼
►
one thread at a time, otherwise you get crazy conflicts.
01:22:52
◼
►
That's what, one of the many things that ties AppKit
01:22:54
◼
►
to its current paradigm.
01:22:56
◼
►
React, so, you know, React and AsyncDisplayKit
01:22:58
◼
►
are connected because if you use the React model,
01:23:00
◼
►
It doesn't matter what thread you do these mutations are,
01:23:02
◼
►
it doesn't matter, you can do them all in parallel,
01:23:04
◼
►
the same, like, they're side effect free,
01:23:06
◼
►
they're pure functional, and so it lends itself
01:23:09
◼
►
to that type of UI model, as opposed to the current model,
01:23:13
◼
►
which is, we have this one thing, it is the state of the UI,
01:23:16
◼
►
be super careful with it.
01:23:18
◼
►
- And going back a sec to what Casey just said,
01:23:20
◼
►
like, it is not past Apple to steal good ideas,
01:23:24
◼
►
they do it all the time.
01:23:26
◼
►
And if something is making this big of a wave,
01:23:29
◼
►
and Apple's engineers and top people,
01:23:32
◼
►
if Apple thinks it's a good idea, they will do it,
01:23:36
◼
►
or they will do something similar to it.
01:23:38
◼
►
And something like this, this is a pretty big deal,
01:23:41
◼
►
like to change your entire UI API paradigm,
01:23:44
◼
►
or to add a new one is a major deal.
01:23:47
◼
►
And this is not something that can happen in a year.
01:23:50
◼
►
This would be a big undertaking.
01:23:53
◼
►
- It would have to be a Skunkworks,
01:23:54
◼
►
but I think that the exciting thing about Swift is it showed
01:23:56
◼
►
us, yeah, it was a Skunkworks,
01:23:58
◼
►
But it was essentially one guy, one very powerful guy,
01:24:02
◼
►
who had proven himself with many other things
01:24:03
◼
►
that he had done in the company.
01:24:05
◼
►
It's not just some random employee
01:24:06
◼
►
off in the corner somewhere.
01:24:07
◼
►
But for a long time, it was just one person.
01:24:10
◼
►
And I'm sure there's lots of those one person type projects
01:24:12
◼
►
that may or may not go anywhere.
01:24:13
◼
►
But it just goes to show that you don't need buy-in
01:24:16
◼
►
at the VP level to get the ball rolling
01:24:18
◼
►
or something like this.
01:24:19
◼
►
And maybe the ball starts rolling and then stops rolling,
01:24:21
◼
►
like has happened with ZFS or whatever, other things.
01:24:24
◼
►
It's not guaranteed that it's going to happen,
01:24:26
◼
►
but it seems like Apple is currently an organization
01:24:28
◼
►
in which something like this could start happening
01:24:31
◼
►
and get killed before we ever see it
01:24:33
◼
►
and something else comes along
01:24:34
◼
►
and maybe React is just the hotness today
01:24:36
◼
►
and then two years it's something else.
01:24:37
◼
►
But it's not outside of the realm of possibility
01:24:40
◼
►
that Apple can innovate in this way
01:24:42
◼
►
on any subject other than file systems
01:24:43
◼
►
which they seem insatially incapable of ever changing.
01:24:47
◼
►
Not that I'm bitter.
01:24:48
◼
►
- And tying it back, even though I really wanna end on that,
01:24:52
◼
►
but tying it back, if they're gonna do something
01:24:55
◼
►
like a React-style UI framework, that would be a really good thing to start with Swift
01:25:01
◼
►
and to make Swift only. One of the things that makes React code look so weird is that
01:25:07
◼
►
it fits in very weirdly with existing languages, which is like the syntax of declaring it and
01:25:13
◼
►
The fact that it's using JavaScript, like this is...
01:25:16
◼
►
Yeah, it's really badly bolted on. I mean, not by its own fault, but by the fault of
01:25:20
◼
►
the language really, but Swift is still squishy and generally more pokeable.
01:25:27
◼
►
But Swift is a much better fit.
01:25:28
◼
►
The whole idea of so many things being value types in Swift, not that that is a direct
01:25:32
◼
►
parallel to the idea of the UI state being a value type and everything, but it just shows
01:25:36
◼
►
that the headspace, like where is Swift at in terms of immutable data, well it is much
01:25:41
◼
►
more on the React side of things than Objective-C is, because Objective-C is all about everything
01:25:45
◼
►
and be mutating and, "Hey, just declare this type ID.
01:25:48
◼
►
"Whatever, guys, it's all right."
01:25:50
◼
►
Whereas Swift is like, "No, we're gonna pin things down."
01:25:53
◼
►
Lots of things that were reference types
01:25:55
◼
►
are becoming value types just because we've learned
01:25:57
◼
►
that making NSString reference type
01:25:59
◼
►
just leaves no more headaches
01:26:00
◼
►
and people forget to copy them.
01:26:02
◼
►
It's like that is the mindset of Swift.
01:26:05
◼
►
And so something using the good ideas
01:26:09
◼
►
in React and Async Display Kit,
01:26:11
◼
►
written natively in Swift,
01:26:12
◼
►
would be a very interesting successor
01:26:14
◼
►
to both UIKit and AppKit from Apple,
01:26:16
◼
►
so someone should start writing that now
01:26:18
◼
►
and in four years get back to me.
01:26:20
◼
►
- And it'll give me a reason to learn Swift.
01:26:22
◼
►
- Yeah, that'll be eight years later.
01:26:24
◼
►
- Yeah. (laughing)
01:26:26
◼
►
All right, thanks a lot to our three sponsors this week,
01:26:28
◼
►
Igloo, Hover, and Automattic,
01:26:30
◼
►
and we will see you next week.
01:26:31
◼
►
(upbeat music)
01:26:34
◼
►
āŖ Now the show is over āŖ
01:26:36
◼
►
āŖ They didn't even mean to begin āŖ
01:26:39
◼
►
āŖ 'Cause it was accidental āŖ
01:26:41
◼
►
āŖ Accidental āŖ
01:26:42
◼
►
āŖ Oh, it was accidental āŖ
01:26:43
◼
►
John didn't do any research, Margo and Casey wouldn't let him
01:26:49
◼
►
'Cause it was accidental, it was accidental
01:26:54
◼
►
And you can find the show notes at ATP.fm
01:26:59
◼
►
And if you're into Twitter, you can follow them
01:27:34
◼
►
What are we talking about?
01:27:35
◼
►
Oh, your Go thing.
01:27:37
◼
►
What is this about?
01:27:38
◼
►
You're really getting into this Go thing.
01:27:40
◼
►
- Yeah, I'm getting faster with it now.
01:27:42
◼
►
And today was the first time,
01:27:44
◼
►
my previous, the polar, the feed polar,
01:27:47
◼
►
that's just one giant file.
01:27:49
◼
►
'Cause I didn't want to figure out
01:27:52
◼
►
how do I break up things into different files
01:27:54
◼
►
and manage that in Go,
01:27:56
◼
►
because it fit, it's a pretty long file,
01:27:58
◼
►
and I should break it up now,
01:28:00
◼
►
'cause it got longer once I finalized
01:28:03
◼
►
all the stuff I actually needed to be in the system fully.
01:28:08
◼
►
So tonight I was working on something else.
01:28:11
◼
►
So I have these two servers at high velocity that I bought, or that I started leasing per
01:28:19
◼
►
month about a month ago, and I haven't done anything with them yet.
01:28:22
◼
►
I bought them because they were having an insane sale.
01:28:25
◼
►
That was just ridiculous for what you get for both hardware and bandwidth, where now
01:28:31
◼
►
a few hundred dollars a month, I now have an unmetered gigabit of transfer. A gigabit
01:28:37
◼
►
per second unmetered of transfer.
01:28:40
◼
►
And I asked them, before I bought it, I'm like, "Alright, so what's your actual policy
01:28:44
◼
►
here? If I actually use all this, what if I was hosting big podcast files? If I made
01:28:49
◼
►
a podcast file host for us or whoever else, if we actually used all this bandwidth, would
01:28:56
◼
►
you cut it off." And they're like, "Nope, you can use it, that's the point." It's a
01:29:05
◼
►
pair of machines that are each 500 megabit, and they're each roughly as good as a 6-core
01:29:13
◼
►
Mac Pro. They have dual SSDs with RAID 1, 64 gigs of RAM. I mean, these are insane machines!
01:29:21
◼
►
6-core Xeon 1660v3s, which are actually faster than the current Mac Pro CPUs because the
01:29:26
◼
►
Mac Pro seemed to have skipped generation, which they sometimes do, so I'm not surprised.
01:29:32
◼
►
There is a newer version of the Xeon chips that the Mac Pro uses that is out right now
01:29:36
◼
►
that Apple has not updated to and seems like they're probably just not going to at this
01:29:40
◼
►
Anyway, so I have these servers that I bought because one thing I want to do, and the reason
01:29:47
◼
►
why I was so interested in having tons and tons of bandwidth available is I want to be
01:29:53
◼
►
able to launch a Twitter card for overcast player pages so that people who are browsing
01:29:59
◼
►
the Twitter app can play the podcast right there in Twitter cards. Twitter cards require
01:30:03
◼
►
that all assets that are loaded within them, including media files, are served over HTTPS.
01:30:10
◼
►
Some podcast hosts support HTTPS for their files, but most don't. So the first thing
01:30:17
◼
►
wanted to write was an HTTPS proxy. And there are a few of these that exist. There's one,
01:30:23
◼
►
I forget what it's called now, there's one that GitHub wrote in Node. Oh man, I'm sorry
01:30:29
◼
►
I forgot the name. Anyway, so there's that one, that's fine. I looked at it briefly.
01:30:34
◼
►
It's mostly made for images, but fine, it would work the same way. I decided to try
01:30:40
◼
►
to write that in Go, a basic SSL proxy. And it's so, it's nothing, it's like a hundred
01:30:45
◼
►
I mean, it's almost nothing, it's great.
01:30:48
◼
►
And I also have a few other things I wanted to try.
01:30:52
◼
►
I mentioned last week that I was using Imageix for my thumbnailing, but it was costing me
01:30:56
◼
►
a fortune, so I'm moving my artwork thumbnailer to these boxes as well.
01:31:03
◼
►
So I wrote just one Go program that contains those two functions, the SSL proxy and the
01:31:09
◼
►
artwork thumbnailer.
01:31:11
◼
►
Just those two functions implemented in Go, it listens over HTTPS and is its own server.
01:31:15
◼
►
There's no server in front of it,
01:31:16
◼
►
there's no Nginx or Apache or anything reverse-proxying to it
01:31:19
◼
►
it's just its own server, raw, right to the internet
01:31:22
◼
►
and that's all these boxes do is run this program.
01:31:24
◼
►
So I'm hopefully going to be deploying that
01:31:26
◼
►
in the next day or so.
01:31:28
◼
►
- Cool, and it didn't take you that long to write
01:31:31
◼
►
it sounds like?
01:31:32
◼
►
- Nah, a few days, I mean I've been sick
01:31:33
◼
►
so my work hours, I can only really work a few hours
01:31:36
◼
►
at a time before I gotta go lay down,
01:31:38
◼
►
which really sucks, but I'm extremely annoyed about that.
01:31:44
◼
►
That is by far the worst part about being sick is not how I feel, it's that I can't
01:31:50
◼
►
That's what drives me nuts the most.
01:31:51
◼
►
Anyway, so that's on its way out at least.
01:31:56
◼
►
If I was working full-time at full capacity, it probably would have taken only two days.
01:32:00
◼
►
It has actually taken something like four days, but oh well.
01:32:03
◼
►
So how does your Go server handle the, I still don't quite understand the concurrency model
01:32:08
◼
►
But how does it handle like you know if there are more incoming connections than then like it does it does it do multiple?
01:32:14
◼
►
Processes or a single process event driven. What does it look like on the machine it can do multiple cores?
01:32:20
◼
►
But it is it is all seen it's for the most part at single process event driven
01:32:24
◼
►
It's they use this concept and forgive me anyone who's an expert listening
01:32:28
◼
►
I'm not an expert yet on this so this is a a newbie overview of what of the way it works, but
01:32:34
◼
►
They use us they use this thing called go routines which are which are these you know kind of threads
01:32:39
◼
►
cooperating sequential processes or something like that yeah something like that
01:32:43
◼
►
So it's those things and so there it's basically a very lightweight thread that exists within the app space
01:32:49
◼
►
It is not an os level thread
01:32:51
◼
►
So so how does it behave like at the limits like if you overwhelm it with connections to the other connections?
01:32:56
◼
►
Just wait does they do you exhaust like the number of like?
01:33:00
◼
►
You know I always look at what the behavior at the limits like that's the only reason I would ever put another
01:33:04
◼
►
server in front of us like, "Well, I know how whatever will behave.
01:33:07
◼
►
I can set these limits on number of connections.
01:33:09
◼
►
I know people will wait.
01:33:10
◼
►
I know what will happen.
01:33:11
◼
►
I know when people will start getting timeouts or connections."
01:33:14
◼
►
Whatever the failure mode is, I can choose my failure mode, and I don't know what the
01:33:17
◼
►
failure modes at all are for Go because I've never used it.
01:33:21
◼
►
So I was trying to do some research on that earlier today to try to figure out, like,
01:33:24
◼
►
do I need to put Nginx in front of it or something, or can I just go without it?
01:33:29
◼
►
The responses to that question were, for the most part, a few people who did it, who just
01:33:33
◼
►
did it rath the internet who said it's fine. A few people who said you should put Nginx
01:33:40
◼
►
in front of it because of separation of roles, which I think is total BS, honestly. The way
01:33:48
◼
►
those arguments were presented, none of them convinced me that they were valid arguments.
01:33:54
◼
►
There's nothing saying that having Nginx reverse-proxy-ing to this Go server is any more of a purity
01:34:01
◼
►
of roles than having the Go server serving itself.
01:34:05
◼
►
It has this functionality built into the language.
01:34:08
◼
►
The only reasons I could think of are the older reasons that we used to run proxy servers
01:34:11
◼
►
in that if you don't want to slow down the process, if a bunch of your clients have slow
01:34:18
◼
►
connections you don't want to tie up your backend process doling out bits to the slow
01:34:24
◼
►
connections but with an event-driven thing that's not really valid anymore because you're
01:34:27
◼
►
not tying it up, when it's dulling up it slowly it's doing other things because it's multi-threaded
01:34:33
◼
►
and moving on to the next thing.
01:34:35
◼
►
Right, and the way, it seems like you would, the difference between Nginx being tied up
01:34:42
◼
►
with all these connections and Go being tied up with all these connections because they
01:34:45
◼
►
both have that same event-driven style model, I don't think one would be substantially better
01:34:49
◼
►
than the other at that.
01:34:51
◼
►
Yeah, and the failure mode is the other option, but the real question for me is, does Google
01:34:55
◼
►
Google put anything in front of its servers when it runs them, and if Google doesn't do
01:34:58
◼
►
it, which I suspect they don't because it seems like Go is designed to do this, then
01:35:01
◼
►
it's like, "Well, if Google's not doing it, you don't need to do it either."
01:35:05
◼
►
If it's designed to handle the traffic that Google expects, surely you can do your podcast
01:35:11
◼
►
image thing by having the Go app talk directly to the web.
01:35:13
◼
►
But I know nothing about this, so I'll be interested to see what the results are of
01:35:17
◼
►
your experimentation.
01:35:18
◼
►
That's probably a bad example, just because Google is such an incredible scale, they probably
01:35:22
◼
►
lots of stuff in between the public internet and their application servers, so that's probably
01:35:28
◼
►
a bad example, but I would be interested to see medium-sized sites, to see what they do.
01:35:35
◼
►
Right, well, no, but I'm saying, like, Google, do they intentionally put a layer there whose
01:35:38
◼
►
only purpose is to be, you know what I mean? Like, I would suspect that the machines that
01:35:42
◼
►
their things are running on, the Go process is listening on the ports, and yes, there's
01:35:46
◼
►
stuff in between, but it's like, do they shove Nginx in there as essentially a proxy server
01:35:51
◼
►
for some reason.
01:35:52
◼
►
It makes much more sense to do that
01:35:54
◼
►
if you have a multi-process backend,
01:35:56
◼
►
because then you would be tying up an entire child process
01:35:58
◼
►
when really you should just shove the,
01:36:00
◼
►
put a big buffer on the proxy,
01:36:01
◼
►
have the child process shift the bytes out to the proxy,
01:36:03
◼
►
and then that child process is free to serve another request
01:36:06
◼
►
while the proxies have redolled out those bits
01:36:07
◼
►
to the slow client.
01:36:08
◼
►
That's like 1990s error, state-of-the-art web technology,
01:36:12
◼
►
but we've moved on from that.
01:36:13
◼
►
- Right, and there was, I saw there was one benchmark
01:36:16
◼
►
that somebody posted where they,
01:36:17
◼
►
and they showed all the code they used,
01:36:19
◼
►
and there were a few complainers in the comments,
01:36:21
◼
►
but it seemed pretty valid, where they benchmarked
01:36:25
◼
►
a simple Go program, like a Hello World kind of thing.
01:36:27
◼
►
They're like, simple Go program, raw versus Nginx
01:36:31
◼
►
with a few different configurations and tweaks,
01:36:34
◼
►
and the Go program just had, it destroyed Nginx
01:36:38
◼
►
in request rate per second with either A/B
01:36:43
◼
►
or one of the other similar tools.
01:36:45
◼
►
It was way faster with just pure Go,
01:36:47
◼
►
'cause of course it's doing less.
01:36:48
◼
►
- And you're synchronizing two event-driven things.
01:36:51
◼
►
Like one thing is handling,
01:36:52
◼
►
and they're not gonna be in sync of like when,
01:36:54
◼
►
when I'm doing the work on behalf of this request,
01:36:56
◼
►
and then handing back, like it's just, you're just, yeah.
01:36:58
◼
►
It's not just adding overhead,
01:37:00
◼
►
it's like two desynchronized event-driven things
01:37:02
◼
►
trying to talk to each other.
01:37:04
◼
►
- Exactly, so that's what, I'm gonna, I mean,
01:37:06
◼
►
so what, the way these servers are set up,
01:37:09
◼
►
they actually have none of my app on them,
01:37:12
◼
►
they don't have any access to my main infrastructure,
01:37:14
◼
►
they don't even read the database,
01:37:16
◼
►
they don't have anything on them,
01:37:18
◼
►
accept this Go program. They don't even have PHP installed. They don't even have private net access
01:37:25
◼
►
back to the Linode servers that are running the rest of the app. They have no connection
01:37:28
◼
►
whatsoever to the app. My app is able to write its files into it, and it only has the Go files.
01:37:35
◼
►
The risk if these things get compromised is pretty small. If they go down, these are kind of
01:37:41
◼
►
accessory features. I'm going to have a CDN in front of the artwork thumbnail or anyway.
01:37:47
◼
►
I'm not doing a CDN in front of the podcast bandwidth thing, or the podcast SSL thing,
01:37:52
◼
►
for two reasons. Number one, the bandwidth cost would be extraordinary, and I don't think I would
01:37:57
◼
►
be able to afford it. Number two, the way this is working, you know, Overcast does not proxy the
01:38:03
◼
►
files normally, and I only want to use this in areas where SSL is really required for usability
01:38:10
◼
►
or for functionality. So that would be things like Twitter cards, the web player to avoid mixed
01:38:15
◼
►
content warnings, things like that.
01:38:17
◼
►
In reality, that's not most uses of Overcast.
01:38:20
◼
►
That's not most plays, and it probably will never be.
01:38:23
◼
►
But regardless, I still don't wanna steal hits
01:38:27
◼
►
from people's files, and so the way I've set it up
01:38:31
◼
►
that there is absolutely no caching
01:38:33
◼
►
of that SSL proxy's assets.
01:38:35
◼
►
Every request that is made through that proxy
01:38:38
◼
►
has a corresponding request back to the origin server.
01:38:41
◼
►
And I know they're probably not gonna count my IP
01:38:45
◼
►
as unique. I am sending the X-forwarded for and X-real IP headers that, you know,
01:38:50
◼
►
that's standard for proxies. I would imagine, like, to prevent fraudulent
01:38:54
◼
►
download count increases, most stats services probably ignore those. For some
01:39:00
◼
►
of the big hosts, like, I already talked to Libsyn and I know SoundCloud, I won't
01:39:05
◼
►
I won't need to use it with them because I know how to do secure URLs for them
01:39:09
◼
►
reliably, so that that should be fine. But either way, I still want, like, I still
01:39:14
◼
►
the downloads to be counted in some way as much as possible for the Origin servers.
01:39:20
◼
►
So anyway, there's no caching involved there, that's intentional.
01:39:24
◼
►
But for the artwork, there is caching involved there, there's going to be a CDN in front
01:39:28
◼
►
of it, so if these servers go down for any reason, it's not going to be a massive deal.
01:39:35
◼
►
It's not going to be like the whole app stops working, or something big is like ugly and
01:39:40
◼
►
It's going to be a really small deal.
01:39:41
◼
►
And so I'm just going to try it.
01:39:43
◼
►
I have just this one seven megabyte go binary
01:39:47
◼
►
to put on the servers and that's it.
01:39:49
◼
►
There's no dependencies.
01:39:50
◼
►
There's no, this very much appeals to me.
01:39:52
◼
►
There's no configuration really.
01:39:54
◼
►
The only sensitive thing on there is gonna be
01:39:57
◼
►
the private key to the SSL certificate that it uses.
01:40:00
◼
►
So I think it'll be interesting.
01:40:03
◼
►
- That was much more in depth than I expected.
01:40:08
◼
►
That's excellent.
01:40:09
◼
►
What else is going on?
01:40:10
◼
►
You wanna do titles?
01:40:11
◼
►
- I think minutiae.
01:40:12
◼
►
That has to be it.
01:40:15
◼
►
- Yeah, but the AE, the combined AE,
01:40:17
◼
►
I don't know what that's called,
01:40:18
◼
►
that's gonna break a whole bunch of podcast clients,
01:40:22
◼
►
- My shell script might break to embed the title.
01:40:26
◼
►
I'll have to--
01:40:27
◼
►
- That's a different issue.
01:40:27
◼
►
- Yeah, well, it's not really.
01:40:29
◼
►
I'll just do, I'll use iTunes to edit it or something else.
01:40:32
◼
►
Can you believe how, like, a lot of podcast producers,
01:40:34
◼
►
that's how they embed the ID3 tags,
01:40:36
◼
►
is they import the MP3 into iTunes
01:40:40
◼
►
and hit command I for the info panel
01:40:42
◼
►
and type in the stuff and then export.
01:40:44
◼
►
Like that's crazy to me that anybody does that.
01:40:46
◼
►
- They should use mp3 rage and pretend it's 2002 again.
01:40:49
◼
►
- Well I'm using lame on the command line
01:40:52
◼
►
which is pretending like it's 2004.
01:40:54
◼
►
- Similar error.
01:40:56
◼
►
- Yeah, exactly.
01:40:57
◼
►
- Why don't you use a hex editor?
01:40:59
◼
►
- Yeah then you have to know UTF-8
01:41:01
◼
►
for converting that character.
01:41:03
◼
►
That's not gonna work.
01:41:03
◼
►
- Easy enough.
01:41:04
◼
►
- Yeah I think nouche is probably the best one here.
01:41:08
◼
►
Is that little A-E symbol actually pronounced?
01:41:13
◼
►
Like, che, T-A-T, little,
01:41:16
◼
►
I don't even know how to pronounce the little.
01:41:17
◼
►
- Well, it depends on what language you're talking about.
01:41:19
◼
►
If you're talking about Latin or Greek,
01:41:20
◼
►
which is probably where it's from,
01:41:22
◼
►
the answer is nobody actually knows,
01:41:24
◼
►
and everyone's just gonna think they know,
01:41:26
◼
►
and they're making it up.
01:41:27
◼
►
And so, I think we'll use the wonderful A-E ligature,
01:41:32
◼
►
and we will just tolerate the emails that come in,
01:41:36
◼
►
because we love everybody's emails so much.
01:41:38
◼
►
including the people who tell you that's not a ligature.
01:41:41
◼
►
I think it is a ligature, isn't it?
01:41:43
◼
►
I don't know.
01:41:45
◼
►
I'm just speculating about potential email we could get.
01:41:47
◼
►
Yeah, as Holgate in the chat room
01:41:49
◼
►
points out, the HTML entity named for it is ae-lig.
01:41:53
◼
►
So I'm pretty sure it's a ligature.
01:41:55
◼
►
Yeah, I don't know.
01:41:56
◼
►
I don't know the technology.
01:41:57
◼
►
You know, the font and typeface and everything?
01:42:00
◼
►
There's lots of distinctions that I have apparently not
01:42:03
◼
►
cared enough about to memorize.
01:42:06
◼
►
I know they exist, but I don't know what's right.
01:42:08
◼
►
[BLANK_AUDIO]