491: Salmon and SwiftUI
00:00:00
◼
►
- Oh, I have a very tense neck and shoulder situation
00:00:05
◼
►
going on this week because I've been doing Swift UI.
00:00:13
◼
►
So I'm trying, I should get a list together.
00:00:17
◼
►
So with DubDub this year, they gave me all sorts of gifts.
00:00:22
◼
►
They gave me a photo picker because the one I'm using
00:00:25
◼
►
right now is the UI kit one, which you can't launch
00:00:28
◼
►
from SwiftUI and I have this utter pile of hacks
00:00:30
◼
►
to get that to work.
00:00:32
◼
►
They gave me a native photo picker.
00:00:33
◼
►
They gave me a native drawer, which is on Masquerade,
00:00:37
◼
►
it's the thing where you select what emoji you wanna use.
00:00:39
◼
►
They gave me a native one of those.
00:00:41
◼
►
And there was some, oh, they gave me a native
00:00:43
◼
►
screenshotting mechanism, which is between just the three
00:00:46
◼
►
of us, how you actually export an image from Masquerade,
00:00:49
◼
►
as I just screen capture, which I know is not the way
00:00:51
◼
►
I should be doing it, but I'm not here to argue
00:00:52
◼
►
about that right now.
00:00:53
◼
►
Anyway, of those three things--
00:00:55
◼
►
- Wait, what?
00:00:56
◼
►
Is the maximum resolution?
00:00:57
◼
►
is the resolution it is on your screen?
00:00:59
◼
►
- No, no, because it's at 3x.
00:01:02
◼
►
So yes-ish. - Yes, though,
00:01:04
◼
►
that is how you've been doing it.
00:01:04
◼
►
- Yes, so yes-ish.
00:01:06
◼
►
I'm not here to argue about that right now.
00:01:09
◼
►
So anyway. - You need to fix that.
00:01:11
◼
►
- On the list.
00:01:12
◼
►
So anyway, concentrate, concentrate.
00:01:14
◼
►
So the photo picker thing,
00:01:16
◼
►
the photo picker thing gives you a SwiftUI image view,
00:01:20
◼
►
which is useless if you wanna do any sort of manipulation
00:01:23
◼
►
of the image.
00:01:26
◼
►
because I need a UI image instead of just a Swift UI image.
00:01:30
◼
►
And the officially blessed way to do that
00:01:32
◼
►
is this new transferable protocol
00:01:34
◼
►
where it'll give you a URL
00:01:35
◼
►
where the file is sitting in the file system
00:01:37
◼
►
for you to copy to your own sandbox and do something with,
00:01:40
◼
►
except that in all the beta seeds so far,
00:01:42
◼
►
it gives you the URL and the file's already fricking gone
00:01:44
◼
►
by the time you get the URL.
00:01:47
◼
►
The screenshotty thing doesn't work
00:01:49
◼
►
and that's mostly a Casey problem.
00:01:51
◼
►
That's not terribly interesting,
00:01:52
◼
►
but it's another thing that doesn't work
00:01:53
◼
►
the way I want it to.
00:01:54
◼
►
And the drawer, the way it works is it's presenting a sheet,
00:01:59
◼
►
a modal sheet, not taking over the entire screen.
00:02:03
◼
►
My drawer can't be modal because you're supposed
00:02:05
◼
►
to interact with both the drawer and the backing view
00:02:07
◼
►
that launched the drawer.
00:02:09
◼
►
So of the three things that I so desperately wanted
00:02:12
◼
►
and seemed like Christmas in June just for Casey,
00:02:15
◼
►
none of them are working right now
00:02:17
◼
►
and I am very sad about it.
00:02:19
◼
►
So with that in mind, Marco, tell me about SwiftUI
00:02:21
◼
►
and how great it is.
00:02:23
◼
►
Where we last left last show.
00:02:25
◼
►
- Our intrepid hero.
00:02:26
◼
►
- Yes, I had come to the realization that
00:02:29
◼
►
if I'm going to continue being a professional
00:02:31
◼
►
iOS developer as my career,
00:02:34
◼
►
it was my responsibility to switch
00:02:37
◼
►
as much as I possibly could to SwiftUI,
00:02:40
◼
►
really dive in eagerly and dive in head first
00:02:43
◼
►
and try to do as much of it as I possibly could.
00:02:45
◼
►
And so my task for this past week has been,
00:02:50
◼
►
I've been kind of juggling a few things.
00:02:53
◼
►
I've been doing some server work,
00:02:54
◼
►
I've been doing a minor Overcast update
00:02:56
◼
►
with the existing code base,
00:02:56
◼
►
and then in the spare time I had between those two things,
00:02:59
◼
►
I was trying to start clean with SwiftUI.
00:03:03
◼
►
I have a brand new project that just basically a test
00:03:06
◼
►
to see can I replicate some of the basics
00:03:09
◼
►
of the Overcast interface with SwiftUI?
00:03:12
◼
►
I mentioned in the past a lot how I feel very burdened
00:03:16
◼
►
and trapped by the amount, the sheer amount
00:03:20
◼
►
of UI code I have.
00:03:21
◼
►
It's a lot of code, it's old code,
00:03:24
◼
►
it is all in a legacy language using legacy frameworks
00:03:28
◼
►
and it is a huge amount of tricks and hacks
00:03:32
◼
►
to try to get exactly what I want to happen.
00:03:35
◼
►
And so my goal with SwiftUI has been,
00:03:38
◼
►
as I'm doing this exploration and my new prototype
00:03:41
◼
►
of how this thing could work,
00:03:43
◼
►
I want as little code as I can.
00:03:45
◼
►
I wanna do things in the cleanest, least complicated way
00:03:49
◼
►
that I can do them.
00:03:50
◼
►
And if I have to give up certain details
00:03:52
◼
►
of how things look or work, as long as it's not too bad,
00:03:55
◼
►
I'm willing to do that.
00:03:56
◼
►
- Which, just to interrupt briefly,
00:03:57
◼
►
I think that this is a very smart and pragmatic way
00:04:00
◼
►
of doing things, which was born, it seems,
00:04:02
◼
►
in no small part from your discussion with Dave
00:04:05
◼
►
on Under the Radar, which was excellent.
00:04:07
◼
►
And I am in full support of this technique.
00:04:09
◼
►
Like, I think this is a really great way
00:04:10
◼
►
for you to dip your toe in, decide whether or not
00:04:13
◼
►
hate it and not have damaged your existing app, you know, into either fork or like you
00:04:19
◼
►
said sounds like you know you start a new project, but one way or another I think this
00:04:22
◼
►
is a really great way to do it and I'm curious to hear how it's going so far because I'm
00:04:26
◼
►
guessing it's not great.
00:04:27
◼
►
So, okay. So first of all and what you just said like you know decide whether I like it
00:04:33
◼
►
or not that's not a question I'm considering. I'm requiring myself to like it. Like I'm
00:04:39
◼
►
I'm going to like this and I'm just going to keep eating it until I like it.
00:04:42
◼
►
I've been there.
00:04:43
◼
►
Me too, and it does eventually work for most things.
00:04:46
◼
►
It's not there on salmon necessarily, but we'll get there.
00:04:49
◼
►
Oh, I just had salmon for dinner tonight. Salmon's great.
00:04:51
◼
►
Anyway, it has a lot of benefits.
00:04:53
◼
►
I'm trying to like it, I'm still working on that one, but I've gotten almost everything else.
00:04:56
◼
►
Salmon and SwiftUI.
00:04:58
◼
►
So first, the first thing I tried was,
00:05:01
◼
►
let me see if I can get what my player currently does now,
00:05:05
◼
►
which is, you know, navigation view, you know, in the main screen,
00:05:08
◼
►
main screen.
00:05:09
◼
►
Below it is this little mini player, when you have a podcast loaded, and you can swipe
00:05:14
◼
►
that mini player up and it expands into the now playing view.
00:05:18
◼
►
Oh, and that's all custom animation in UIKit, isn't it?
00:05:21
◼
►
Yes, that is a custom transition with, I believe it's UI View property animators, I think,
00:05:26
◼
►
are powering that right now, and an interruptible presentation, custom transition stuff.
00:05:31
◼
►
So anyway, it's all that stuff.
00:05:32
◼
►
They introduced all that stuff like five years ago, or geez, probably more 10 years ago.
00:05:36
◼
►
Anyway, I wanted to just replicate that basic thing
00:05:40
◼
►
Day one of this was just trying so many different things
00:05:44
◼
►
to replicate that, like being able to drag something up,
00:05:47
◼
►
have a view within it that expands into a new location
00:05:50
◼
►
and position, drag it back down, have it be interruptable.
00:05:53
◼
►
You can not drag it all the way if you want,
00:05:55
◼
►
and have it be full screen when it gets there,
00:05:58
◼
►
not a presented sheet, but an actual full screen cover modal.
00:06:01
◼
►
All these little details of just like,
00:06:03
◼
►
okay, let me just see if I can get this to work.
00:06:04
◼
►
And I kept going through this pattern of,
00:06:06
◼
►
all right, well, I'll try the obvious way.
00:06:08
◼
►
That doesn't work.
00:06:09
◼
►
Do some Google searching, 'cause of course,
00:06:10
◼
►
the documentation is not super helpful.
00:06:13
◼
►
Do some Google searching, find some often ancient blog posts
00:06:16
◼
►
from Swift UI three years ago that's no longer relevant,
00:06:20
◼
►
or things have changed, or names have changed,
00:06:22
◼
►
or parameters have changed, protect the innocent.
00:06:24
◼
►
All the experimentation, eventually the code would balloon
00:06:28
◼
►
up into a giant complex beast that would still actually
00:06:32
◼
►
not really work exactly the way it should,
00:06:34
◼
►
and usually will have at least one deal killer.
00:06:37
◼
►
So when I was doing that part of it,
00:06:38
◼
►
the deal killers were like, as I would drag the sheet up,
00:06:42
◼
►
as soon as it would hit right below the safe area
00:06:46
◼
►
on the top where the notch cuts in,
00:06:49
◼
►
it would snap to the height of the full screen.
00:06:52
◼
►
And so it would like, so as you were dragging it
00:06:54
◼
►
right at that top pixel, it would go from, you know,
00:06:57
◼
►
95%, 200% of the height.
00:06:59
◼
►
And I could not figure out a way to not do that.
00:07:01
◼
►
I tried, how about instead of moving the frame,
00:07:03
◼
►
let's move the offset.
00:07:04
◼
►
Nope, that doesn't work either.
00:07:05
◼
►
There were so many little details like that
00:07:07
◼
►
that I would get it 80% of the way there,
00:07:10
◼
►
but then I would run it to something
00:07:11
◼
►
where I literally couldn't ship this.
00:07:14
◼
►
It looks like a bug.
00:07:16
◼
►
If something is less fancy than it used to be,
00:07:21
◼
►
that's fine, I can take that.
00:07:22
◼
►
But if something looks like a bug or acts like a bug,
00:07:24
◼
►
I can't take that.
00:07:26
◼
►
So eventually I gave up, I'm like, you know what, forget it.
00:07:29
◼
►
I'll just present a sheet and call it a day.
00:07:32
◼
►
I'm not gonna do the interactive transition.
00:07:34
◼
►
I'm willing to give up the cool thing
00:07:37
◼
►
where the artwork grows into the new location
00:07:39
◼
►
and shrinks back down.
00:07:40
◼
►
I'm willing to give that up if everything else
00:07:42
◼
►
can be much more clean and simple
00:07:44
◼
►
and maintainable, et cetera.
00:07:45
◼
►
I know it'll be less nice.
00:07:47
◼
►
Oh well, I'm willing to give that up.
00:07:48
◼
►
So eventually I figured out regular presenting
00:07:51
◼
►
of an outplaying thing.
00:07:53
◼
►
All right, next.
00:07:55
◼
►
Theme options.
00:07:56
◼
►
Can I do in the app changing of the tint color live
00:08:02
◼
►
and have it change everything in the whole app?
00:08:04
◼
►
And can I have it change dark mode programmatically?
00:08:07
◼
►
Because I have the option now
00:08:08
◼
►
where you can always run it in dark mode.
00:08:10
◼
►
This is not used by a ton of people,
00:08:13
◼
►
but it's used by enough people that if I remove that,
00:08:16
◼
►
it would be a problem.
00:08:17
◼
►
Like I would hear about it a lot.
00:08:20
◼
►
People would leave one star reviews for years
00:08:22
◼
►
over just that.
00:08:23
◼
►
So I know, like all right, I really need to have a way
00:08:26
◼
►
to override dark mode system-wide with a preference.
00:08:30
◼
►
and again, have that be able to be changed
00:08:32
◼
►
while the app is running and update everything.
00:08:34
◼
►
I have that now in my current system.
00:08:36
◼
►
So, how do I do that?
00:08:39
◼
►
Oh, also, one of my goals during this.
00:08:42
◼
►
So, small code, simple straightforward code, no hacks,
00:08:46
◼
►
and also, trying not to dip back into UI kit
00:08:50
◼
►
if I don't have to.
00:08:51
◼
►
Well, doing this was the first thing that broke that rule
00:08:57
◼
►
because I could not get it to do everything right
00:09:01
◼
►
without using a scene delegate,
00:09:03
◼
►
which is not part of the new architecture.
00:09:05
◼
►
You're not supposed to use those anymore.
00:09:06
◼
►
But I had to eventually make a scene delegate.
00:09:09
◼
►
It's at least Swift.
00:09:10
◼
►
I'm not ducking down to Objective-C yet.
00:09:13
◼
►
It'll happen, I'm sure.
00:09:16
◼
►
It's at least Swift, but I had to use some of UIKit
00:09:20
◼
►
in order to get that part working.
00:09:22
◼
►
And that took like three days
00:09:23
◼
►
just trying to get the theme system working.
00:09:26
◼
►
So eventually I got that.
00:09:28
◼
►
I got tint colors being able to be changed,
00:09:29
◼
►
I got programmatic dark mode control
00:09:31
◼
►
so I can have an always on dark mode or not,
00:09:33
◼
►
and also respond to the system dark mode
00:09:35
◼
►
and not override that and not get stuck in dark mode forever
00:09:37
◼
►
'cause the stupid environment variable
00:09:39
◼
►
gets overwritten without a scene delegate.
00:09:40
◼
►
Like all these little, like,
00:09:42
◼
►
so again, same kind of thing.
00:09:44
◼
►
The code slowly balloons up with hacks.
00:09:46
◼
►
Eventually I figure out, not gonna do this,
00:09:49
◼
►
too many hacks, clear it all back.
00:09:50
◼
►
And then eventually I find a simpler way to do it
00:09:53
◼
►
that might involve some breakage of my purity laws here.
00:09:55
◼
►
So finally, now I've been working on it.
00:09:58
◼
►
I have the now playing just simple present,
00:10:02
◼
►
dismiss, full screen.
00:10:03
◼
►
I have the theme basics.
00:10:06
◼
►
Now let me try to do a three column layout.
00:10:11
◼
►
What I've wanted to do forever is a three column layout
00:10:16
◼
►
for Mac and iPad.
00:10:18
◼
►
And then when you drag the window to be too small for that
00:10:21
◼
►
or when you're running on an iPhone,
00:10:23
◼
►
it collapses into a regular navigation view
00:10:25
◼
►
And Overcast is actually not a three column app,
00:10:27
◼
►
it's actually a two column app with a now playing screen,
00:10:29
◼
►
which makes it even easier.
00:10:31
◼
►
Really, I just need the Navigation View to do two columns.
00:10:33
◼
►
Either the root screen with the podcast
00:10:37
◼
►
or playlist screen on top of it, or next to it.
00:10:40
◼
►
Very simple, this should not be a hard thing.
00:10:42
◼
►
And in fact, that has been a feature
00:10:44
◼
►
of UI Split View forever.
00:10:49
◼
►
Obviously, this should not be a hard thing in SwiftUI,
00:10:53
◼
►
Especially since this year at W2C with iOS 16
00:10:57
◼
►
and the coordinated releases,
00:10:59
◼
►
there is an entirely new navigation stack view
00:11:03
◼
►
and navigation split view pair of APIs.
00:11:06
◼
►
And there's all these new ways to represent
00:11:08
◼
►
how they are presenting their views
00:11:09
◼
►
and representing their paths and everything else, great.
00:11:12
◼
►
They don't work.
00:11:15
◼
►
- Cool. - I keep thinking,
00:11:17
◼
►
usually when you're a programmer
00:11:20
◼
►
and you are using an API in a relatively straightforward way
00:11:25
◼
►
and it's not working, you can almost always blame yourself.
00:11:28
◼
►
It's almost always your fault.
00:11:29
◼
►
And in this case, it might still be.
00:11:31
◼
►
It probably is my fault,
00:11:33
◼
►
but so many little details just break.
00:11:37
◼
►
And this is, again, this is not like my entire app.
00:11:39
◼
►
This is a simple test project
00:11:40
◼
►
that has like three files in it.
00:11:42
◼
►
And I just, and I know it's still a beta
00:11:44
◼
►
and I should file bugs and I'll get to that, but,
00:11:48
◼
►
Like, I keep going back to the W2C videos
00:11:51
◼
►
and how the navigation split view and stack view,
00:11:53
◼
►
and even, I even tried using the old navigation methods.
00:11:55
◼
►
I'm like, well, you know, what if I can do this
00:11:56
◼
►
without requiring iOS 16?
00:11:58
◼
►
That'd be nice.
00:11:59
◼
►
You know, I could deploy it earlier.
00:12:01
◼
►
I'm gonna require iOS 15 in my next update.
00:12:03
◼
►
I'd love to use things that require 15, and that's fine.
00:12:06
◼
►
And I just couldn't get it to work reliably in a good way.
00:12:12
◼
►
And even when I did, like for the parts of it
00:12:15
◼
►
that I could get working reliably,
00:12:16
◼
►
there are so many limitations on the control
00:12:19
◼
►
you get over that.
00:12:21
◼
►
So for instance, one thing that I absolutely want
00:12:24
◼
►
in my split view interface is I want all three columns
00:12:29
◼
►
to always be displaying.
00:12:33
◼
►
And I do not want the little side view collapse-y button
00:12:37
◼
►
in the corner that hides and shows the side view.
00:12:39
◼
►
I don't want that button to exist in the app.
00:12:41
◼
►
I just want all three views to be showing
00:12:43
◼
►
when there's space and when there isn't space.
00:12:45
◼
►
I will put my own layout in there with the regular stacked
00:12:50
◼
►
And as far as I can tell, there's no way
00:12:52
◼
►
to tell the new SwiftUI split view thing,
00:12:55
◼
►
don't show that show toolbar button.
00:12:57
◼
►
Like, it's always there, no matter what,
00:12:59
◼
►
as far as I can tell.
00:13:01
◼
►
And you look at UI split view, and there's
00:13:04
◼
►
tons of options for controlling it.
00:13:06
◼
►
And they made this whole thing that's supposed to replace it,
00:13:08
◼
►
and there's like one option.
00:13:10
◼
►
And so anyway, so now I'm like, all right,
00:13:13
◼
►
now I'm going to break my other law.
00:13:15
◼
►
Let me see if I can get this to work with using UI view
00:13:20
◼
►
representable and UI hosting controllers
00:13:23
◼
►
and seeing if I can use a UI split view inside
00:13:27
◼
►
of my otherwise Swift UI layout.
00:13:30
◼
►
And now there's all sorts of complexities with that.
00:13:32
◼
►
And I can't get the safe area insets to work.
00:13:34
◼
►
And it's just-- oh, I am trying so hard to get something
00:13:40
◼
►
that's going to end up hopefully being so little, so simple,
00:13:43
◼
►
and so maintainable code.
00:13:44
◼
►
So if everything ends up being super fragile
00:13:47
◼
►
and really delicate to actually work in and tweak,
00:13:51
◼
►
then am I really achieving that goal?
00:13:54
◼
►
- Yeah, yeah, I think it's hard for me to tell,
00:13:59
◼
►
when I complain a moment about SwiftUI,
00:14:01
◼
►
it's hard for me to tell if I'm just holding it wrong.
00:14:05
◼
►
And I mean that kind of genuinely,
00:14:07
◼
►
because it is a very different paradigm
00:14:10
◼
►
than what I'm used to.
00:14:12
◼
►
And so the best, and this is gonna turn so many people off
00:14:15
◼
►
and I'm sorry, but just bear with me here.
00:14:17
◼
►
The best recent experience I've had that's similar to this
00:14:20
◼
►
is when I was learning RxSwift or in modern stuff,
00:14:24
◼
►
learning combined.
00:14:25
◼
►
Because it's a very, very different way
00:14:27
◼
►
of going about doing things.
00:14:29
◼
►
Isn't necessarily better, isn't necessarily worse.
00:14:32
◼
►
It's just different.
00:14:33
◼
►
There's advantages to RxSwift and Combine.
00:14:35
◼
►
There's advantages to SwiftUI.
00:14:37
◼
►
It doesn't make it better, doesn't make it worse.
00:14:39
◼
►
It's just different.
00:14:40
◼
►
And when I was learning RxSwift for a long time,
00:14:45
◼
►
to the order of like months,
00:14:48
◼
►
I was trying to accomplish things
00:14:51
◼
►
in the more procedural, traditional way,
00:14:54
◼
►
rather than just really embracing this whole new world
00:14:57
◼
►
that I was trying to dive into.
00:15:00
◼
►
And because of that,
00:15:01
◼
►
a lot of my early RxSwift code was kind of garbage
00:15:04
◼
►
because I wasn't really doing it the RxSwift way.
00:15:06
◼
►
And I wonder, and actually my problem with image renderer,
00:15:09
◼
►
which is the thing that captures the screen,
00:15:11
◼
►
or captures the SwiftUI view.
00:15:13
◼
►
I think that the problems I have with that,
00:15:15
◼
►
as much as I wanna blame Apple,
00:15:16
◼
►
I think that's actually me holding it wrong,
00:15:17
◼
►
and I'm not doing things exactly the way I should be,
00:15:20
◼
►
and that's the problem.
00:15:21
◼
►
And I wonder if, for some of the stuff
00:15:23
◼
►
that you're talking about,
00:15:24
◼
►
and certainly for a lot of the stuff
00:15:26
◼
►
that I'm running into problems with SwiftUI,
00:15:29
◼
►
I wonder if, and I think Dave made this speech
00:15:31
◼
►
to you as well, I wonder if the issue is less with SwiftUI,
00:15:36
◼
►
and more that I'm just too busy thinking in a UI kit way.
00:15:41
◼
►
Even though I'm not doing it deliberately,
00:15:42
◼
►
I'm not doing it consciously,
00:15:44
◼
►
I'm thinking in that old way of thinking
00:15:46
◼
►
and that old style of thinking.
00:15:47
◼
►
And because of that,
00:15:48
◼
►
I'm trying to kind of implicitly replicate UI kit
00:15:52
◼
►
in SwiftUI, which is not the way to do SwiftUI.
00:15:55
◼
►
And David, a really great way of putting this
00:15:57
◼
►
on under the radar.
00:15:57
◼
►
I forget exactly how he phrased it
00:15:58
◼
►
and I won't try to parrot it now
00:16:00
◼
►
'cause I'll ruin his argument.
00:16:01
◼
►
But I don't, and I can't speak for you, Marco.
00:16:03
◼
►
Maybe you are doing it,
00:16:05
◼
►
thinking of things in SwiftUI way and so on and so forth.
00:16:07
◼
►
I don't know, but that's something that I feel
00:16:09
◼
►
I'm running into and that's a problem.
00:16:10
◼
►
But even with all of that said, I do feel like,
00:16:14
◼
►
and the vibe I get from people that are doing
00:16:17
◼
►
a lot of SwiftUI is that yeah, a lot of it,
00:16:20
◼
►
you just can't freaking do.
00:16:23
◼
►
And the tough thing is, it is a big black box.
00:16:26
◼
►
And once you hit the wall or the edge of that big black box,
00:16:31
◼
►
you're screwed.
00:16:31
◼
►
Like, okay, I guess it's UI kit time, baby,
00:16:34
◼
►
Because what other choice do I have?
00:16:36
◼
►
And that's, I understand why that is,
00:16:38
◼
►
given the nature of a declarative, you know,
00:16:42
◼
►
user interface development scheme, language,
00:16:45
◼
►
whatever you want to call it.
00:16:46
◼
►
But that's kind of a problem, right?
00:16:49
◼
►
Especially since we have been trained by Apple,
00:16:53
◼
►
or maybe not by Apple,
00:16:54
◼
►
but certainly third-party developers have made it our thing
00:16:56
◼
►
to have these like super bespoke custom user interfaces.
00:16:59
◼
►
And I know that you've talked, Marco, recently,
00:17:00
◼
►
or at least I believe you have,
00:17:02
◼
►
about how that maybe isn't necessary anymore.
00:17:03
◼
►
and I agree with you, but we want everything to look good
00:17:06
◼
►
and feel good, and it is very hard to make anything look
00:17:11
◼
►
or feel any way that SwiftUI isn't familiar with already.
00:17:16
◼
►
If you wanna make something super custom,
00:17:18
◼
►
it is very difficult.
00:17:19
◼
►
Now there are things that make that better.
00:17:20
◼
►
There's a new layout system,
00:17:21
◼
►
which honestly I haven't really dabbled with yet,
00:17:23
◼
►
and actually might work for you in this case, maybe?
00:17:26
◼
►
- I don't really need the, like the layout is,
00:17:28
◼
►
one of the reasons why I like using SwiftUI for this,
00:17:31
◼
►
I like the idea of it at least,
00:17:32
◼
►
is that having a layout that like,
00:17:35
◼
►
oh, sometimes I have a menu player, sometimes I don't.
00:17:37
◼
►
I have a now playing screen come up
00:17:39
◼
►
and it's arranged in different ways
00:17:41
◼
►
depending on the size of the screen.
00:17:41
◼
►
Like that stuff, SwiftUI makes that super easy.
00:17:44
◼
►
That's why I wanna use it.
00:17:45
◼
►
And there's a lot of other stuff
00:17:46
◼
►
that it makes super easy as well.
00:17:48
◼
►
I'm not even talking about doing stuff
00:17:49
◼
►
that's necessarily that custom.
00:17:52
◼
►
This thing where I have like a stack view
00:17:54
◼
►
or a split view depending on the size,
00:17:56
◼
►
like that theoretically I shouldn't even need
00:17:58
◼
►
to have that distinction.
00:17:59
◼
►
Theoretically, the split view should just do this.
00:18:02
◼
►
Like when it's small,
00:18:02
◼
►
it should just present the phone interface.
00:18:04
◼
►
In practice, in my experience so far,
00:18:06
◼
►
it just doesn't work.
00:18:08
◼
►
But maybe I'm doing like one little wrong thing.
00:18:13
◼
►
But it's very hard to figure that out.
00:18:16
◼
►
And I mean, even simple things like my root list screen,
00:18:19
◼
►
like the first level list screen.
00:18:21
◼
►
Overcast displays two kinds of things on that list screen,
00:18:24
◼
►
playlists and podcasts.
00:18:26
◼
►
And so I have in my little demo,
00:18:27
◼
►
I have two basic structs, playlist and podcast.
00:18:30
◼
►
And so I'm trying to make a list that has two sections,
00:18:33
◼
►
and depending on which one of those you tap,
00:18:35
◼
►
it presents a different detail view for that,
00:18:38
◼
►
'cause it's either showing a playlist or a podcast.
00:18:40
◼
►
So many of these abstractions
00:18:42
◼
►
that are built into the new navigation things
00:18:45
◼
►
either become very messy or totally break
00:18:48
◼
►
when the content in a list can be more than one type.
00:18:53
◼
►
Almost all of these new APIs they've made
00:18:55
◼
►
seem to make that very difficult,
00:18:57
◼
►
and seem to have not been designed with that in mind.
00:18:59
◼
►
- Well that's why you gotta use an enumeration.
00:19:01
◼
►
That's the answer to all problems
00:19:02
◼
►
when it comes to the Swift type system.
00:19:04
◼
►
And I say that only slightly jokingly.
00:19:06
◼
►
I'm snarking right now,
00:19:08
◼
►
but Swift enums are really, really incredible,
00:19:11
◼
►
and you can do some incredibly powerful things with them
00:19:13
◼
►
with little to no quote-unquote overhead to do it.
00:19:17
◼
►
- Yeah, and part of the reason why
00:19:19
◼
►
this has been such a frustrating journey for me
00:19:20
◼
►
is that some of the time I've spent battling this
00:19:23
◼
►
has been battling the language,
00:19:24
◼
►
because a lot of those little details,
00:19:26
◼
►
because I'm not a Swift expert yet,
00:19:28
◼
►
I don't know a lot of these hacks and workarounds.
00:19:30
◼
►
So I'll have a situation where it's like,
00:19:32
◼
►
okay, well I want this binding to be optional.
00:19:35
◼
►
Not to bind to an optional value,
00:19:38
◼
►
but I want the binding itself to be optional.
00:19:40
◼
►
And you can do that, it turns out.
00:19:42
◼
►
You just can't use @binding as the prefix.
00:19:44
◼
►
You have to write out the whole type afterwards.
00:19:46
◼
►
And every time you do that, you gotta look that up.
00:19:49
◼
►
Things like having these two different things,
00:19:50
◼
►
Playlist and Podcast.
00:19:51
◼
►
I had them both inherit from a common protocol.
00:19:54
◼
►
try using a protocol anywhere in SwiftUI, you can't.
00:19:58
◼
►
And some of the, because SwiftUI itself
00:20:01
◼
►
is also such a giant pile of hacks in the Swift language,
00:20:04
◼
►
some of the error messages are comical
00:20:06
◼
►
and they send you in such a weird direction.
00:20:09
◼
►
Like you'll get error messages about things like
00:20:12
◼
►
the initializer can't be called 'cause it's private
00:20:14
◼
►
because a value that SwiftUI expects to be optional
00:20:17
◼
►
wasn't marked optional.
00:20:19
◼
►
Like that has nothing to do with the message.
00:20:20
◼
►
It's just, there are so many little things
00:20:23
◼
►
where I'm just hitting wall after wall after wall.
00:20:26
◼
►
And I'm at the point now where I actually am motivated
00:20:30
◼
►
to keep going, I'm excited to get to my perceived future
00:20:34
◼
►
where I think I can do this all in a relatively clean way
00:20:37
◼
►
and save a bunch of code and update my knowledge
00:20:39
◼
►
and my code base and all this stuff.
00:20:41
◼
►
Like I am sold on the benefits of getting there
00:20:44
◼
►
and I'm just beating my head against the wall constantly
00:20:47
◼
►
along the path there and I've now been beating my head
00:20:50
◼
►
against the wall for like a week,
00:20:51
◼
►
and I have relatively little to show for it so far.
00:20:56
◼
►
All I have is a bunch of ways to do things that don't work,
00:20:58
◼
►
and a few things I got working.
00:21:01
◼
►
But I am still going, I'm still optimistic,
00:21:03
◼
►
I still think this is the right path, but this is hard.
00:21:07
◼
►
And I think Apple is deluding themselves
00:21:11
◼
►
if anybody there thinks that either Swift or SwiftUI
00:21:16
◼
►
is suitable for beginners.
00:21:19
◼
►
- It is so not, like at all.
00:21:22
◼
►
And you know, I think part of the reason
00:21:24
◼
►
I'm finding some of this stuff so difficult
00:21:25
◼
►
is obviously because the way I'm used to doing things
00:21:28
◼
►
is different, and so somebody learning from scratch
00:21:31
◼
►
probably wouldn't have a lot of this baggage that I have.
00:21:33
◼
►
- Oh, that's an interesting point, yeah.
00:21:35
◼
►
- However, there are so many things where
00:21:38
◼
►
here's a common need I have to fix,
00:21:40
◼
►
or here's an error I ran into, how do I fix this?
00:21:42
◼
►
And the answer is so technical, and so language nerdy,
00:21:46
◼
►
and so obtuse and the only thing you can really do
00:21:49
◼
►
is Google for it and hope somebody answered it
00:21:52
◼
►
the right way that you understand.
00:21:54
◼
►
I don't know how anybody expects people
00:21:57
◼
►
to use this language and this framework,
00:22:01
◼
►
which itself is a giant pile of hacks
00:22:02
◼
►
on top of an already complex language,
00:22:05
◼
►
as a beginner to programming.
00:22:07
◼
►
One of the great things, beginner languages
00:22:10
◼
►
should be fairly understandable at a deep level.
00:22:14
◼
►
you should be able to know everything that's going on
00:22:17
◼
►
if you're a beginner and you start asking questions
00:22:20
◼
►
and say, you know, you see like, what does, you know,
00:22:22
◼
►
argc and argv mean in my main function here?
00:22:25
◼
►
You should be able to know that.
00:22:26
◼
►
Like if you ask somebody, they will tell you
00:22:28
◼
►
and you should understand the answer,
00:22:29
◼
►
things should be relatively knowable.
00:22:31
◼
►
You should know, okay, if I write this statement,
00:22:33
◼
►
this is going to happen.
00:22:34
◼
►
I get this error, here's why that happened.
00:22:36
◼
►
If you're learning with Swift and SwiftUI,
00:22:39
◼
►
there is so much, there's such a vast constellation
00:22:44
◼
►
of non-trivially complex topics
00:22:47
◼
►
that you really should know or have some familiarity with
00:22:50
◼
►
because you'll run into these problems all the time
00:22:52
◼
►
and you'll need to know how to do it.
00:22:54
◼
►
This is a very advanced language
00:22:56
◼
►
and a very advanced complicated framework
00:22:58
◼
►
that requires a lot of brain messing.
00:23:01
◼
►
Back when I was learning languages,
00:23:07
◼
►
what was taught in college was Java and then C.
00:23:12
◼
►
I heard from all the professors all the time
00:23:13
◼
►
that the big challenge with where people would drop off
00:23:17
◼
►
was the concept of pointers in C.
00:23:20
◼
►
Because it's a level of indirection.
00:23:22
◼
►
And it makes sense, it's a complex topic
00:23:25
◼
►
for most people who are just learning this stuff
00:23:27
◼
►
and it takes a certain intellectual leap of complexity
00:23:31
◼
►
and of abstraction to understand a pointer
00:23:34
◼
►
and things you can do with pointers
00:23:35
◼
►
and where they are used and how they are used.
00:23:38
◼
►
SwiftUI is full of things like that.
00:23:41
◼
►
There are tons of that type of abstraction
00:23:44
◼
►
or that type of difficult or kind of indirect concept
00:23:50
◼
►
And so I don't know how people are going to learn this
00:23:52
◼
►
as beginners and not just hit their heads against the wall
00:23:55
◼
►
all the time.
00:23:56
◼
►
Because what Apple shows in the conference slides
00:23:59
◼
►
is like, oh, this thing is super easy.
00:24:01
◼
►
You just do this, this, and this,
00:24:02
◼
►
and then this wonderful thing pops out.
00:24:05
◼
►
But first of all, what they're doing is very, very trivial.
00:24:10
◼
►
like what they're showing in their examples is very trivial.
00:24:13
◼
►
And then second of all,
00:24:14
◼
►
when you're agreeing with an empty screen
00:24:16
◼
►
and you have to just type code,
00:24:17
◼
►
it's very hard to know what even to type
00:24:20
◼
►
to get what you want without just Googling
00:24:23
◼
►
and finding examples and copy and pasting.
00:24:25
◼
►
And those areas of SwiftUI I think are so entrenched
00:24:30
◼
►
to just the way the language and the framework
00:24:32
◼
►
have developed and are designed from the start.
00:24:35
◼
►
And even the whole concept of declarative UI
00:24:39
◼
►
in the complexity we have of it today
00:24:41
◼
►
is so complicated to get going and to not break.
00:24:46
◼
►
I think people are gonna have a very hard time learning this.
00:24:50
◼
►
I mean, maybe it's just me.
00:24:51
◼
►
Maybe this is 'cause I'm now considered
00:24:52
◼
►
an elderly programmer at age 40.
00:24:54
◼
►
And maybe I'm just too old to learn these new concepts.
00:24:59
◼
►
But I don't think that's entirely it.
00:25:01
◼
►
I mean, that's probably part of it.
00:25:03
◼
►
But I think this is just really hard.
00:25:05
◼
►
And it looks easy.
00:25:07
◼
►
When you see the conference slide code,
00:25:09
◼
►
it looks really easy, and in practice it really isn't.
00:25:13
◼
►
- I just want to point out that my high school age son
00:25:16
◼
►
wrote an app in SwiftUI and put it on the App Store,
00:25:18
◼
►
and it's got a lot of screens and a lot of buttons
00:25:19
◼
►
and stuff on it, and he doesn't know any language.
00:25:24
◼
►
He wrote an app and put it in the App Store,
00:25:25
◼
►
does he not know?
00:25:26
◼
►
Like, no one that young mostly knows anything.
00:25:29
◼
►
It's like the first major program he wrote.
00:25:30
◼
►
So, beginners figure it out.
00:25:32
◼
►
That idea of Googling, copying, and pasting
00:25:34
◼
►
can take you a long way.
00:25:36
◼
►
I mean, he's also a Syracuse, so.
00:25:37
◼
►
- Well, that's a fair point.
00:25:39
◼
►
Yeah, we should grade on a curve here.
00:25:41
◼
►
But no, I think you and me are lamenting
00:25:45
◼
►
all the crummy parts of SwiftUI, of which there are many.
00:25:48
◼
►
But I will say, and I think,
00:25:50
◼
►
didn't I say this like last week,
00:25:51
◼
►
that when SwiftUI does work,
00:25:54
◼
►
when you are within the guardrails that SwiftUI lays out,
00:25:57
◼
►
it is pretty fantastic.
00:26:01
◼
►
It's really incredible how quickly you can build
00:26:04
◼
►
a really good looking user interface
00:26:06
◼
►
with not an overabundance of code.
00:26:09
◼
►
And a lot of it just really does work
00:26:12
◼
►
if you stay in the guardrails.
00:26:15
◼
►
But that's the problem,
00:26:16
◼
►
is that those guardrails aren't just guardrails,
00:26:19
◼
►
they're entire, like 500 foot tall brick walls.
00:26:23
◼
►
And getting around them is not easy.
00:26:25
◼
►
Whereas in UIKit, for all the good and bad of UIKit,
00:26:29
◼
►
when you need to jump over a guardrail,
00:26:31
◼
►
it's like you just step right over.
00:26:33
◼
►
Like, oh, there we go, all right, done.
00:26:35
◼
►
Problem solved.
00:26:36
◼
►
Whereas with this, you're like trying to figure out
00:26:38
◼
►
how to like put the little rock-climbing things
00:26:42
◼
►
in between the bricks so you can find a foothold
00:26:44
◼
►
to raise yourself up the 500-foot brick wall
00:26:46
◼
►
that's completely vertical in order to get what you need.
00:26:49
◼
►
It's just, it's so frustrating.
00:26:51
◼
►
I don't know, I feel like I need Underscore
00:26:54
◼
►
to like sit next to me and just smack my hand
00:26:57
◼
►
with like a ruler every time I go to do something
00:26:59
◼
►
that's not the right way.
00:27:00
◼
►
Just be like, whoosh, nope, try again.
00:27:02
◼
►
All right, well what if I did,
00:27:03
◼
►
(imitates whip cracking)
00:27:04
◼
►
Nope, not that either, you know?
00:27:04
◼
►
Like, I just need him next to me.
00:27:06
◼
►
Pair programming is like not my thing.
00:27:08
◼
►
I hate it, I don't like it.
00:27:09
◼
►
I've thought about like going on Twitch
00:27:12
◼
►
and recording myself as I'm writing code
00:27:13
◼
►
and as soon as I think about that,
00:27:15
◼
►
I'm like, nope, nope, nope, nope, nope, nope, nope.
00:27:17
◼
►
That's a terrible decision.
00:27:19
◼
►
But I feel like I need a trusted friend
00:27:22
◼
►
to like sit next to me and show me the way
00:27:24
◼
►
because clearly what I'm doing ain't working.
00:27:27
◼
►
- Well, and the thing is,
00:27:28
◼
►
and I've had those moments where everything
00:27:30
◼
►
is going great and super easy,
00:27:32
◼
►
Like when I had to make my stupid placeholder
00:27:35
◼
►
now playing screen for this little mockup thing
00:27:37
◼
►
I'm working in, I was able to make such a nice screen
00:27:42
◼
►
with so little effort. (laughs)
00:27:44
◼
►
Like it's so good and it was like,
00:27:47
◼
►
oh, let me border this artwork and crop it
00:27:50
◼
►
with Johnny Ive Corners and all this stuff.
00:27:53
◼
►
And it's like perfect, easy, one line, two seconds,
00:27:56
◼
►
done, live previewing, done, done, done, great.
00:27:58
◼
►
Let me pad that, let me,
00:27:59
◼
►
there's a little drop shadow on that,
00:28:00
◼
►
oh, perfect, done, like, I've done all of those things
00:28:04
◼
►
in UIKit in Objective-C, and it's so much harder.
00:28:08
◼
►
And it took so much longer, and it's so much more code.
00:28:12
◼
►
And so that's where I'm trying to get.
00:28:14
◼
►
Like, I can see in the distance, I can see,
00:28:16
◼
►
I hope it's not a mirage, I can see, like,
00:28:19
◼
►
how good SwiftUI can be, and how much value
00:28:23
◼
►
this can deliver to me, but first,
00:28:25
◼
►
I have to, like, make sure that I can get
00:28:27
◼
►
the structure working, and again, I'm trying to do this
00:28:30
◼
►
in the most modern way possible.
00:28:32
◼
►
Like look, if the iOS 16 requiring APIs
00:28:37
◼
►
are the thing I need to do this, fine.
00:28:39
◼
►
Like my prototype is requiring iOS 16 so far
00:28:42
◼
►
just so I don't get any warnings anywhere.
00:28:43
◼
►
I just wanna see what's possible.
00:28:45
◼
►
And you know, I'll decide then.
00:28:46
◼
►
But I want to try to get things to be clean and correct
00:28:51
◼
►
and idiomatic if I can.
00:28:52
◼
►
Like I don't want to be doing a lot of hacks.
00:28:54
◼
►
I don't want to be doing a lot of weird customization.
00:28:56
◼
►
I don't wanna have to use UI kit bridging inside of it
00:28:59
◼
►
to get certain things to work.
00:29:01
◼
►
I want to use only SwiftUI if I can, as much as possible,
00:29:04
◼
►
'cause the whole point of doing this is to pull my code
00:29:08
◼
►
forward 10 years and actually be able to work
00:29:11
◼
►
in that clean modern way like the conference slides do.
00:29:14
◼
►
And just getting there, I'm just hitting so many walls.
00:29:18
◼
►
And parts of it are so good that it motivates me
00:29:21
◼
►
to keep going, and I'm sure a lot of this is, again,
00:29:24
◼
►
just 'cause I'm new at this, but I hope I can get there,
00:29:28
◼
►
because I've seen, I've tasted,
00:29:32
◼
►
do you taste the Promised Land?
00:29:33
◼
►
That sounds kind of gross.
00:29:35
◼
►
- You've seen the Promised Land.
00:29:36
◼
►
- Okay, you've seen the Promised Land.
00:29:38
◼
►
I've seen the mirage of how good this can be
00:29:42
◼
►
in my dumb little now playing placeholder screen
00:29:45
◼
►
and I just am trying to get there
00:29:47
◼
►
and it's so, so hard to get there.
00:29:50
◼
►
- Yeah, and it's tough too because,
00:29:52
◼
►
I mean, I've never seen the code for Overcast
00:29:54
◼
►
but just imagining it.
00:29:56
◼
►
the now playing screen in particular to my eyes,
00:29:59
◼
►
like screams Combine and SwiftUI.
00:30:01
◼
►
Like it's a bunch of things,
00:30:03
◼
►
it's a bunch of events happening over time
00:30:05
◼
►
where not a lot of things,
00:30:07
◼
►
well, leaving aside the user input,
00:30:09
◼
►
like not a lot is changing.
00:30:10
◼
►
You just need to update like counters
00:30:12
◼
►
and the state of whether or not you're playing
00:30:14
◼
►
or paused or whatever.
00:30:15
◼
►
Like all of this stuff is just like custom tailor-made
00:30:19
◼
►
for Combine and SwiftUI.
00:30:20
◼
►
Like this is the perfect problem statement
00:30:22
◼
►
for Combine and SwiftUI.
00:30:23
◼
►
But the problem is there's all that other stuff around it,
00:30:25
◼
►
which is important, it's super important.
00:30:28
◼
►
Like I'm not trying to say you're wasting your time
00:30:30
◼
►
or anything, all of the user interface stuff
00:30:31
◼
►
is super important and if you can't get through that hurdle,
00:30:35
◼
►
then it's almost like you failed before you've even begun.
00:30:38
◼
►
And it's too bad because I can see how this would be
00:30:41
◼
►
such a perfect match made in heaven
00:30:43
◼
►
if you can just get there and I don't blame you if you can.
00:30:45
◼
►
- Yeah and this is why I decided to start with
00:30:48
◼
►
what I thought would probably be the hardest part,
00:30:50
◼
►
which is like this big structural navigation.
00:30:52
◼
►
So like where SwiftUI I think shines
00:30:55
◼
►
and has shown, yeah, has shown since it was introduced
00:30:59
◼
►
for the most part is in the design of single screens.
00:31:03
◼
►
When you have just a screen, a view,
00:31:06
◼
►
laying that out with SwiftUI is awesome.
00:31:08
◼
►
Where SwiftUI I think has had a lot of challenges
00:31:11
◼
►
is in navigation, presentation, modal,
00:31:15
◼
►
like all the things where you are changing screens,
00:31:18
◼
►
you are structuring multiple screen things
00:31:20
◼
►
or navigational patterns and directions,
00:31:22
◼
►
That kind of stuff, it has had a very hard time with
00:31:26
◼
►
and I don't yet know if we're out of the woods on that.
00:31:28
◼
►
But I decided, let me start with that
00:31:30
◼
►
because if I can get that right,
00:31:32
◼
►
then I will be much further along
00:31:35
◼
►
on the path towards my goal of being all SwiftUI.
00:31:38
◼
►
I would love if, whenever this crazy UI project is done,
00:31:43
◼
►
maybe, I don't know, a year from now,
00:31:45
◼
►
I would love if I can say this whole new branch of the app
00:31:49
◼
►
now that's using this is all SwiftUI.
00:31:52
◼
►
That would be great, I would love to get there.
00:31:54
◼
►
I don't know that I can yet.
00:31:56
◼
►
I mean, and you know, all might have an asterisk like,
00:31:59
◼
►
you know, the AirPlay view doesn't have a SwiftUI thing,
00:32:01
◼
►
so I had to wrap that, but you know, other,
00:32:02
◼
►
like, for the most part, I want as much of it as possible
00:32:05
◼
►
to be SwiftUI, 'cause that's the goal here.
00:32:09
◼
►
And so, and again, I'm willing to give up certain details
00:32:12
◼
►
of how things look and work in order to get there.
00:32:16
◼
►
But I gotta find out if what I want is even possible.
00:32:19
◼
►
And so far, it's just wall after wall after wall.
00:32:23
◼
►
But I have made some progress.
00:32:26
◼
►
And so I'm happy about that.
00:32:27
◼
►
And I'm motivated to keep going.
00:32:29
◼
►
Sounds like when you wanted to make an app with no setting
00:32:32
◼
►
I feel like you need to be a little bit
00:32:33
◼
►
looser on these edicts that you put before yourself.
00:32:36
◼
►
Making an app with the navigation skeleton
00:32:38
◼
►
entirely in UIKit but all your views are SwiftUI,
00:32:41
◼
►
that's perfectly fine.
00:32:43
◼
►
It will cause you fewer headaches.
00:32:44
◼
►
And you can so easily convert that down the line,
00:32:46
◼
►
because every one of those SwiftUI views is easy to take
00:32:49
◼
►
and shove into a Swift UI thing.
00:32:51
◼
►
That's her point.
00:32:52
◼
►
- I mean, that's my fallback ultimately.
00:32:54
◼
►
If I have to, like that's why today I started playing
00:32:56
◼
►
with the just embedding a UI split view.
00:32:58
◼
►
Like if I have to do that fine,
00:33:01
◼
►
I would just really rather not.
00:33:03
◼
►
Like if I can--
00:33:04
◼
►
- And you'd be making an upgrade
00:33:05
◼
►
'cause you'd be getting rid of all the objective C code
00:33:06
◼
►
and doing it in Swift and you think that's not a big deal,
00:33:08
◼
►
it's like well, who cares?
00:33:09
◼
►
You know, UIKit in Swift versus UIKit in Objective-C,
00:33:12
◼
►
it's so much less code, it's so much nicer,
00:33:13
◼
►
you'll be very happy.
00:33:14
◼
►
I think you should just do that.
00:33:16
◼
►
- Sure, and again, like,
00:33:17
◼
►
and I wrote the Objective-C code 10 years,
00:33:20
◼
►
eight years ago, whatever it was,
00:33:21
◼
►
I wrote that a long time ago where some of that,
00:33:24
◼
►
first of all, I've gotten better as a programmer,
00:33:25
◼
►
so some of that I would just write better.
00:33:27
◼
►
Second of all, a lot of it now has newer methods
00:33:30
◼
►
that would use less code no matter which language
00:33:32
◼
►
I'm doing it in.
00:33:33
◼
►
So I could say things there, but ultimately,
00:33:36
◼
►
anything that I'm, if I'm at this level here,
00:33:40
◼
►
doing basics of navigation structure,
00:33:42
◼
►
if I have to wrap UIKit and call into it from SwiftUI
00:33:46
◼
►
and stuff or vice versa, to me that is technical debt.
00:33:49
◼
►
That I know I'll have to repay that down the road
00:33:52
◼
►
at some point if I leave it in.
00:33:53
◼
►
So let me take a bit of extra time now and see,
00:33:57
◼
►
can I get away without this?
00:33:59
◼
►
Can't like, what can I do here?
00:34:01
◼
►
Can I maybe not wrap this?
00:34:03
◼
►
And then I can see, you know,
00:34:06
◼
►
I'm willing to spend some time up front now
00:34:09
◼
►
and have one very ranty podcast pre-show
00:34:12
◼
►
to avoid possibly having to rewrite this stuff
00:34:14
◼
►
in three to five years.
00:34:17
◼
►
We are sponsored this week by the Stack Overflow Podcast.
00:34:22
◼
►
This was one of the first podcasts I ever listened to.
00:34:26
◼
►
It was something I would walk to work,
00:34:28
◼
►
back when I worked at Tumblr in Manhattan,
00:34:30
◼
►
and I was walking to work listening to this on my iPod
00:34:33
◼
►
before I even had an iPhone.
00:34:34
◼
►
And it's such a great podcast,
00:34:36
◼
►
and it really went through the history of the site.
00:34:38
◼
►
And now, they have matured and moved on so much,
00:34:41
◼
►
So over a dozen years, the Stack Overflow Podcast
00:34:45
◼
►
has continued to explore what it means to be a developer
00:34:49
◼
►
and how the art and practice of software engineering
00:34:51
◼
►
is changing our world.
00:34:53
◼
►
And they cover everything you might think
00:34:55
◼
►
for a developer podcast, Rails to React, Java to Node.
00:34:59
◼
►
Stack Overflow Podcast hosts important conversations
00:35:02
◼
►
and fascinating guests that will help you understand
00:35:04
◼
►
how technology is made and where it's headed.
00:35:07
◼
►
It's hosted by Ben Popper, Matt Kiernanter,
00:35:10
◼
►
Cassidy Williams and Ciora Ford,
00:35:12
◼
►
and it is your home for all things code.
00:35:15
◼
►
With new episodes dropping twice a week,
00:35:17
◼
►
check out the Stack Overflow podcast.
00:35:18
◼
►
This is a great podcast, it's been there forever,
00:35:21
◼
►
basically, in podcasting terms.
00:35:23
◼
►
Now that I kind of feel old now,
00:35:24
◼
►
but the Stack Overflow podcast is just great.
00:35:27
◼
►
We all love Stack Overflow, it's an amazing site
00:35:29
◼
►
and amazing resource for programmers.
00:35:30
◼
►
And the podcast is what you'd expect from them,
00:35:33
◼
►
from the team that made that.
00:35:35
◼
►
It is that good.
00:35:36
◼
►
So check it out yourself, Stack Overflow podcast.
00:35:39
◼
►
It's available in every podcast app.
00:35:41
◼
►
Wherever you get your podcasts,
00:35:43
◼
►
go get the Stack Overflow podcast.
00:35:45
◼
►
Subscribe today.
00:35:46
◼
►
Thank you so much to the Stack Overflow podcast
00:35:48
◼
►
for talking in my ears for a very long time,
00:35:51
◼
►
over a very long time.
00:35:52
◼
►
It's just wonderful.
00:35:53
◼
►
And for sponsoring our show.
00:35:55
◼
►
- All right, let's start the show.
00:36:00
◼
►
Very quickly, there is an alternative piehole workaround.
00:36:03
◼
►
Last week I had spoken about how I'd gotten a tip--
00:36:05
◼
►
- Still funny.
00:36:06
◼
►
- Still funny.
00:36:07
◼
►
a tip about how Safari will occasionally stall as it's ostensibly going and doing things with
00:36:13
◼
►
iCloud private relay and you can uncheck the hide my stuff in the Safari preferences to get it to
00:36:19
◼
►
work better. A lot of people wrote in and said that you could add, and I'll put this in the show notes,
00:36:23
◼
►
block_icloud_pr=false in pihole-ftl.conf and supposedly that'll fix all your problems for
00:36:32
◼
►
for all of your clients across your network.
00:36:35
◼
►
I tried this and perhaps here again,
00:36:37
◼
►
I'm falling back on user error,
00:36:38
◼
►
but for what it's worth, it did not work for me.
00:36:42
◼
►
So your mileage may vary,
00:36:43
◼
►
but it is something you can check out
00:36:45
◼
►
and I will put a link in,
00:36:46
◼
►
or I'm not gonna put a link in the show notes,
00:36:47
◼
►
but I will put the relevant stuff in the show notes.
00:36:50
◼
►
So you might wanna give that a shot.
00:36:53
◼
►
Hey Marco, you wanna talk about SwiftUI?
00:36:56
◼
►
- That's a great way to speed through a show.
00:36:59
◼
►
- It'll be really quick.
00:37:00
◼
►
I just have a few minutes of content on SwiftUI.
00:37:02
◼
►
- Yeah, well actually I didn't put this in here,
00:37:04
◼
►
I think Jon did.
00:37:04
◼
►
So Jon, tell us about switching between SwiftUI's
00:37:06
◼
►
HStack and VStack.
00:37:07
◼
►
- Yeah, we should talk about SwiftUI's topic,
00:37:09
◼
►
we don't cover enough on the show.
00:37:13
◼
►
This is, last week I was complaining about SwiftUI,
00:37:16
◼
►
and mentioned one of the problems I was having
00:37:19
◼
►
and the various hacks I was using to work around it,
00:37:21
◼
►
and like clockwork, Swift by Sundell,
00:37:24
◼
►
the great website that has lots of good tips on Swift
00:37:26
◼
►
and SwiftUI, posted an article that has a solution
00:37:30
◼
►
to my problem, which was I wanted to, you know,
00:37:33
◼
►
sometimes I want to use a VStack,
00:37:34
◼
►
sometimes I want to use an HStack,
00:37:37
◼
►
and this was all before a view that fits or whatever.
00:37:40
◼
►
And I tried writing something myself
00:37:42
◼
►
that would switch between them, it was a pain,
00:37:44
◼
►
so I ended up just doing a conditional, which is not ideal,
00:37:46
◼
►
'cause then I have to, you know, copy the code into a sub,
00:37:49
◼
►
and then, anyway.
00:37:49
◼
►
But he's got an article on how to do just that,
00:37:54
◼
►
and I ended up writing something a little bit different
00:37:56
◼
►
than what he made, because my needs
00:37:57
◼
►
are a little bit different.
00:37:58
◼
►
So now in my app I have a thing called HStack or VStack that I call instead of calling VStack
00:38:05
◼
►
and HStack in conditionals.
00:38:07
◼
►
So I was happy about that and if you were wondering how to do it, check out the article.
00:38:11
◼
►
All right, so you said that you have some improvements about conditionals in your if
00:38:17
◼
►
modifier and I'd like to know about that, but before we do, I'd like everyone, if it's
00:38:22
◼
►
safe and if you can, and maybe Marco put a screenshot in the chapter art.
00:38:27
◼
►
If you could please click the link to the gist
00:38:30
◼
►
that John has provided.
00:38:33
◼
►
What in the name of Zeus's butthole is going on?
00:38:37
◼
►
- I don't use cuddled elses.
00:38:38
◼
►
I think we've talked about it before.
00:38:39
◼
►
Cuddled elses are bad.
00:38:41
◼
►
- You are a monster.
00:38:42
◼
►
Look at line six and seven.
00:38:43
◼
►
- Cuddled elses are very, very bad.
00:38:46
◼
►
- What is this insanity?
00:38:47
◼
►
If you're gonna do it this way,
00:38:49
◼
►
then you should put the open bracket from line four
00:38:52
◼
►
on its own line and the open bracket from line seven
00:38:54
◼
►
on its own line. - I used to do it that way,
00:38:55
◼
►
but I slowly got converted over the years
00:38:56
◼
►
to doing it this way.
00:38:58
◼
►
- So you've chosen the worst of all worlds.
00:39:00
◼
►
- No, this is just normal.
00:39:01
◼
►
This is the bog standard fat part of the bell curve.
00:39:06
◼
►
Everybody formats their code like this.
00:39:08
◼
►
- Cuddled elses.
00:39:09
◼
►
- No, you're a monster.
00:39:10
◼
►
- Yes, cuddled elses are weird and nobody,
00:39:12
◼
►
and I can tell you having a long career in development
00:39:14
◼
►
in many different languages,
00:39:15
◼
►
nobody wanted to do BSD braces like I did.
00:39:17
◼
►
And I held onto them for a really long time
00:39:19
◼
►
for about half my career,
00:39:20
◼
►
but then eventually I was defeated by everybody else
00:39:22
◼
►
who wanted to do Kano.
00:39:23
◼
►
- Wait, which one is BSD braces?
00:39:24
◼
►
- BSD braces is where the open and the close
00:39:26
◼
►
on the same column.
00:39:27
◼
►
- Oh yeah, okay, yeah, I used to be devouted that as well,
00:39:29
◼
►
and I also lost that fight.
00:39:31
◼
►
- I couldn't hold onto that, I was defeated by the masses.
00:39:33
◼
►
- Yep, yep, yep. - It was just too much.
00:39:35
◼
►
But then the K and R is what you see here,
00:39:36
◼
►
where the open one comes after the if,
00:39:38
◼
►
and the closed one is online by itself.
00:39:40
◼
►
And no, no cuddled elses.
00:39:41
◼
►
Cuddled elses are in the vast minority,
00:39:43
◼
►
and they're bad, and you should not use them.
00:39:45
◼
►
- Okay. - Disagree.
00:39:46
◼
►
- Do me a favor, do me a favor, listeners.
00:39:48
◼
►
If you think cuddled elses are okay,
00:39:51
◼
►
@Syracuse on Twitter, you go ahead and tell him
00:39:53
◼
►
how wrong he is, because he is very wrong.
00:39:56
◼
►
- And to be clear, this is when the closed brace
00:39:59
◼
►
of the previous, of the if clause is on the same line
00:40:01
◼
►
as the else and the open brace.
00:40:02
◼
►
So it goes closed brace, else, open brace,
00:40:04
◼
►
all in one line, right?
00:40:06
◼
►
- Correct. - I know people like it,
00:40:07
◼
►
but they're in the minority and they're wrong, so oh well.
00:40:10
◼
►
- No, Jon, no, this is insanity.
00:40:13
◼
►
Either go with BSD or cuddle the elses,
00:40:16
◼
►
don't do this halfway nonsense, this is bananas.
00:40:19
◼
►
- They need to feel loved, Jon.
00:40:21
◼
►
- It's not halfway, it's just the normal way.
00:40:23
◼
►
I'm telling you, having read so many other people's code
00:40:27
◼
►
and worked with so many different programmers,
00:40:29
◼
►
literally thousands of other programmers I have worked with
00:40:32
◼
►
and looked at their code over the course of my career,
00:40:34
◼
►
and I can tell you that the style you see here
00:40:36
◼
►
is the most common across all languages,
00:40:38
◼
►
all time, all decades, ever, ever.
00:40:40
◼
►
Everything else that deviates from that
00:40:43
◼
►
is an idiosyncrasy that is in the minority.
00:40:45
◼
►
- Well, of the tens of programmers I've ever worked with
00:40:48
◼
►
or seen their code, they disagree.
00:40:51
◼
►
- Yeah, I have been a professional developer
00:40:53
◼
►
for almost 20 years, I have never in my life
00:40:56
◼
►
seen this monstrosity that I'm looking at right now.
00:40:59
◼
►
Not once. - It's all over
00:41:00
◼
►
Apple's codes, not everyone calls it Cuddled Elses.
00:41:01
◼
►
- No it is not, no it is not.
00:41:03
◼
►
It's either, what did you call it?
00:41:04
◼
►
BSD or it's Cuddled Elses.
00:41:06
◼
►
It's this in between. - You saw BSD and Apple code,
00:41:07
◼
►
I don't see that anywhere.
00:41:08
◼
►
- No, what did you call it?
00:41:09
◼
►
What's the, yeah, oh, the, yeah, BSD.
00:41:11
◼
►
- Yeah, BSD braces, where they open and close
00:41:12
◼
►
are on some common refill, I and F.
00:41:15
◼
►
- Yeah, I don't think I see that in Apple's code necessarily
00:41:17
◼
►
but the only things I've seen reliably, professionally
00:41:21
◼
►
is either BSD or Cuddled Elses.
00:41:22
◼
►
This nonsense, I cannot stand it.
00:41:25
◼
►
I cannot abide.
00:41:26
◼
►
Anyway, moving on.
00:41:27
◼
►
Tell me about your awful looking
00:41:29
◼
►
but otherwise functional if modifier.
00:41:31
◼
►
- Yeah, so last week I had a little if modifier.
00:41:33
◼
►
It's like in the desperation of Swift UI.
00:41:35
◼
►
You can't get it to do what you want.
00:41:36
◼
►
You just need some way to do one thing
00:41:39
◼
►
and then something else
00:41:39
◼
►
and you can't just write straight up code
00:41:40
◼
►
because that big chain of modifiers
00:41:42
◼
►
is not regular Swift code.
00:41:45
◼
►
It is in fact a chain of calls.
00:41:47
◼
►
What can you do there?
00:41:49
◼
►
Well, you can make an if modifier and say,
00:41:50
◼
►
I'm tired of dealing with this.
00:41:51
◼
►
I can't figure out how to make this work.
00:41:52
◼
►
I'm just going to make a .if modifier,
00:41:54
◼
►
and it's really easy to do that.
00:41:55
◼
►
And I posted a code for that last week.
00:41:57
◼
►
So a couple of people said you can
00:41:59
◼
►
make that code more efficient so you
00:42:01
◼
►
don't have to wrap everything in any view
00:42:04
◼
►
if you just use the view builder directive.
00:42:06
◼
►
So that's the new version that we're talking about here.
00:42:08
◼
►
You can take a look at it.
00:42:09
◼
►
We'll put a link in the show notes.
00:42:10
◼
►
It's basically the same as the code
00:42:11
◼
►
of last week with just a couple of extra view builder
00:42:13
◼
►
annotations and no more any view wrapping for stuff.
00:42:16
◼
►
But the real problem is that any time you
00:42:19
◼
►
do this type of conditional, Swift UI
00:42:21
◼
►
has a more difficult time figuring out
00:42:24
◼
►
how to animate between states because it can't sort of see
00:42:28
◼
►
into the if, right?
00:42:30
◼
►
And the return value from the if is different,
00:42:32
◼
►
depending on which branch takes or whatever.
00:42:34
◼
►
And so the suggestion for many people
00:42:35
◼
►
was don't do that instead.
00:42:38
◼
►
Lots of SwiftUI directives, if you pass them nil or something,
00:42:42
◼
►
they basically become no ops.
00:42:44
◼
►
And so then you just do like a ternary operator
00:42:46
◼
►
or something within the argument list
00:42:48
◼
►
and say if some condition is set, nil.
00:42:50
◼
►
otherwise do the thing.
00:42:51
◼
►
And then you just have a regular chain with no conditionals
00:42:54
◼
►
and each one of those, each thing in the chain,
00:42:56
◼
►
you just have like, you know, some argument or something
00:42:58
◼
►
that says should this be a no op
00:43:00
◼
►
or should it actually do something?
00:43:01
◼
►
And Swift finds it easier to transition between states
00:43:04
◼
►
if you do that.
00:43:05
◼
►
So I played with this.
00:43:07
◼
►
I did actually end up expunging all of the .ifs
00:43:09
◼
►
from my entire code base.
00:43:11
◼
►
And I have to say, after I finished that,
00:43:13
◼
►
the code is less clear.
00:43:15
◼
►
Like I can squint at it and say, yeah,
00:43:17
◼
►
this used to be a thing where I did if this
00:43:20
◼
►
this big long of modifiers, right?
00:43:22
◼
►
And now it is just this big long thing of modifiers.
00:43:24
◼
►
But every modifier is a different way
00:43:27
◼
►
to tell it to be a no op.
00:43:30
◼
►
Some of them don't have any good way
00:43:31
◼
►
to tell them to be a no op,
00:43:32
◼
►
so you have to do these weird hacks, right?
00:43:34
◼
►
If you looked at my code now,
00:43:36
◼
►
it would be hard for you to tell,
00:43:37
◼
►
especially if I spread the lines out a little bit,
00:43:39
◼
►
it would be hard for you to tell
00:43:41
◼
►
what used to be in an if.
00:43:42
◼
►
It is, it makes less sense, it reads less clearly
00:43:45
◼
►
than before when it was .if
00:43:47
◼
►
and then a whole bunch of stuff indented or whatever.
00:43:49
◼
►
So that's a little disappointing, but all that said,
00:43:52
◼
►
and I don't know the details of why the .if
00:43:54
◼
►
confuses SwiftUI, but I do know more than I ever wanted
00:43:57
◼
►
to know about how SwiftUI behaves when transitioning
00:44:02
◼
►
between states where it can't figure out
00:44:05
◼
►
what the relationship between the states is.
00:44:07
◼
►
I don't wanna talk more about dev stuff
00:44:10
◼
►
'cause we already had a big dev conversation,
00:44:11
◼
►
but briefly, I basically got a list
00:44:14
◼
►
and then I've got, it changes state to a list
00:44:16
◼
►
with either one more item or one fewer item.
00:44:18
◼
►
And to a human, it's really easy to see what changed.
00:44:20
◼
►
Oh, what changed?
00:44:21
◼
►
This item was added.
00:44:21
◼
►
Oh, what changed?
00:44:22
◼
►
This item was removed, right?
00:44:23
◼
►
So you would think that any kind of animation
00:44:26
◼
►
between those states, it'd be really simple
00:44:28
◼
►
to say something about, oh, the thing that was added,
00:44:30
◼
►
I want it to slowly fade in,
00:44:32
◼
►
or I want it to grow from being small to big, right?
00:44:35
◼
►
But SwiftUI, especially given the mess
00:44:37
◼
►
I've already had to make with it,
00:44:38
◼
►
has no idea how those states relate to each other.
00:44:40
◼
►
So it does some random animation.
00:44:42
◼
►
It's like, what are you even doing, right?
00:44:44
◼
►
Because in reality, what I'm giving it to,
00:44:47
◼
►
especially with things passed by value,
00:44:48
◼
►
it's getting an entirely new list.
00:44:50
◼
►
It just so happens that the new list is exactly the same
00:44:52
◼
►
as the old list with the exception of one item,
00:44:54
◼
►
but SwiftUI can't figure that out.
00:44:56
◼
►
So what I ended up doing,
00:44:57
◼
►
speaking of things that are less clear than they were,
00:44:59
◼
►
is the diffing that the SwiftUI does is a diffing for you.
00:45:02
◼
►
You just give it the list and it will be able to diff them
00:45:05
◼
►
and know what's changed or whatever.
00:45:07
◼
►
That works great until you wanna animate it
00:45:09
◼
►
and then you realize it has no idea about this.
00:45:11
◼
►
So now I have to do the diffing outside of the SwiftUI.
00:45:15
◼
►
I have my model, and instead of my model being real simple,
00:45:18
◼
►
like, oh, here's SwiftUI, here's the list of things.
00:45:20
◼
►
Oh, here's a new list of things.
00:45:22
◼
►
And it's the same as the old list, my plus or minus one.
00:45:24
◼
►
Works great until you animate it.
00:45:25
◼
►
Now what I have to do is on the outside,
00:45:28
◼
►
take the old list and the new list,
00:45:29
◼
►
and figure out how to mutate the old list
00:45:31
◼
►
so that it looks like the new list
00:45:33
◼
►
so that SwiftUI isn't confused about how it changed
00:45:35
◼
►
because it is literally the same objects
00:45:37
◼
►
except for the one I added or the one I removed.
00:45:39
◼
►
And that was extremely frustrating.
00:45:41
◼
►
It made my code much uglier,
00:45:43
◼
►
And the whole idea of, like, you know,
00:45:45
◼
►
SwiftUI's internals diffing the data structures
00:45:46
◼
►
and animating them,
00:45:48
◼
►
apparently if you do enough fancy stuff,
00:45:50
◼
►
SwiftUI gets confused about what's what
00:45:51
◼
►
and can't animate between the states.
00:45:53
◼
►
So that was part of why I totally removed this .if thing
00:45:56
◼
►
from my code to see if that was the problem.
00:45:58
◼
►
Nope, that wasn't the problem.
00:45:59
◼
►
But anyway, I left it removed.
00:46:01
◼
►
But if you're interested,
00:46:02
◼
►
there's a bunch of other links we'll put in the show.
00:46:05
◼
►
It's about why that .if conditional is not a great idea.
00:46:09
◼
►
And then there's also a link to a WWDC 2021 session
00:46:13
◼
►
that talks about the internals
00:46:14
◼
►
that explains this a little bit.
00:46:16
◼
►
- Yeah, and I think the short-shore version is
00:46:18
◼
►
because these are all not pass by reference,
00:46:21
◼
►
but pass by value,
00:46:22
◼
►
it just has to like look at the structure of everything
00:46:25
◼
►
in order to figure out, okay, what's the same,
00:46:27
◼
►
what's different?
00:46:28
◼
►
And with this if modifier, you're changing the structure.
00:46:31
◼
►
You know, what's being returned is a different type
00:46:33
◼
►
than what it would have been otherwise.
00:46:35
◼
►
And that's what screws everything up.
00:46:36
◼
►
So yeah, that objective-c.io post is really good
00:46:39
◼
►
John, tell me about macOS support lifetime.
00:46:41
◼
►
Should I get my tinfoil hat out?
00:46:43
◼
►
-We talked about this, I think, last week,
00:46:45
◼
►
about macOS Ventura dropping support for older Macs,
00:46:49
◼
►
and, you know, how -- what's the worst-case scenario?
00:46:52
◼
►
Like, you could have bought a Mac recently,
00:46:54
◼
►
and now you can't even upgrade to the latest OS.
00:46:57
◼
►
So, Ars Technica did a good article
00:46:59
◼
►
about what has it been like over the past few decades
00:47:03
◼
►
in terms of support for OS updates.
00:47:05
◼
►
If you buy a Mac, how long after you buy a Mac
00:47:08
◼
►
How long after you buy that Mac can you continue to install the latest version of Mac OS?
00:47:12
◼
►
And they did some graphs here and the graphs are pretty unsurprising if you take a look
00:47:19
◼
►
If you know any Apple history you'll see it's basically two humps like a camel.
00:47:21
◼
►
There's a big hump and then a dip and then another hump, right?
00:47:24
◼
►
What's going on with that dip around 2005-ish?
00:47:27
◼
►
That was the Intel transition.
00:47:29
◼
►
And so now fast forwarding to modern day, we're going through the ARM transition now.
00:47:34
◼
►
It doesn't surprise me that there's a dip.
00:47:36
◼
►
The big dip in 2005 was not just Intel transition,
00:47:39
◼
►
but also 32-bit to 64-bit.
00:47:40
◼
►
So it's kind of a double whammy around that same
00:47:43
◼
►
couple year span there.
00:47:44
◼
►
So we're still dipping now.
00:47:46
◼
►
And if you want to know what the values are,
00:47:47
◼
►
like the low of from introduction for Mac's release
00:47:51
◼
►
between 1998 and 2026, the low of 4.13 years
00:47:56
◼
►
is how long you got Mac up,
00:47:57
◼
►
how long you could install the latest version of macOS.
00:48:00
◼
►
And the high is around like 8.13 years or whatever.
00:48:04
◼
►
So I don't think it's surprising that the ARM transition
00:48:07
◼
►
is cutting off some Macs.
00:48:08
◼
►
I think it is,
00:48:09
◼
►
I mean, you would say it was disappointing,
00:48:12
◼
►
but honestly, as someone who,
00:48:13
◼
►
I mean, I'm still using an Intel Mac now,
00:48:15
◼
►
I would much prefer Apple to concentrate entirely
00:48:18
◼
►
on ARM Macs and not worry about Intel Macs
00:48:22
◼
►
after a reasonable point.
00:48:23
◼
►
And if you look at the levels that we're approaching
00:48:25
◼
►
these days, it's not even down to the levels
00:48:28
◼
►
it was during the Intel transition.
00:48:29
◼
►
It's just lower than it was.
00:48:31
◼
►
We went a couple of years where there was no,
00:48:34
◼
►
you know, where macOS didn't drop any supported Macs,
00:48:37
◼
►
and now we're kind of catching up for lost time here.
00:48:39
◼
►
So I don't think it's that bad,
00:48:40
◼
►
but if you wanna look at the details in a bunch of graphs,
00:48:42
◼
►
check out the article.
00:48:43
◼
►
- Good talk.
00:48:46
◼
►
All right, do you wanna tell me about the benefits
00:48:47
◼
►
of IPv6, please, and thank you.
00:48:48
◼
►
- It's a long time ago when we were,
00:48:50
◼
►
I think Marco was asking,
00:48:51
◼
►
do I have to understand IPv6?
00:48:52
◼
►
Why would I wanna do that?
00:48:54
◼
►
You know, maybe you're--
00:48:55
◼
►
- I'm too busy breaking my brain with Swift UI.
00:48:57
◼
►
I need to like kick some stuff out.
00:48:58
◼
►
I need to evict some things out of my cache.
00:49:01
◼
►
Yeah, should I add this?
00:49:05
◼
►
Is this something I need to add?
00:49:07
◼
►
What benefits are there other than being able to talk
00:49:09
◼
►
to other clients that use IPv6?
00:49:11
◼
►
And Dan Chandler wrote in to say,
00:49:12
◼
►
"IPv6 has a number of features that greatly enhance
00:49:14
◼
►
the security of online communications.
00:49:16
◼
►
When IPv4 was created, it was assumed
00:49:18
◼
►
that only a small number of systems
00:49:19
◼
►
would ever be connected and that at some level,
00:49:21
◼
►
trust would be assumed.
00:49:22
◼
►
IPv6 addresses the reality of today's internet
00:49:24
◼
►
as a hostile environment.
00:49:25
◼
►
IPv6 is much more secure than IPv4 for a lot of reasons."
00:49:28
◼
►
And I'll put a link in the show notes
00:49:29
◼
►
that lists some of those reasons.
00:49:30
◼
►
Here's just a couple of them from that article.
00:49:32
◼
►
Mandatory use of IPsec, authentication header,
00:49:35
◼
►
which provides authentication for data integrity
00:49:37
◼
►
for the entire IPv6 packet.
00:49:39
◼
►
If an endpoint receives a packet with specific source address,
00:49:41
◼
►
it can be assured that a packet did indeed
00:49:43
◼
►
come from that IP address.
00:49:44
◼
►
This may sound weird to you
00:49:45
◼
►
if you don't know how IPv4 works,
00:49:47
◼
►
but the idea that you can just lie
00:49:49
◼
►
and say that the source of this packet is not what it was
00:49:53
◼
►
is a thing you can do,
00:49:54
◼
►
because if you don't have any kind of data integrity
00:49:57
◼
►
where you can prove that you are,
00:49:59
◼
►
that the source really is authentic.
00:50:00
◼
►
It's really easy to change that stuff.
00:50:02
◼
►
Well, not really easy, but it's possible, which is scary.
00:50:05
◼
►
And then finally there's a ESP,
00:50:07
◼
►
encapsulating security payload.
00:50:08
◼
►
No one else, not even the intended receiver,
00:50:10
◼
►
can read the content of the communication in transit.
00:50:13
◼
►
So yeah, if you look at this, you see all these features
00:50:16
◼
►
and you think, IPv4 doesn't have those?
00:50:19
◼
►
You can change the source.
00:50:20
◼
►
Anyone can read the content.
00:50:22
◼
►
IPsec is not required.
00:50:24
◼
►
It's kind of like if we were using the web
00:50:26
◼
►
and you never saw HTTPS, not quite the same thing,
00:50:29
◼
►
not quite that bad, but yeah, IPv6 was made late enough
00:50:34
◼
►
that they understood that not having these features
00:50:36
◼
►
is a really bad idea.
00:50:37
◼
►
IPv4 was made more in the sort of academic days
00:50:41
◼
►
where it was assumed that everyone would trust each other
00:50:43
◼
►
and be nice and yeah, they didn't quite understand
00:50:46
◼
►
what the internet would become back then.
00:50:48
◼
►
- We are sponsored this week by Hover,
00:50:51
◼
►
a great place to buy a domain name.
00:50:54
◼
►
Hover is a jumping off point for tons of entrepreneurs.
00:50:57
◼
►
And Hover wants you to start your next business,
00:51:00
◼
►
the same way I do, with a great domain name.
00:51:03
◼
►
They have over 300 domain name extensions
00:51:05
◼
►
to choose from at Hover, so you can build your brand online
00:51:09
◼
►
with exactly what you want to say.
00:51:11
◼
►
No matter what you want to build,
00:51:12
◼
►
there is a domain name waiting for it.
00:51:14
◼
►
Hover has excellent technical support available
00:51:16
◼
►
to help you get started, answer any questions you might have,
00:51:19
◼
►
and this support team doesn't try to upsell you.
00:51:21
◼
►
They just want to get you online and get you going.
00:51:23
◼
►
and they give you all sorts of great stuff with Hover.
00:51:25
◼
►
Free, Whois privacy protection,
00:51:27
◼
►
a super clean and pleasant UI,
00:51:30
◼
►
and they also have monthly sales on popular TLDs.
00:51:33
◼
►
So no wonder Hover is such a popular choice
00:51:36
◼
►
for people starting all kinds of businesses
00:51:37
◼
►
and personal sites.
00:51:38
◼
►
I personally have used Hover for many, many years now,
00:51:42
◼
►
and it's just a pleasant experience
00:51:44
◼
►
to buy management domains there.
00:51:46
◼
►
At no point is it ever fighting you.
00:51:48
◼
►
They have a great search, too.
00:51:49
◼
►
They probably have the best search I've ever seen,
00:51:51
◼
►
'cause sometimes exactly the name you want
00:51:53
◼
►
might not be available, but the search can reveal
00:51:56
◼
►
a lot of possibilities that are available to you.
00:51:58
◼
►
And they just have great search there,
00:52:00
◼
►
great management panel once you get there,
00:52:02
◼
►
great pricing, very competitive.
00:52:04
◼
►
So it's a great domain name registrar.
00:52:07
◼
►
And if you need a domain name for anything,
00:52:09
◼
►
I strongly recommend Hover.
00:52:10
◼
►
They have email stuff as well, I've done that there as well.
00:52:12
◼
►
Great experiences all around for the many years
00:52:14
◼
►
that I've been with them.
00:52:15
◼
►
So get your next domain name and many more
00:52:18
◼
►
at hover.com/atp.
00:52:20
◼
►
You can get a 10% discount with that referral link
00:52:23
◼
►
on all new purchases.
00:52:25
◼
►
Once again, hover.com/ATP for 10% off all new purchases.
00:52:30
◼
►
Make a name for yourself with Hover.
00:52:33
◼
►
- Let's talk about the belated birthday gift
00:52:41
◼
►
that Apple has given Mr. Marco Arment.
00:52:45
◼
►
Marco, how excited are you?
00:52:47
◼
►
Because apparently, Johnny Ive is completely done with Apple
00:52:50
◼
►
and Apple's completely done with Ive.
00:52:52
◼
►
- I've known for a while, well, you know, quote, known.
00:52:55
◼
►
We've heard for a while that Johnny's involvement
00:52:59
◼
►
in actual product design was not even that significant,
00:53:04
◼
►
even when he was still officially working there
00:53:07
◼
►
for the last few years.
00:53:08
◼
►
That basically, like, he, it seemed from most reports
00:53:12
◼
►
that he was really getting burnt out,
00:53:15
◼
►
and also, I think, bored with computers,
00:53:17
◼
►
and as designy people tend to do,
00:53:19
◼
►
you know, that you wanna move on,
00:53:21
◼
►
design new kinds of things at some point.
00:53:23
◼
►
And so apparently, the rumors seem to all be,
00:53:26
◼
►
you know, coalescing on that he was
00:53:29
◼
►
very involved in Apple Park, you know, the building,
00:53:32
◼
►
and lots of little details about the building,
00:53:34
◼
►
and like the furniture, and the door handles,
00:53:36
◼
►
and all this stuff.
00:53:37
◼
►
And that was, I mean, that was years of, you know,
00:53:41
◼
►
involvement there, where he seemed to be stepping away
00:53:45
◼
►
from the products, like, slowly.
00:53:47
◼
►
he was apparently not super involved.
00:53:51
◼
►
And so then by the time that his official announcement
00:53:55
◼
►
that he was actually leaving to go form his own consultancy,
00:53:58
◼
►
by the time that announcement came out,
00:54:00
◼
►
people in the know or people who in the room
00:54:03
◼
►
will seem to already be pretty sure
00:54:05
◼
►
that he wasn't really there that much to begin with
00:54:08
◼
►
by that point.
00:54:09
◼
►
He had checked out, he was burnt out,
00:54:11
◼
►
he wanted new challenges, he didn't seem to care
00:54:13
◼
►
that much about computers anymore,
00:54:14
◼
►
he'd been designing them forever.
00:54:16
◼
►
And I can't blame him, he wants a new thing after all that.
00:54:19
◼
►
Totally understandable.
00:54:20
◼
►
At the time though, Johnny's involvement in the company
00:54:23
◼
►
was fairly important to the company's image
00:54:25
◼
►
and to Wall Street.
00:54:26
◼
►
And in the same way, it was considered
00:54:29
◼
►
a very delicate matter as Steve Jobs' health declined.
00:54:34
◼
►
They were very careful with how they worded that
00:54:37
◼
►
when they revealed certain things to Wall Street
00:54:39
◼
►
and things like that because they knew that
00:54:41
◼
►
a sudden shock about Steve Jobs when he was a CEO
00:54:44
◼
►
would have been taken poorly by the stock market
00:54:47
◼
►
and the press and reputation, maybe the employees even.
00:54:51
◼
►
After Steve passed away and they managed that transition
00:54:54
◼
►
as well as they could given the circumstances,
00:54:57
◼
►
then Johnny was left and Johnny became
00:55:00
◼
►
the celebrity person of Apple
00:55:03
◼
►
to Wall Street and to the press for a while.
00:55:06
◼
►
Never as much as Steve was,
00:55:08
◼
►
but he was still very significant and important
00:55:10
◼
►
in a publicity sense.
00:55:12
◼
►
I think Johnny's exit was very, very padded and cushioned and couched and was very on
00:55:21
◼
►
message to follow this certain planned trajectory that I think overstated his role towards the
00:55:28
◼
►
end by quite a lot.
00:55:30
◼
►
Because I think the reality seems to point to that he wasn't really that involved towards
00:55:34
◼
►
the end of his time there.
00:55:36
◼
►
And I think when he finally did officially leave and go form this company, they had this
00:55:43
◼
►
party announcement like, "Oh, Johnny will continue consulting for Apple.
00:55:47
◼
►
Apple will be the first client of this new company."
00:55:49
◼
►
Or however they worded it.
00:55:51
◼
►
That I don't think was really ever going to be a thing.
00:55:54
◼
►
I think that was solely to continue the very soft exit of Johnny Ive so as not to upset
00:56:01
◼
►
Wall Street and the press and the analysts and everything else.
00:56:04
◼
►
And they did a masterful job of handling that in a way that nobody really freaked out, nobody
00:56:09
◼
►
was ever that surprised by any part of it.
00:56:12
◼
►
And I think this is just the final, like, "Alright, now we're really done."
00:56:15
◼
►
Now he's really 100% gone and no longer involved.
00:56:20
◼
►
Didn't they pay $100 million to his consulting company?
00:56:25
◼
►
I mean, that was part of the story, is that it wasn't just like, "Oh, you know, he's leaving
00:56:28
◼
►
to do his own thing and we'll still be working with them."
00:56:31
◼
►
It was actually, we'll still be working with them and we will pay them $100 million to
00:56:35
◼
►
continue to work with us, which, I mean, you could say, boy, that seems like a lot, but
00:56:39
◼
►
then again, Johnny Ive has quite a reputation and a resume, so if you were paying for him
00:56:42
◼
►
starting from nothing, you'd probably pay a similar amount, but to your point, if it
00:56:46
◼
►
really was to just kind of make the exit smooth and he was already kind of checked out, what
00:56:51
◼
►
did that $100 million buy you?
00:56:53
◼
►
I mean, maybe it protected your stock price from going down by a much, much greater amount,
00:56:58
◼
►
monetarily speaking, and absolute values, perhaps,
00:57:00
◼
►
but it just, part of the article is that it seemed like
00:57:03
◼
►
that the people who were still at Apple
00:57:04
◼
►
felt kind of bitter that they're,
00:57:06
◼
►
the outgoing person is getting $100 million
00:57:08
◼
►
when they're not actually doing any of the work
00:57:11
◼
►
and hadn't been for a while even when they were here.
00:57:13
◼
►
- And there's lots of different ways
00:57:14
◼
►
that $100 million thing could have come up.
00:57:16
◼
►
I mean, it could have just been like, you know,
00:57:18
◼
►
part of the transition that Johnny negotiated.
00:57:21
◼
►
I mean, by all accounts, once Steve was gone,
00:57:26
◼
►
Johnny became extremely politically powerful in the company.
00:57:30
◼
►
He basically could do whatever he wanted.
00:57:32
◼
►
And his say mattered a lot.
00:57:34
◼
►
He had tons of clout, tons of weight to his decisions
00:57:37
◼
►
and to his preferences and opinions and everything.
00:57:39
◼
►
I mean, as we've talked about, to a fault.
00:57:41
◼
►
Like that often resulted in bad decisions being made
00:57:44
◼
►
for the products or for the customers.
00:57:47
◼
►
Or maybe for the company in cases like this.
00:57:49
◼
►
And so who knows how he negotiated that
00:57:51
◼
►
or why they decided to do that.
00:57:53
◼
►
I'm sure it was to some degree mutual
00:57:55
◼
►
because of various transitional reasons,
00:57:58
◼
►
but I have a feeling it was always intended
00:58:01
◼
►
to be temporary and transitional,
00:58:03
◼
►
and that the idea was probably never
00:58:05
◼
►
to actually have this go indefinitely into the future.
00:58:08
◼
►
I bet this was a contract for a certain number of years,
00:58:11
◼
►
and I believe they reported it was
00:58:13
◼
►
for a certain number of years, it was up for renewal,
00:58:15
◼
►
and they decided not to renew it.
00:58:16
◼
►
I bet that was always the plan, really.
00:58:18
◼
►
And I don't think that would be a sudden surprise to Johnny.
00:58:21
◼
►
And by the way, and I think you're right, John,
00:58:23
◼
►
The design team now that's there now,
00:58:27
◼
►
led by Evans Hanke, who was formerly,
00:58:28
◼
►
I think she formerly basically ran the studio
00:58:31
◼
►
when Johnny was there too,
00:58:33
◼
►
but he was a level above her, managerially.
00:58:36
◼
►
But I think she'd been doing the work
00:58:37
◼
►
for a while before that.
00:58:39
◼
►
But she and her team deserve full credit
00:58:43
◼
►
for what they've done.
00:58:44
◼
►
They don't need the ghost of Johnny Ive,
00:58:47
◼
►
people thinking that Johnny had anything to do
00:58:49
◼
►
with all these awesome new products that we got,
00:58:50
◼
►
because he probably didn't.
00:58:52
◼
►
Maybe he glanced at the plans at some point,
00:58:55
◼
►
but chances are he didn't have much to do
00:58:57
◼
►
with anything that we see today out of Apple.
00:59:00
◼
►
- You keep saying this, but you're talking
00:59:01
◼
►
about hardware, right?
00:59:02
◼
►
But didn't they change Johnny to be the head
00:59:05
◼
►
of design for hardware and software?
00:59:08
◼
►
- They did, yes.
00:59:09
◼
►
- So who took over the software side of that?
00:59:11
◼
►
- Well, yeah, well that's Alan Dye,
00:59:13
◼
►
and I don't have a lot of nice things to say about Alan Dye,
00:59:15
◼
►
so I'm gonna leave that aside for now.
00:59:18
◼
►
But on the hardware side, their hardware design
00:59:21
◼
►
been excellent in the post-Johnny era, assuming that the Johnny era ended roughly when he
00:59:25
◼
►
officially left the company.
00:59:27
◼
►
Even though, again, it probably was a little bit before that, really.
00:59:30
◼
►
But anyway, assuming that he hasn't had much, if anything, to do with the company since
00:59:34
◼
►
then, the current design team deserves full credit.
00:59:39
◼
►
They don't need to be in any way in people's minds sharing credit with Johnny Ive over
00:59:44
◼
►
what they've done recently.
00:59:45
◼
►
Because they've done amazing work and they deserve to have that be theirs and 100% theirs,
00:59:50
◼
►
some guy who they probably never see anymore who gets a whole bunch of money from the company
00:59:56
◼
►
for some reason up until now only because of his past and not because of anything he's
01:00:01
◼
►
doing in the present. For the current design team, I see totally why they would probably
01:00:06
◼
►
be very in favor of ending this involvement. And even for Johnny Ive, you know, there was
01:00:11
◼
►
a thing in the article that said that Johnny, as part of the agreement, was precluded from
01:00:15
◼
►
from working on competing products.
01:00:17
◼
►
And Johnny loves cars.
01:00:21
◼
►
And Johnny, he doesn't even have some deal
01:00:23
◼
►
like where he's gonna work with Ferrari on something.
01:00:24
◼
►
- I think he already is.
01:00:25
◼
►
- Right, yeah, I think so too.
01:00:27
◼
►
So if that, maybe that was a bit of a friction point there,
01:00:31
◼
►
that if Apple is working on car stuff,
01:00:33
◼
►
they don't want Johnny to be working on cars
01:00:35
◼
►
if he's being contracted by Apple.
01:00:37
◼
►
That makes sense, that's reasonable.
01:00:40
◼
►
And I think Johnny should work with Ferrari,
01:00:42
◼
►
because that is exactly the kind of thing
01:00:44
◼
►
that esteemed high-end designers like him work on.
01:00:49
◼
►
They work on cars that look really cool
01:00:51
◼
►
that pretty much nobody buys,
01:00:53
◼
►
'cause they're not gonna design like the next Toyota.
01:00:56
◼
►
That's neither what they want,
01:00:58
◼
►
nor does Toyota want them.
01:00:59
◼
►
Johnny should design a Ferrari.
01:01:01
◼
►
That is perfect, 'cause that lets him have
01:01:03
◼
►
his creative outlet that he wants
01:01:05
◼
►
and has earned in this new area.
01:01:08
◼
►
It's not gonna be a mass market thing,
01:01:09
◼
►
but it doesn't need to be, that's fine.
01:01:11
◼
►
He and Mark Newsome can work on the next Christmas tree
01:01:13
◼
►
you know, wherever, like, they can do stuff like that.
01:01:16
◼
►
That's great.
01:01:16
◼
►
That's the kind of stuff he probably wants to do now.
01:01:19
◼
►
And so to still be bound by anything from Apple,
01:01:23
◼
►
any restrictions or any, you know, tie to them,
01:01:26
◼
►
is not that great for him either.
01:01:28
◼
►
So I think this makes total sense.
01:01:30
◼
►
Like, this was clearly meant to be a transitional thing
01:01:34
◼
►
to ease anybody's possible fears about Johnny
01:01:37
◼
►
no longer being at Apple.
01:01:38
◼
►
That transition is over and it went great
01:01:41
◼
►
because the stock market didn't seem to care,
01:01:43
◼
►
analysts didn't seem to care,
01:01:45
◼
►
and the new people, well, the people at Apple
01:01:47
◼
►
who took over are doing a fantastic job
01:01:50
◼
►
in the hardware department.
01:01:51
◼
►
So this is all good news as far as I'm concerned.
01:01:55
◼
►
- I think it kind of helped that they had a bunch
01:01:56
◼
►
of really crappy computers during this transition
01:01:59
◼
►
so that now that those are gone,
01:02:00
◼
►
like, you can, you know, things are on an upswing, right?
01:02:04
◼
►
If everything had been fantastic,
01:02:06
◼
►
but then Johnny leaves and then things start going downhill,
01:02:10
◼
►
everyone would be upset instead,
01:02:11
◼
►
what we got was things started to go downhill, Johnny left, and then things started to pick
01:02:14
◼
►
up and now he's gone for good.
01:02:16
◼
►
Which I think is, you know, I mean, again, I thought that you're planning, you don't
01:02:19
◼
►
plan to make the butterfly keyboard, right?
01:02:21
◼
►
You don't plan to, you know, not put ports on your computers for years and years, but
01:02:25
◼
►
that's what they ended up doing and it made a lot of people upset.
01:02:29
◼
►
It's interesting with Ferrari or whatever, like, I mean, obviously those companies have
01:02:33
◼
►
a lot of money and there's cachet to them or whatever, but I've spent his entire career
01:02:38
◼
►
making things for the masses.
01:02:40
◼
►
Like, you know, the iPods and iPhones are not niche devices.
01:02:43
◼
►
They sold literally billions of them, right?
01:02:45
◼
►
There's not much more, that's more mass market than the iPod and the iPhone in terms of famous
01:02:52
◼
►
consumer products, right?
01:02:54
◼
►
And in most things I've read about him, especially early in his career, he was actually interested
01:02:59
◼
►
in making something, yes, something nice, but also something nice that regular people
01:03:05
◼
►
a lot of his presentation videos where he used to be
01:03:07
◼
►
in his little white world talking about products,
01:03:10
◼
►
you could see how excited he was to like,
01:03:12
◼
►
make something like the, you know, the iMac G4
01:03:15
◼
►
with the Chrome arm thing or whatever and say,
01:03:18
◼
►
"This computer, which isn't even one of our most expensive
01:03:20
◼
►
computers is going to go into the houses of regular people
01:03:24
◼
►
and they're going to have a beautiful object."
01:03:26
◼
►
He got excited about the iPods.
01:03:27
◼
►
Like, we made this iPod using these advanced techniques
01:03:31
◼
►
and look how beautiful it is.
01:03:32
◼
►
And everybody's gonna have one of these.
01:03:34
◼
►
You're just gonna go on the subway
01:03:35
◼
►
and you're gonna see 50 of them, right?
01:03:36
◼
►
And they're all like,
01:03:38
◼
►
that they're all nicer things than the average, you know,
01:03:42
◼
►
even similarly priced product, right?
01:03:44
◼
►
And I feel like he's always been excited about that.
01:03:46
◼
►
If you read some of his,
01:03:48
◼
►
read a couple of his biographies about
01:03:49
◼
►
designing pens and telephones, like not pre-smartphones,
01:03:53
◼
►
and you know, like just everyday objects,
01:03:54
◼
►
but also trying to make them just a little bit nicer
01:03:57
◼
►
than a typical plastic pen.
01:03:58
◼
►
It's still a plastic pen,
01:03:59
◼
►
but it's a plastic pen that,
01:04:01
◼
►
not through expensive materials or manufacturing,
01:04:03
◼
►
but just in your, just this choice of how it's constructed,
01:04:06
◼
►
it's a nicer pen for people to have at a similar price
01:04:09
◼
►
or maybe just a little bit more.
01:04:11
◼
►
So maybe he lost interest in that.
01:04:12
◼
►
Maybe he's like, I've done that, been there, done that.
01:04:14
◼
►
Like I spent my career doing that.
01:04:16
◼
►
I'm not going to make anything more mass market
01:04:17
◼
►
than I've already made.
01:04:18
◼
►
So now I want to make stuff that no one's even heard of
01:04:21
◼
►
just because it interests me.
01:04:22
◼
►
I don't need money anymore.
01:04:24
◼
►
I just want to make weird Ferraris.
01:04:25
◼
►
And by the way, I think that they're working
01:04:27
◼
►
with Ferrari on interiors, not the exteriors
01:04:30
◼
►
'cause Ferrari is weird about the exteriors
01:04:32
◼
►
they you know anyway I don't think he's doing exteriors and I would not want him
01:04:36
◼
►
to because from what I've heard of the Apple car I don't want him designing
01:04:39
◼
►
yeah interior exterior of any car but Ferrari interiors have been a mess so if
01:04:44
◼
►
he can help there that'd be great although I have a feeling that I
01:04:46
◼
►
wouldn't like any car interior that he designed either because I just feel like
01:04:49
◼
►
his current sort of predilections and his taste for design it's not a good fit
01:04:54
◼
►
for what I look for in automobiles it actually kind of is a good fit for the
01:04:58
◼
►
rumored you know the apple car with no steering wheel that's just like this personal transport
01:05:03
◼
►
Jetson bubblemobile I think Johnny I would do a good job on that it's just not something I'm
01:05:08
◼
►
interested in but anyway yeah like him I I feel happy for him I feel happy for apple and I feel
01:05:14
◼
►
happy for Johnny because I think like you said they will both they'll both be free to do what
01:05:18
◼
►
they want everyone who is still at apple designing things um should feel better about you know the
01:05:25
◼
►
with a clean break.
01:05:26
◼
►
There are some points in this article about,
01:05:28
◼
►
not that Johnny was poaching people from Apple,
01:05:30
◼
►
but people were leaving Apple to go work for his company.
01:05:32
◼
►
He's got a lot of friends at Apple,
01:05:33
◼
►
and some other people are at similar stages in their career
01:05:35
◼
►
where they feel like, I've done all these great things,
01:05:38
◼
►
I'm not going to top what I already did
01:05:40
◼
►
in terms of Apple stuff,
01:05:42
◼
►
so it's time for me to move on and do something else.
01:05:44
◼
►
But as far as I'm concerned, let the new people in.
01:05:47
◼
►
I'm ready for new takes on what it means
01:05:50
◼
►
to be an Apple product.
01:05:52
◼
►
And I think we've seen a couple of new takes,
01:05:53
◼
►
albeit from people who were there when Johnny was there,
01:05:56
◼
►
but you gotta have this turnover.
01:05:58
◼
►
You gotta have the fresh blood in every once in a while,
01:06:02
◼
►
otherwise things can stagnate.
01:06:03
◼
►
And that's like the celebrity status of Johnny
01:06:07
◼
►
and Apple's desire to keep him there
01:06:11
◼
►
because of that celebrity status.
01:06:12
◼
►
It's just like keeping Tom and his Edison around
01:06:15
◼
►
or whatever, like someone whose name
01:06:18
◼
►
is in the public consciousness
01:06:19
◼
►
much more than you would think someone
01:06:20
◼
►
in that profession would ever be.
01:06:23
◼
►
They don't know or care what role the person has,
01:06:24
◼
►
they just know the name is associated with it.
01:06:26
◼
►
And so him wanting to leave back in like 2015 or whatever,
01:06:29
◼
►
and then having the folks at Apple
01:06:32
◼
►
just essentially beg him to stay
01:06:33
◼
►
because he provided value, essentially value
01:06:36
◼
►
to the stock price and public reception,
01:06:38
◼
►
that's not a great situation for anybody.
01:06:39
◼
►
Like, I mean, granted, he could have left
01:06:42
◼
►
whenever he wanted, but he listened to his friends at Apple
01:06:45
◼
►
and said, "Okay, I'll stick it out just a little bit longer,"
01:06:47
◼
►
but it just seemed like it was miserable for everybody.
01:06:49
◼
►
And I think this extended departure has been too long.
01:06:52
◼
►
But, you know, I also wouldn't turn down $100 million so that Apple could continue to say
01:06:57
◼
►
that they're working with Johnny.
01:07:00
◼
►
Whether they're actually working with him or not, who cares?
01:07:03
◼
►
And if he's like, "Oh, I'd love to have that gig.
01:07:05
◼
►
Give me $200 million to do nothing."
01:07:07
◼
►
Well, if you designed the iMac, the iPhone, and the iPod, then you can get $100 million
01:07:12
◼
►
to do nothing.
01:07:13
◼
►
But until then, I probably can't command that kind of price.
01:07:17
◼
►
I'll get right on it.
01:07:19
◼
►
No, I agree with you guys.
01:07:20
◼
►
I think that this is long time coming.
01:07:23
◼
►
I think that it's probably a good thing.
01:07:25
◼
►
And certainly, if the hardware of the last few years,
01:07:30
◼
►
as you've said, Marco, if the hardware of the last few years
01:07:32
◼
►
is any sort of hint, then I think
01:07:34
◼
►
that we're potentially about to see some of Apple's best.
01:07:39
◼
►
I'm a little worried about these unreleased products like AR
01:07:42
◼
►
in the car if it ever ships.
01:07:43
◼
►
But I'm really pleased with this transition.
01:07:47
◼
►
And I think it's gone very well.
01:07:48
◼
►
And it's been great for me.
01:07:50
◼
►
I mean, in so many ways, this is the best time
01:07:53
◼
►
to be an Apple fan in a long time.
01:07:55
◼
►
So I'm really stoked.
01:07:57
◼
►
Let me ask you, John, why is it that we're talking
01:08:00
◼
►
about a gaming monitor next?
01:08:01
◼
►
Why do I care?
01:08:03
◼
►
What's going on?
01:08:04
◼
►
- We've talked about gaming monitors a few times.
01:08:06
◼
►
We've talked about monitors a lot,
01:08:07
◼
►
mostly in the context of Mac monitors.
01:08:09
◼
►
Now Apple finally made a monitor that fulfills the specs
01:08:12
◼
►
that we wanted for a price that is not
01:08:13
◼
►
completely unreasonable.
01:08:15
◼
►
And what, two out of three of us have that one now.
01:08:17
◼
►
I did write, you got one, right, Jomaro?
01:08:19
◼
►
- The studio display, no.
01:08:21
◼
►
- Oh no, in case you got two, that's what I'm thinking.
01:08:22
◼
►
- No, no, no, no, I only have the one.
01:08:25
◼
►
I want a second one, but I only have the one.
01:08:27
◼
►
- It's hard for me to keep track of what you have
01:08:28
◼
►
versus what you are thinking about buying.
01:08:30
◼
►
But anyway, I mean, now that that solved the problem
01:08:33
◼
►
on the Mac side, and in particular, the camera's not great,
01:08:36
◼
►
but at least there's a product in that area.
01:08:38
◼
►
But what I was always looking for and talking about
01:08:40
◼
►
in terms of monitors, because my monitor situation
01:08:42
◼
►
has been solved through the use of excessive money,
01:08:48
◼
►
What do I do for my PlayStation monitor?
01:08:50
◼
►
Because I use my PlayStation on a gaming monitor,
01:08:53
◼
►
and I've got an older gaming monitor, which is fine.
01:08:56
◼
►
It's 4K, but it doesn't support HDR.
01:08:59
◼
►
It doesn't support 120 frames per second.
01:09:01
◼
►
And now with the advent of the PlayStation 5,
01:09:03
◼
►
those are features that would be nice to have
01:09:04
◼
►
in a gaming monitor.
01:09:05
◼
►
So I thought when the PlayStation 5 came out, great.
01:09:08
◼
►
I'll just replace my existing 4K monitor
01:09:11
◼
►
with a new 4K monitor that supports 120 frames per second
01:09:15
◼
►
And that turned out to be a really difficult thing to find.
01:09:18
◼
►
Talked about it a few times in the show
01:09:20
◼
►
when monitors would be released
01:09:21
◼
►
and we'd see what they're offering.
01:09:23
◼
►
And we talked about it in the context
01:09:26
◼
►
of the Apple Studio display.
01:09:27
◼
►
Like, hey, if I wanted to buy a non-Apple display
01:09:29
◼
►
that has these features, what can I get?
01:09:31
◼
►
Can I get one that's like a 5K version of the XDR?
01:09:34
◼
►
And the answer was not really, or if you could,
01:09:36
◼
►
it was $4,900 instead of 5,000, right?
01:09:41
◼
►
Like they were very expensive.
01:09:42
◼
►
And in the gaming monitors, 4K, 1600 nit, 100% P3,
01:09:47
◼
►
120 hertz gaming monitors basically didn't exist.
01:09:54
◼
►
Or you could find them and they were $3,000, right?
01:09:58
◼
►
And I don't wanna spend, I don't wanna buy a $3,000 monitor
01:10:02
◼
►
for my $400 PlayStation 5 or whatever it is.
01:10:05
◼
►
Like it's a big mismatch and I already spent a lot of money
01:10:07
◼
►
on monitors, so I'm kinda like, well surely monitor tech
01:10:10
◼
►
will advance and we'll be able to find something better.
01:10:12
◼
►
But, you know, years have passed
01:10:14
◼
►
and I watch all these YouTube reviews
01:10:16
◼
►
and there's just not a lot out there
01:10:18
◼
►
that fulfills that criteria.
01:10:22
◼
►
You know, it's just, it almost makes me wish
01:10:24
◼
►
that I could get, well, this probably doesn't get to you,
01:10:27
◼
►
but the MacBook Pro Display, right?
01:10:31
◼
►
1600 nits, it does 120 hertz, right?
01:10:35
◼
►
It's got HDR and it's great.
01:10:38
◼
►
that would be a great gaming monitor, but it's 15 inches.
01:10:42
◼
►
And so I don't want a game on a 15 inch monitor,
01:10:44
◼
►
but I look at that tech, I'm like,
01:10:46
◼
►
just put that in a 27 inch 4K screen
01:10:49
◼
►
and I would love to buy it.
01:10:50
◼
►
And no one has done that.
01:10:51
◼
►
Well, for a reasonable price.
01:10:53
◼
►
Again, you can find monitors that do that,
01:10:55
◼
►
but they're very, very expensive.
01:10:57
◼
►
And they're not really made for gaming.
01:10:58
◼
►
They're mostly made for like artists or people who are
01:11:01
◼
►
doing HDR video or whatever.
01:11:02
◼
►
Well, recently Sony, the company that makes the PlayStation 5
01:11:06
◼
►
came out with their own gaming monitor,
01:11:08
◼
►
which is kind of weird,
01:11:10
◼
►
because usually they just leave this to third parties.
01:11:12
◼
►
There's more than enough third-party manufacturers
01:11:15
◼
►
of monitors, there's a whole world of them.
01:11:17
◼
►
But Sony came out with one,
01:11:18
◼
►
and it's styled a little bit like the PlayStation 5,
01:11:21
◼
►
if you look at it, you guys can look at the pictures,
01:11:23
◼
►
we'll put some links in the show notes.
01:11:25
◼
►
It's got a weird kind of front foot, let's call it,
01:11:30
◼
►
that sticks out forward from the monitor.
01:11:34
◼
►
It's like on an angle,
01:11:35
◼
►
And when you move the monitor up and down,
01:11:36
◼
►
it sort of slides up and down this angled foot,
01:11:39
◼
►
kind of like it's going up and down a ski slope, right?
01:11:41
◼
►
So as it gets lower, it also gets closer to you.
01:11:43
◼
►
And as it gets higher, it gets farther away.
01:11:45
◼
►
And then there are two legs that kind of point backwards.
01:11:47
◼
►
It's a very strange looking stand.
01:11:49
◼
►
It looks a little bit like the PlayStation 5,
01:11:51
◼
►
if you know what the PlayStation 5 looks like,
01:11:52
◼
►
especially from the back, if you look at it,
01:11:53
◼
►
it looks a little bit like the PlayStation 5.
01:11:56
◼
►
But it's intended to be a monitor
01:11:57
◼
►
that you use with the PlayStation 5.
01:11:58
◼
►
So here are the specs.
01:12:00
◼
►
27 inch, 4K, it's an IPS LCD.
01:12:02
◼
►
There's people in all the various technologies for LCDs.
01:12:06
◼
►
IPS is not the sort of high-end competitive gaming one.
01:12:11
◼
►
Those, they have monitors that sacrifice image quality
01:12:14
◼
►
for response time.
01:12:16
◼
►
This is not that.
01:12:17
◼
►
IPS does not have the best of the best response time,
01:12:20
◼
►
but it does look better than the more responsive displays.
01:12:23
◼
►
Right, so that's what I always look for.
01:12:24
◼
►
My current LG is an IPS display.
01:12:26
◼
►
VA displays are similar, but like they're not the,
01:12:29
◼
►
you know, the super high-end, I am an esports gamer,
01:12:32
◼
►
I don't care what it looks like.
01:12:33
◼
►
I just want everything to be as fast as possible.
01:12:35
◼
►
- And pretty much every LCD Apple has shipped
01:12:37
◼
►
in recent memory has been IPS.
01:12:38
◼
►
- Yeah, 'cause it looks the best, right?
01:12:40
◼
►
And I'm not a competitive, you know,
01:12:42
◼
►
not a professional gamer.
01:12:43
◼
►
I'd rather have it look good when I'm playing.
01:12:45
◼
►
I want okay response number, I'd rather have it look good.
01:12:47
◼
►
So it's 27 inch, 4K IPS, right?
01:12:48
◼
►
So that's exactly the size of monitor that I want
01:12:51
◼
►
and the kind of screen I want.
01:12:53
◼
►
It has local dimming, which means the backlight
01:12:55
◼
►
is not just one giant light that's on all the time.
01:12:58
◼
►
The backlight has various zones and it turns off zones
01:13:01
◼
►
or turns them down depending on what parts of the image are bright and what parts of
01:13:04
◼
►
the image are dark.
01:13:07
◼
►
As we've discussed in the past, local dimming is not ideal because if you have a star field
01:13:12
◼
►
behind each one of those pinprick stars they have to turn on a very large region of the
01:13:16
◼
►
backlight and so yes the star will be bright but also there will be a little bit of a halo
01:13:20
◼
►
around the star that is also a little bit brighter than it should be because the backlight
01:13:25
◼
►
is broken up into pretty big chunks.
01:13:27
◼
►
So it has 96 zones, which is not that many zones.
01:13:30
◼
►
The Pro Display XDR has 275.
01:13:33
◼
►
Modern monitors and modern TVs can have thousands of zones,
01:13:37
◼
►
or thousands of LEDs anyway.
01:13:39
◼
►
I think we have tens of thousands of LEDs
01:13:41
◼
►
and maybe thousands of zones.
01:13:42
◼
►
Anyway, 96 zones is not a lot, right?
01:13:45
◼
►
In terms of HDR, it has,
01:13:46
◼
►
they use acronyms on monitors,
01:13:48
◼
►
Display HDR 600, which is, I don't know,
01:13:51
◼
►
it's like a marketing term
01:13:52
◼
►
or something that some spec testing can apply with.
01:13:54
◼
►
What it's trying to say kind of is that the brightest things in an HDR scene will be 600
01:14:01
◼
►
As measured by testers, they can actually go up to like 700 nits.
01:14:04
◼
►
And that number might ring a bell because the Apple Studio display goes up to 600 nits
01:14:08
◼
►
as well, although Apple does not call it HDR.
01:14:11
◼
►
It's a little bit brighter than your average monitor like what I'm looking at now in the
01:14:16
◼
►
XDR in regular mode where you're just looking at the user interface, it maxes at 500 nits.
01:14:21
◼
►
It only goes to 1600 when it's showing HDR content.
01:14:25
◼
►
Whereas I think the studio display does something similar where it will still max at 500 for
01:14:30
◼
►
looking at the UI but when you see something with an extended brightness it will go up
01:14:35
◼
►
But anyway, all this is to say is that this monitor does not hit 1600 nits.
01:14:39
◼
►
It's not super duper bright HDR.
01:14:41
◼
►
But it is a little bit brighter than your average monitor.
01:14:45
◼
►
It's got 144Hz refresh rate and also can do lower refresh as well.
01:14:50
◼
►
It's a variable refresh rate and G-Sync, so you can use it as a PC monitor as well.
01:14:56
◼
►
As a quote unquote one millisecond response time, all of these gaming monitors have a
01:15:00
◼
►
mode where they will overshoot the intended value of the pixel and then back off a little
01:15:03
◼
►
bit to get a better response time.
01:15:06
◼
►
You can, I don't have a good link for this, but if you Google for how LCDs work and how
01:15:10
◼
►
response time works, very often it is faster to go past the color that you want a pixel
01:15:15
◼
►
to B and then back off, then it is go directly from color A
01:15:18
◼
►
to color B on a per pixel basis.
01:15:21
◼
►
They call that overshoot.
01:15:23
◼
►
And various PC monitors will have settings
01:15:26
◼
►
where you can say, how much overshoot do you want?
01:15:28
◼
►
Do you want the maximum response time
01:15:30
◼
►
at the cost of weird artifacts?
01:15:33
◼
►
Briefly, the image looks weird.
01:15:35
◼
►
And then it's hard to see, especially on video,
01:15:38
◼
►
what it's actually doing.
01:15:39
◼
►
But you can choose.
01:15:40
◼
►
You can have it not do any of that
01:15:41
◼
►
and have a slower response time, do a little bit of that
01:15:43
◼
►
and have a little bit faster.
01:15:44
◼
►
but they all want to advertise a one millisecond response
01:15:47
◼
►
time of the pixels.
01:15:48
◼
►
And to get one millisecond, you really
01:15:49
◼
►
have to crank up the overshoot, and it doesn't look great.
01:15:51
◼
►
It has auto HDR tone mapping.
01:15:53
◼
►
This is another problem in the world of television and games.
01:15:57
◼
►
You've got these displays that can display
01:15:59
◼
►
some range of brightness from 0 to 600,
01:16:02
◼
►
or maybe 0 to 1,600 nits.
01:16:04
◼
►
And then you've got content that's mastered for some range
01:16:07
◼
►
of brightness that is different than that.
01:16:09
◼
►
Content can be mastered from 1 to 800 nits, 1 to 1,000, 1
01:16:14
◼
►
there's nothing out there that does 4,000 nits, right?
01:16:16
◼
►
But some content is mastered to be, you know,
01:16:19
◼
►
from zero to 4,000 nits.
01:16:21
◼
►
And so, tone mapping has to map from
01:16:24
◼
►
what the content was mastered for
01:16:25
◼
►
and what the display is capable of.
01:16:27
◼
►
And you can get into these weird situations
01:16:29
◼
►
where the monitor will be doing tone mapping,
01:16:31
◼
►
but so will the PlayStation and the tone mapping,
01:16:33
◼
►
there'll be double tone mapping and it'll be all messy.
01:16:35
◼
►
It's a complicated situation.
01:16:37
◼
►
So this one is a monitor from Sony
01:16:38
◼
►
that plugs into a Sony console
01:16:40
◼
►
and presumably they cooperate with each other
01:16:42
◼
►
so that only one of them does a tone mapping
01:16:43
◼
►
that it does it in a way that doesn't
01:16:45
◼
►
look incredibly terrible.
01:16:47
◼
►
And then finally, the most important part
01:16:49
◼
►
of this entire product is the price.
01:16:53
◼
►
And that might sound like a lot,
01:16:55
◼
►
but compared to $3,000, it is pretty good.
01:16:59
◼
►
So I feel kind of like this is the Apple Studio display
01:17:02
◼
►
of the gaming monitors.
01:17:03
◼
►
It was a product where nothing like this existed, right?
01:17:07
◼
►
You could either pay $3,000 and get something
01:17:10
◼
►
that's not really designed to be a gaming monitor,
01:17:12
◼
►
Or you could pay 700 and get a gaming monitor
01:17:15
◼
►
that has none of the specs you wanted, right?
01:17:17
◼
►
Now there's this $900 device
01:17:19
◼
►
that like the Apple Studio Display,
01:17:20
◼
►
doesn't have all the specs of the 3000, $4000 things,
01:17:24
◼
►
but it's much better than the gaming monitors
01:17:28
◼
►
that didn't care anything about the things that I care about.
01:17:32
◼
►
How good does it look?
01:17:32
◼
►
How bright does it get?
01:17:34
◼
►
Does it handle high refresh, right?
01:17:35
◼
►
'Cause I didn't want one of those monitors
01:17:36
◼
►
that sacrifices appearance for speed.
01:17:39
◼
►
And those can be pretty expensive anyway, right?
01:17:41
◼
►
The wildcard in this is the Dell Alienware OLED monitor,
01:17:46
◼
►
but that's a curved monitor.
01:17:47
◼
►
It is not 4K, it is not even 16 by nine.
01:17:50
◼
►
So it is not a good fit for the PlayStation at all.
01:17:53
◼
►
I would love to see a,
01:17:54
◼
►
and that's a QD OLED monitor by the way,
01:17:56
◼
►
I would love to see a QD OLED monitor,
01:17:58
◼
►
just like the Sony one.
01:18:00
◼
►
And that product will, you know,
01:18:03
◼
►
be the real king of the gaming monitor space.
01:18:05
◼
►
But for now, I'm excited by the idea
01:18:07
◼
►
that Sony has put this product right in the middle
01:18:10
◼
►
where none existed before to say we have a pretty good monitor
01:18:13
◼
►
with pretty good specs that will absolutely
01:18:15
◼
►
work with your PlayStation for a reasonable-ish price.
01:18:19
◼
►
It looks way better than the monitors
01:18:22
◼
►
that cost less than it.
01:18:23
◼
►
And it looks almost as good as monitors
01:18:26
◼
►
that cost thousands and thousands more.
01:18:27
◼
►
And the stand is a little weird, but I think
01:18:29
◼
►
you can re-summount it anyway.
01:18:30
◼
►
So the reason I want to talk about this
01:18:32
◼
►
is because I think there are parallels to the Apple Studio
01:18:34
◼
►
display, and I'm excited about it.
01:18:35
◼
►
I'm not going to buy it because I'm
01:18:37
◼
►
buying too many expensive things right now,
01:18:39
◼
►
and my monitor is fine, but I'm glad that,
01:18:43
◼
►
I mean maybe they saw the Apple Studio display
01:18:44
◼
►
and said we should introduce a thing
01:18:46
◼
►
that people wanted forever too,
01:18:47
◼
►
or maybe nobody wants this except for me.
01:18:49
◼
►
But, you know, another thing,
01:18:52
◼
►
they introduced a line of products.
01:18:54
◼
►
There is a cheaper monitor coming
01:18:56
◼
►
that is 1080p, 400 nits, 240 hertz, and only $530,
01:19:01
◼
►
and that's probably the one, and no local dimming at all,
01:19:05
◼
►
that's probably the one that's more like,
01:19:06
◼
►
well if you don't care about resolution
01:19:08
◼
►
and then you just want maximum response time by this thing.
01:19:10
◼
►
But this monitor is very exciting to me
01:19:13
◼
►
and I hope I'll either get something like it
01:19:16
◼
►
for my PlayStation 6 or by then I'll be able
01:19:19
◼
►
to get a QT OLED monitor.
01:19:21
◼
►
And by the way, the other thing for people
01:19:22
◼
►
who are wondering what they can game on,
01:19:24
◼
►
televisions are getting smaller,
01:19:26
◼
►
which is an exciting development.
01:19:28
◼
►
We used to look every year
01:19:29
◼
►
like how much bigger televisions are getting,
01:19:31
◼
►
but after a certain point,
01:19:33
◼
►
it was hard to make television smaller, especially at 4K.
01:19:37
◼
►
Nobody wants a small TV.
01:19:38
◼
►
It's hard to sell a small television.
01:19:40
◼
►
It used to be like 42 inch plasma.
01:19:42
◼
►
It was like, wow, you have a giant TV.
01:19:44
◼
►
Try finding a 42 inch TV now.
01:19:47
◼
►
But coincidentally this year, one of the big stories is,
01:19:50
◼
►
I think it's just LG,
01:19:52
◼
►
one of the OLED television manufacturers
01:19:55
◼
►
produced a 42 inch television
01:19:56
◼
►
and people were so excited because that's so small.
01:19:59
◼
►
It's kind of like the iPhone mini, right?
01:20:00
◼
►
Then they don't want to put it in their pocket.
01:20:02
◼
►
But the smallest television used to be able to get
01:20:05
◼
►
like with good picture quality was like 55 inch
01:20:07
◼
►
and then LG came out with a 48 inch
01:20:10
◼
►
and people were using 48 inch OLED televisions
01:20:13
◼
►
as their quote unquote gaming monitor
01:20:14
◼
►
or sometimes as their PC monitor.
01:20:16
◼
►
They'd put it on the desk in front of them
01:20:18
◼
►
and they'd set the, it's a 4K television, right?
01:20:21
◼
►
And they'd be using their PC attached
01:20:23
◼
►
to a giant television, which sounds kind of ridiculous
01:20:26
◼
►
but OLEDs are actually pretty good
01:20:27
◼
►
and if you put the monitor far enough away
01:20:29
◼
►
so you can't see the pixels, it's actually pretty nice.
01:20:31
◼
►
And now they made a 42 inch one
01:20:33
◼
►
And that television is essentially designed for people
01:20:36
◼
►
who want to use it as a gaming monitor on their desk.
01:20:39
◼
►
Still too big for me, not something that I would want to do,
01:20:41
◼
►
but the image quality on a 42 inch LG OLED television,
01:20:44
◼
►
it's so much better than any of these gaming monitors.
01:20:47
◼
►
And the prices are reasonable-ish.
01:20:50
◼
►
It's like, I don't know, it's under $2,000, right?
01:20:53
◼
►
But it's, you know, it's 42 inches
01:20:55
◼
►
and every pixel is lit up individually.
01:20:57
◼
►
And it does HDR like, you know,
01:20:59
◼
►
up to a peak of like 800, 900 nits or something like that.
01:21:02
◼
►
has pretty amazing response time,
01:21:04
◼
►
it supports all the things.
01:21:05
◼
►
So, you know, if that interests you,
01:21:08
◼
►
be aware that that is a thing that's happening.
01:21:10
◼
►
People are using televisions as gaming monitors,
01:21:12
◼
►
and I don't even know what to call it anymore.
01:21:14
◼
►
Is it a gaming monitor, is it a TV?
01:21:15
◼
►
It's technically a TV,
01:21:16
◼
►
but that's not what it's designed for.
01:21:17
◼
►
It even has feet, so they're big enough
01:21:19
◼
►
so that you can put your mouse and keyboard underneath it
01:21:21
◼
►
when it's on your desk.
01:21:22
◼
►
So yeah, if you're in the market for something to use
01:21:26
◼
►
with your Xbox or PlayStation,
01:21:28
◼
►
and you didn't know if there's anything decent to buy,
01:21:30
◼
►
check out the Sony thing.
01:21:31
◼
►
They also came out with some gaming headsets as well.
01:21:34
◼
►
They're basically just like gamified versions
01:21:37
◼
►
of their noise canceling headphones
01:21:38
◼
►
that we're all talking about for using on plane flights
01:21:40
◼
►
back when we used to fly.
01:21:41
◼
►
Only they look like PlayStations.
01:21:42
◼
►
They have a bunch of gaming specific features
01:21:43
◼
►
and those look pretty neat too.
01:21:47
◼
►
- You can get two of these
01:21:47
◼
►
and do all your computing on them, Casey.
01:21:50
◼
►
- I mean, it is kind of like the Apple Studio Display.
01:21:52
◼
►
It's got very similar specs.
01:21:54
◼
►
It's better than the Apple Studio Display
01:21:55
◼
►
'cause it does high refresh and has local dimming
01:21:57
◼
►
and your studio display doesn't have any of those things.
01:21:59
◼
►
- Yes, that's true.
01:22:02
◼
►
- And it cost $1600.
01:22:03
◼
►
- Also true.
01:22:05
◼
►
- But it's 5K, as we know.
01:22:07
◼
►
- Yes, exactly.
01:22:08
◼
►
- Yep, that's kind of a big deal.
01:22:10
◼
►
- That's kind of a big deal.
01:22:11
◼
►
- I know, I know, I'm just saying,
01:22:12
◼
►
like the Apple Studio is why this does fill this row,
01:22:14
◼
►
but we talked a lot about this.
01:22:15
◼
►
What is Apple gonna do?
01:22:16
◼
►
Is surely, if they want a monitor,
01:22:17
◼
►
it has to at least match the specs of the MacBook Pros,
01:22:19
◼
►
and Apple said, "Nope, doesn't."
01:22:22
◼
►
- Well, we're good.
01:22:22
◼
►
- And it didn't.
01:22:23
◼
►
- We are sponsored this week by Linode,
01:22:26
◼
►
my favorite place to run servers.
01:22:28
◼
►
Visit linode.com/atp, see why Linode is so beloved
01:22:33
◼
►
by so many developers and users like me.
01:22:35
◼
►
So I run a lot of servers, between ATP
01:22:39
◼
►
and my personal website and Overcast,
01:22:41
◼
►
and there's just, there's so, I run so many servers,
01:22:44
◼
►
I think I run something like 30 instances,
01:22:46
◼
►
and I've used a lot of hosts in my time,
01:22:49
◼
►
and I've been with Linode the longest,
01:22:50
◼
►
I moved all my stuff there over time,
01:22:52
◼
►
because it's just the best, I've been with so many hosts
01:22:55
◼
►
that were like, fine, but none of them were really great
01:22:57
◼
►
for this long and Leno just is so they have incredible services to offer.
01:23:02
◼
►
They have all these compute instances, basic ones,
01:23:05
◼
►
specialized things like GPU compute or high memory.
01:23:08
◼
►
They have all these advanced other services like block storage, Kubernetes,
01:23:13
◼
►
their upcoming bare metal release.
01:23:14
◼
►
And they recently launched managed databases for MySQL,
01:23:18
◼
►
Postgres and Mongo. And they're even doing redis later this year.
01:23:22
◼
►
These are simple, reliable, managed databases,
01:23:26
◼
►
high performance database clusters,
01:23:27
◼
►
they take care of a whole bunch of stuff for you.
01:23:29
◼
►
So it's just an amazing product.
01:23:30
◼
►
And all this is backed at Linode by amazing support
01:23:33
◼
►
if you need it.
01:23:34
◼
►
So with other hosts, sometimes you file a ticket,
01:23:37
◼
►
maybe they get to it eventually,
01:23:39
◼
►
and then the person gets to it,
01:23:40
◼
►
and is like, oh, I don't know how to fix this,
01:23:41
◼
►
let me escalate it.
01:23:42
◼
►
That doesn't happen with Linode.
01:23:43
◼
►
They respond quickly, and the person who responds
01:23:46
◼
►
can help you.
01:23:47
◼
►
There's no weird tears to go through or anything like that.
01:23:49
◼
►
And all this is brought to you at an incredible value.
01:23:52
◼
►
This is why I've been with them for so long.
01:23:54
◼
►
Not only is all this stuff great,
01:23:56
◼
►
they're also really cheap.
01:23:57
◼
►
Like for what you get, it's a great value.
01:23:59
◼
►
So see for yourself, see what you can get at Linode.
01:24:02
◼
►
It's a great host to run servers.
01:24:04
◼
►
Visit linode.com/atp, create a free account,
01:24:07
◼
►
and you get $100 in credit.
01:24:09
◼
►
Once again, linode.com/atp, new accounts, get $100 in credit.
01:24:14
◼
►
Thank you so much to Linode for hosting all my servers
01:24:17
◼
►
and for sponsoring our show.
01:24:23
◼
►
All right, let's do some Ask ATP,
01:24:24
◼
►
and Radu Pirovska writes, "My iMac randomly wakes from sleep.
01:24:28
◼
►
"The only thing plugged in is the ethernet cable.
01:24:30
◼
►
"I'm using the Apple keyboard and Apple mouse,
01:24:32
◼
►
"which I started turning off
01:24:33
◼
►
"when I put the computer to sleep.
01:24:35
◼
►
"All Energy Saver options are set to solve this.
01:24:37
◼
►
"Problem still appears.
01:24:40
◼
►
So what does Radu do?
01:24:41
◼
►
- Hmm, so John's gonna have the right answer,
01:24:44
◼
►
but my random guess at the answer is
01:24:48
◼
►
either wake on LAN, some kind of network thing,
01:24:52
◼
►
Or it could be like, Apple has various things,
01:24:56
◼
►
like used to be called Power Nap,
01:24:57
◼
►
I don't know what the current version of all this stuff is.
01:25:00
◼
►
Things where the system will wake itself up
01:25:02
◼
►
to do certain tasks or check updates for things.
01:25:05
◼
►
And maybe that's waking up for that reason
01:25:08
◼
►
and something is going wrong in that process
01:25:10
◼
►
where it then wakes the whole computer up for some reason.
01:25:13
◼
►
My third guess is USB devices.
01:25:17
◼
►
Anything plugged into USB seems to be able
01:25:20
◼
►
to do weird things to computers when it doesn't work right.
01:25:23
◼
►
And maybe this is one of those weird things that can do it.
01:25:25
◼
►
- Oh, but supposedly only Ethernet is plugged in.
01:25:28
◼
►
- Oh yeah, the only thing plugged in, eh, hmm.
01:25:30
◼
►
- Oh wait, what about Wake on LAN?
01:25:31
◼
►
Wake on LAN is the same. - Yeah, that's what
01:25:32
◼
►
I was just saying, yeah, some kind of like,
01:25:33
◼
►
yeah, it could be Wake on, I mean,
01:25:35
◼
►
I don't know how Wake on LAN ever worked.
01:25:37
◼
►
I don't know what that is. - It still works.
01:25:39
◼
►
- Does it? - I know it works
01:25:39
◼
►
'cause I have it turned off on the machines
01:25:40
◼
►
I don't want it to work on.
01:25:41
◼
►
It's real important that it be turned off.
01:25:43
◼
►
- All right, so John, as the only one of us
01:25:44
◼
►
I think that actually uses sleep on a regular basis
01:25:46
◼
►
on the computer.
01:25:47
◼
►
What is this?
01:25:49
◼
►
- Are you shutting down?
01:25:50
◼
►
What are you not using sleep for?
01:25:51
◼
►
- Well, I'm like, I throw the mouse in the corner,
01:25:53
◼
►
which is my hot corner to turn the display off,
01:25:55
◼
►
and then I walk away.
01:25:55
◼
►
- Yep, yeah, all right.
01:25:57
◼
►
Anyway, I do sleep my computer.
01:25:59
◼
►
I have experience, not with this particular computer,
01:26:01
◼
►
but in my many years, I have lots of experience
01:26:03
◼
►
battling sleep/wake things.
01:26:05
◼
►
Marco covered most of the bases.
01:26:06
◼
►
Like, the procedure you go through is like,
01:26:08
◼
►
oh, just removing all the peripherals
01:26:09
◼
►
to eliminate sources of, you know,
01:26:11
◼
►
what could possibly be causing it,
01:26:13
◼
►
and you end up in the Mac OS 10 days,
01:26:14
◼
►
you end up looking in the console log,
01:26:17
◼
►
'cause every time your Mac wakes,
01:26:18
◼
►
it will have a wake reason and it will list it
01:26:20
◼
►
and you try to correlate that.
01:26:21
◼
►
And it's just this debugging process I've done many times.
01:26:24
◼
►
I remember doing it like my Power Mac G5,
01:26:26
◼
►
which has lots of weird issues with this.
01:26:28
◼
►
And I would eventually find what it is.
01:26:29
◼
►
Oh, it's this USB hub.
01:26:31
◼
►
Oh, it's this one app doing this thing.
01:26:32
◼
►
You know, there's this thing where you can use
01:26:34
◼
►
in the command line to see what's taking power assertions
01:26:35
◼
►
to stop it from sleeping, what's waking it up.
01:26:38
◼
►
Luckily, you don't have to go through all that stuff
01:26:41
◼
►
that I just described because there is a cool new app
01:26:43
◼
►
called Sleep Aid.
01:26:44
◼
►
that is entirely, I mean, believe it,
01:26:46
◼
►
this is kind of a condemnation of Mac,
01:26:48
◼
►
of Apple's operating system,
01:26:49
◼
►
but the entire purpose of this app
01:26:51
◼
►
is to figure out what the hell is going on
01:26:53
◼
►
with your Mac in sleep.
01:26:54
◼
►
So you leave this app running all the time
01:26:56
◼
►
and it does what I was just describing
01:26:59
◼
►
and puts a GUI on it.
01:27:00
◼
►
It's always watching the console.
01:27:01
◼
►
It's always checking what has power assertions.
01:27:03
◼
►
It does amazing amount of stuff.
01:27:06
◼
►
I don't know if it will solve your sleep problem,
01:27:08
◼
►
but I can tell you when I saw this app, I'm like,
01:27:10
◼
►
they made an app to do that stuff I was doing
01:27:12
◼
►
and it looks great.
01:27:14
◼
►
If I had a sleep problem, this is the first thing I would try.
01:27:16
◼
►
Because trying to describe to someone how they can try
01:27:20
◼
►
to debug this themselves, it's impossible.
01:27:21
◼
►
But you can just say, try this app.
01:27:24
◼
►
Maybe it will help.
01:27:24
◼
►
The app itself is also complicated.
01:27:26
◼
►
Don't think this is a simple app.
01:27:28
◼
►
It is also very complicated.
01:27:29
◼
►
And you have to-- looking at this app
01:27:31
◼
►
and figuring out what it's trying to tell you
01:27:33
◼
►
and what action you can take may be difficult.
01:27:36
◼
►
But it's better than the alternative.
01:27:37
◼
►
So that's my suggestion.
01:27:39
◼
►
Check out Sleep Aid.
01:27:40
◼
►
And if that doesn't work, disconnect everything
01:27:41
◼
►
from your computer forever.
01:27:42
◼
►
if that doesn't work, get a new computer.
01:27:46
◼
►
- I've noticed that on my otherwise
01:27:48
◼
►
almost flawless MacBook Pro, it will,
01:27:51
◼
►
every two or three days, it'll just decide
01:27:53
◼
►
to reboot itself for reasons.
01:27:55
◼
►
And I haven't spent the time to debug this yet,
01:27:58
◼
►
but I remember seeing in the little dialogue that pops up,
01:28:00
◼
►
you know, it's Marco's favorite,
01:28:01
◼
►
your computer was shut down because of a problem.
01:28:04
◼
►
But anyways, in the dialogue--
01:28:05
◼
►
- No, my favorite is the one that says,
01:28:07
◼
►
you shut down your computer--
01:28:09
◼
►
- Oh, that's right, that's right.
01:28:10
◼
►
- Because it was like, I sure didn't!
01:28:11
◼
►
- Right, right.
01:28:13
◼
►
So anyway, so I've seen like a watchdog timeout
01:28:15
◼
►
of like 120 seconds for something.
01:28:17
◼
►
I can't remember what it is off some of it.
01:28:19
◼
►
- That's the one you see all the time.
01:28:20
◼
►
- Yeah, so I really would love to know why this is happening
01:28:23
◼
►
and every time I submit the report and every time I write,
01:28:26
◼
►
what is your comment for this report?
01:28:28
◼
►
- I was asleep when this happened.
01:28:29
◼
►
- The computer was sitting idle
01:28:31
◼
►
or sometimes the computer was in the midst of shutting down
01:28:34
◼
►
and or rebooting, which is also a time when I get this
01:28:37
◼
►
on next boot, which is super fun.
01:28:40
◼
►
But anyway, I need to try to figure out what that is.
01:28:42
◼
►
So if you've had a similar problem
01:28:43
◼
►
and you have a fix you want to let me know about,
01:28:45
◼
►
please let me know.
01:28:46
◼
►
- Someone in the chat room is saying,
01:28:47
◼
►
how just sleeping in your computer
01:28:48
◼
►
is a recipe for disaster.
01:28:50
◼
►
Let me tell you, I've been using computers this way
01:28:52
◼
►
ever since the dawn of sleep.
01:28:53
◼
►
I do not shut down my computer.
01:28:55
◼
►
When I'm done using it for the day,
01:28:57
◼
►
I put it to sleep, and then when I use it again
01:28:59
◼
►
in the morning, I wake it up.
01:29:00
◼
►
Sleep and wake are great.
01:29:01
◼
►
I have some other computers that never sleep
01:29:03
◼
►
because they're like servers, they're running Plex,
01:29:05
◼
►
they're doing all sorts of other stuff, right?
01:29:06
◼
►
But my main computer, I always put to sleep.
01:29:09
◼
►
That should not be a problem, and in general, it is not.
01:29:12
◼
►
Occasionally it has been.
01:29:13
◼
►
Again, my Power Mac G5 back in the day
01:29:14
◼
►
had real sleep problems, and I think laptops in particular
01:29:17
◼
►
have all sorts of sleep problems.
01:29:18
◼
►
But for desktop computers,
01:29:21
◼
►
the only time I should ever have a problem with this,
01:29:23
◼
►
or the only thing that should kill my uptime
01:29:24
◼
►
is software updates.
01:29:26
◼
►
When I have to update the operating system,
01:29:27
◼
►
that's when I reboot.
01:29:28
◼
►
And in practice, that's pretty much how it works.
01:29:30
◼
►
Like, I only restart, if I'm restarting into Windows
01:29:34
◼
►
to play a Windows game or something,
01:29:36
◼
►
or if there's a software update.
01:29:38
◼
►
There's nothing inherent in computers that says,
01:29:41
◼
►
oh, you have to shut down everyone's
01:29:42
◼
►
so I'll clean everything out.
01:29:43
◼
►
If the operating system is working,
01:29:44
◼
►
and yes, maybe if you have 96 gigs of RAM like I do,
01:29:47
◼
►
everything should be fine.
01:29:48
◼
►
And in practice, it is.
01:29:50
◼
►
So again, I don't vouch for laptops,
01:29:53
◼
►
but I don't think it's a good decision to think that
01:29:58
◼
►
that's never gonna work so I shouldn't try it.
01:29:59
◼
►
It should work, and it does work the majority of the time.
01:30:03
◼
►
Maybe it's 51%.
01:30:04
◼
►
I don't know what the worldwide percentage is,
01:30:06
◼
►
but as far as I'm concerned,
01:30:07
◼
►
I will battle my computer until that is the case,
01:30:10
◼
►
if I have to.
01:30:11
◼
►
That's why I have all the experience
01:30:12
◼
►
fighting weird sleep things, right?
01:30:13
◼
►
If I'm waking up and stuff like that.
01:30:15
◼
►
In fact, like I said, not only do I sleep my thing
01:30:17
◼
►
every night, I have stuff scheduled to wake it up
01:30:20
◼
►
in the middle of the night to do local time machine backups
01:30:22
◼
►
and super duper clones, and then it goes back to sleep.
01:30:25
◼
►
So when I come in the morning, my computer is asleep,
01:30:27
◼
►
but it did stuff usefully during the night,
01:30:29
◼
►
and yes, that's a feature that the Mac has
01:30:31
◼
►
where you can schedule--
01:30:32
◼
►
- Got up, went to the bathroom.
01:30:34
◼
►
- You can schedule wake times.
01:30:35
◼
►
You can tell, you wake up at this time
01:30:37
◼
►
and then go back to sleep at this time.
01:30:38
◼
►
And of course, when it wakes up,
01:30:40
◼
►
I have these little programs that run,
01:30:42
◼
►
they're just Perl scripts that do a bunch of stuff.
01:30:44
◼
►
From those scripts, you can then tell it
01:30:45
◼
►
to go back to sleep when it's done.
01:30:47
◼
►
Like, that's what my computer does all the time,
01:30:50
◼
►
and it's fine, like it does not cause any problems.
01:30:53
◼
►
It shouldn't cause problems.
01:30:54
◼
►
If you have a weird laptop and it does,
01:30:55
◼
►
I'm sorry, you have a desktop.
01:30:58
◼
►
- I have so many problems with my 13 inch now.
01:31:01
◼
►
Well, 14, excuse me, now it's 14.
01:31:05
◼
►
I have to reboot it every few days for some weird thing.
01:31:09
◼
►
Usually it's like, that is my FaceTime laptop
01:31:14
◼
►
when we do our workouts.
01:31:16
◼
►
Most of the time, if I haven't rebooted it in a few days,
01:31:19
◼
►
it just won't ring for the FaceTime call.
01:31:22
◼
►
The FaceTime call will not come into it for some reason.
01:31:25
◼
►
And I'll have to reboot it for it to receive
01:31:28
◼
►
FaceTime calls reliably.
01:31:29
◼
►
So that's part of my routine now is like,
01:31:31
◼
►
every Monday, Wednesday, and Friday,
01:31:33
◼
►
right before the workout, I reboot my laptop
01:31:35
◼
►
because otherwise it's not reliable.
01:31:38
◼
►
That's the same one that a few weeks ago
01:31:41
◼
►
it started occasionally not accepting power
01:31:44
◼
►
or charging input sometimes until I power it off
01:31:48
◼
►
and power it back on again.
01:31:50
◼
►
So it's having a fun time.
01:31:53
◼
►
Spoiler alert, I ordered a MacBook Air
01:31:55
◼
►
in part because I want to send that laptop in for service
01:31:59
◼
►
and I wanna have something I can use
01:32:01
◼
►
as a spare in the meantime because right now
01:32:02
◼
►
I basically have no spares.
01:32:04
◼
►
I need a spare for both reasons like that,
01:32:07
◼
►
and also I want something I can run the beta on.
01:32:09
◼
►
And as a podcaster, not only am I obligated
01:32:12
◼
►
to buy everything Apple releases,
01:32:14
◼
►
so I can quote talk about it,
01:32:15
◼
►
but also as a podcaster, I'm required not to use
01:32:18
◼
►
a beta version of Mac OS on any computer
01:32:21
◼
►
I ever need to use to record podcasts.
01:32:23
◼
►
And so, I need a spare.
01:32:26
◼
►
- I've got Ventura, but it's on an external disk,
01:32:28
◼
►
and that's the other reason I reboot.
01:32:30
◼
►
I looked at all my uptime notes, and I realized,
01:32:31
◼
►
Oh, I was rebooting a venture to look at stuff before last week's show.
01:32:35
◼
►
Some guy writes, "What do you guys do when someone changes a phone number?
01:32:38
◼
►
I used to delete them, but if I ever search my past conversation, those messages show
01:32:42
◼
►
up as a phone number without a name.
01:32:44
◼
►
I guess this makes sense, since I deleted the number from my friend's contact, it's
01:32:47
◼
►
no longer associated with their name.
01:32:49
◼
►
Since then I used to keep two versions of a contact, one marked deprecated so I wouldn't
01:32:52
◼
►
lose our old conversations.
01:32:53
◼
►
However, iOS is so suggestive about merging contacts now that I can't do this anymore.
01:32:57
◼
►
I've tried labeling phone numbers as old phone, but iOS sometimes sends the message to the
01:33:01
◼
►
the old phone.
01:33:02
◼
►
For months I thought my mom didn't reply to my text messages.
01:33:05
◼
►
Turns out I was messaging her old phone.
01:33:07
◼
►
Is there a way to fix this without losing all the old messages I have with my mom?
01:33:10
◼
►
I gotta be honest with you, I've never had this problem when somebody changes a phone
01:33:13
◼
►
number which almost never happens anymore.
01:33:15
◼
►
I change their phone number in the contact and I have never run into an issue.
01:33:19
◼
►
Am I missing something?
01:33:20
◼
►
I run into this all the time, not just with phone numbers.
01:33:23
◼
►
It's a practice, I feel the same way.
01:33:25
◼
►
So I have, even for myself, just forget about contacts, just for myself, the "me" contact
01:33:29
◼
►
as they call it.
01:33:31
◼
►
everyone has screwed up on their phone by the way.
01:33:32
◼
►
We look at someone's phone and realize their me contact is nonsense and they have a separate
01:33:35
◼
►
contact for themselves.
01:33:36
◼
►
Anyway, I've had many email addresses over my life and I feel like the way contacts should
01:33:44
◼
►
work is I should be able to put every email address I've ever had in contacts so that
01:33:49
◼
►
when I'm looking at mail or something like that, if there's some email from decades ago,
01:33:54
◼
►
it knows that it was me because it says, "Oh, this email address at this company you used
01:33:57
◼
►
to work for dot com.
01:33:58
◼
►
Yeah, that's you.
01:33:59
◼
►
remember it's you because that address is in your contacts.
01:34:02
◼
►
But I would like to be able to tell contacts is,
01:34:04
◼
►
"Hey, these are the addresses that I'm using now
01:34:07
◼
►
"in priority order, and then these are my old addresses."
01:34:11
◼
►
That doesn't seem like rocket science,
01:34:13
◼
►
but contacts on Apple's platforms has no idea about that.
01:34:16
◼
►
You can set them to home or work or old phone or other,
01:34:18
◼
►
but like, I have no idea.
01:34:21
◼
►
For instance, when I type in A-L-E,
01:34:23
◼
►
I try to autocomplete Alex to message him,
01:34:26
◼
►
it always offers me his phone number.
01:34:28
◼
►
And yeah, you can tap through it and pick like his iCloud
01:34:31
◼
►
email address so I can do message or whatever.
01:34:33
◼
►
But it just makes me do that every time.
01:34:35
◼
►
Other people, it suggests their email address.
01:34:37
◼
►
Very often when people are messaging me
01:34:39
◼
►
and in their contacts they have five of my email addresses
01:34:42
◼
►
plus my phone number, what does this suggest to them?
01:34:44
◼
►
Does it suggest my phone number?
01:34:45
◼
►
Does it suggest one of my email addresses?
01:34:46
◼
►
If so, which email address?
01:34:47
◼
►
I have no idea how contacts is choosing
01:34:49
◼
►
between these things.
01:34:50
◼
►
Please, Apple, in your contacts,
01:34:53
◼
►
A, let us mark addresses as like old historical reasons
01:34:56
◼
►
just so it can continue to associate them
01:34:58
◼
►
with our name correctly.
01:34:59
◼
►
And B, let us prioritize the order.
01:35:02
◼
►
Primary email, secondary email.
01:35:03
◼
►
I know you can label the home at work,
01:35:05
◼
►
but that apparently means nothing
01:35:06
◼
►
because I have no idea how it picks.
01:35:07
◼
►
Why does it pick a phone number for my son
01:35:09
◼
►
but the email address for my daughter?
01:35:10
◼
►
They both have phone numbers and email addresses.
01:35:12
◼
►
How is it picking?
01:35:13
◼
►
If I keep repeatedly manually picking email address,
01:35:15
◼
►
will it eventually learn?
01:35:18
◼
►
Very frustrating.
01:35:19
◼
►
I feel this pain.
01:35:20
◼
►
To answer the question, no, I don't delete them.
01:35:21
◼
►
I leave them in there because it annoys me
01:35:23
◼
►
if I go through some old email
01:35:25
◼
►
and it doesn't have my name associated with it anymore.
01:35:27
◼
►
It should know that I used to work at oldcompany.com forever.
01:35:31
◼
►
And I don't understand why I should have to lie to it
01:35:33
◼
►
and delete that and have it not know
01:35:35
◼
►
that those email addresses belong to me anymore.
01:35:37
◼
►
- Carl Rosas writes, "With all the talk
01:35:39
◼
►
"about Twitter recently," and I should add
01:35:41
◼
►
that this was sent in a couple of months back,
01:35:43
◼
►
"I'm just curious, what would it take for you
01:35:44
◼
►
"to stop reading Twitter regularly?
01:35:46
◼
►
"What would it take for you to stop posting
01:35:47
◼
►
"to Twitter regularly?
01:35:48
◼
►
"What alternatives would you consider?"
01:35:50
◼
►
Oh, I am addicted to that hell site,
01:35:53
◼
►
There's nothing you can take over my cold dead hands.
01:35:55
◼
►
Now, I honestly don't know.
01:35:57
◼
►
I really don't.
01:35:58
◼
►
Like, it's a reasonable question
01:35:59
◼
►
to which I don't have a good answer.
01:36:00
◼
►
I'm sure some way, somehow,
01:36:02
◼
►
there could be something that breaks
01:36:04
◼
►
that causes me to stop using it.
01:36:06
◼
►
But honestly, as awful as Twitter can be,
01:36:10
◼
►
it's also kind of amazing.
01:36:12
◼
►
This sounds like SwiftUI.
01:36:13
◼
►
So SwiftUI is like Twitter.
01:36:14
◼
►
That's the takeaway from today's episode, everyone.
01:36:17
◼
►
- SwiftUI is way better than Twitter.
01:36:20
◼
►
- But I don't know.
01:36:21
◼
►
I feel like I post considerably less often than I used to, which is probably healthy
01:36:29
◼
►
But I don't know, I still interact with friends on Twitter.
01:36:32
◼
►
I still get almost all my news from Twitter, which is, again, probably not healthy.
01:36:38
◼
►
I don't know.
01:36:39
◼
►
There's nothing that I've found that has effectively replaced it.
01:36:44
◼
►
And I think there are alternatives I could and would turn to, like micro.blog.
01:36:50
◼
►
But I don't know, I can't wean myself off of it
01:36:54
◼
►
no matter how hard I try.
01:36:56
◼
►
- I'll start with the end of the question
01:36:57
◼
►
and work backwards.
01:36:58
◼
►
What alternatives would you consider?
01:37:01
◼
►
This is kind of the key for me,
01:37:02
◼
►
because we've seen alternatives to Twitter pop up
01:37:06
◼
►
here and there over the years.
01:37:07
◼
►
Most notably, I think, was App.net,
01:37:09
◼
►
and now there's Mastodon and stuff like that.
01:37:12
◼
►
You mentioned Microblog.
01:37:13
◼
►
I think it's not quite an alternative.
01:37:14
◼
►
It's kind of a different thing,
01:37:15
◼
►
but it's in the ballpark, I think.
01:37:17
◼
►
But ultimately, the ones that are more direct replacements,
01:37:20
◼
►
Mastodon and formerly App.net.
01:37:22
◼
►
The reason why App.net didn't work
01:37:26
◼
►
and why I think Mastodon is always gonna be
01:37:28
◼
►
kind of a specialty thing and not really ever
01:37:31
◼
►
a mass market thing or a replacement for Twitter
01:37:33
◼
►
in almost any way for almost anybody
01:37:35
◼
►
is that the network effect is very strong
01:37:37
◼
►
with this kind of thing and you don't really want
01:37:40
◼
►
to leave social network for a much, much, much smaller one
01:37:45
◼
►
for most reasons.
01:37:47
◼
►
Now sometimes you do want that.
01:37:48
◼
►
Sometimes you want like a small group kind of thing,
01:37:50
◼
►
but usually when you want something to be smaller,
01:37:54
◼
►
usually you want it to be private.
01:37:56
◼
►
And so when you think about alternatives to Twitter,
01:38:00
◼
►
for me, I have greatly reduced my Twitter usage
01:38:03
◼
►
in recent years, in part because it's a hellscape,
01:38:07
◼
►
and I'll get to that in a second,
01:38:08
◼
►
but also in part because I've been spending
01:38:11
◼
►
so much more time in private Slack and iMessage groups,
01:38:15
◼
►
And I've been putting more stuff in other social networks
01:38:18
◼
►
like Instagram that are kind of more,
01:38:20
◼
►
like more what I'm going for at that moment.
01:38:24
◼
►
I don't post on TikTok.
01:38:26
◼
►
I do occasionally watch TikTok,
01:38:28
◼
►
but I don't participate in it as a social network
01:38:31
◼
►
in terms of producing.
01:38:32
◼
►
So I'm only producing stuff on Twitter and Instagram.
01:38:37
◼
►
And I've never used Snapchat.
01:38:39
◼
►
I don't think they would let me in.
01:38:40
◼
►
I think I'm too old.
01:38:41
◼
►
And even if they did, I wouldn't know how to use it.
01:38:43
◼
►
I barely understand how to use Instagram at this point.
01:38:47
◼
►
Anyway, so I think what Twitter,
01:38:52
◼
►
where the role Twitter has that I think would be hard
01:38:56
◼
►
for me to replace it is in promoting stuff I do
01:39:01
◼
►
and getting good questions answered from,
01:39:06
◼
►
if I have a question like,
01:39:07
◼
►
hey, why doesn't this thing work in SwiftUI?
01:39:09
◼
►
I know I can post it on Twitter
01:39:10
◼
►
and I can probably get an answer to that.
01:39:13
◼
►
Or when something is happening right now
01:39:15
◼
►
and I wanna know about it,
01:39:16
◼
►
that's a place I know that I can go
01:39:18
◼
►
and get updates constantly flooding in.
01:39:20
◼
►
Now that being said,
01:39:21
◼
►
in my time at Tumblr,
01:39:24
◼
►
I would occasionally hear people complain like,
01:39:27
◼
►
"Oh, Tumblr's really mad today."
01:39:29
◼
►
And what that meant was the people I follow on Tumblr
01:39:34
◼
►
are posting really mad things right now.
01:39:36
◼
►
But that's a very different thing than the entire service.
01:39:40
◼
►
The people you choose to follow
01:39:42
◼
►
and, correspondingly, what you choose to post.
01:39:45
◼
►
You know, people often complain that they're in traffic.
01:39:49
◼
►
They don't usually complain that they are traffic.
01:39:52
◼
►
You know, when you say like,
01:39:53
◼
►
Twitter's only mad right now,
01:39:54
◼
►
well if you're posting, getting all mad,
01:39:55
◼
►
or retweeting everyone else's mad stuff,
01:39:57
◼
►
you're also part of that.
01:39:58
◼
►
Anyway, so backing that up a second,
01:40:00
◼
►
Twitter, when we say like, you know,
01:40:02
◼
►
Twitter is negative or upset or dangerous or whatever,
01:40:06
◼
►
usually what we're talking about is
01:40:08
◼
►
what we've chosen to follow on Twitter.
01:40:11
◼
►
And that's mostly within our control.
01:40:14
◼
►
Now, Twitter's a little bit different in the sense that
01:40:16
◼
►
stuff that you post very easily spreads to other people
01:40:20
◼
►
who maybe you didn't want necessarily for it to spread to,
01:40:24
◼
►
and you can get like piled on from someone else's audience
01:40:27
◼
►
if they retweet your thing,
01:40:28
◼
►
and they have a terrible audience.
01:40:30
◼
►
That happens a lot, especially around things like
01:40:34
◼
►
electronic currency and electronic car makers.
01:40:37
◼
►
In general, Twitter is for the most part
01:40:40
◼
►
what you choose to follow.
01:40:42
◼
►
It's what you're choosing to look at.
01:40:44
◼
►
And you can say like, oh, I have to keep up with the news,
01:40:48
◼
►
like all this stuff going on with politics
01:40:51
◼
►
and world events, it's like, I have to watch this stuff.
01:40:53
◼
►
Well, you actually don't.
01:40:55
◼
►
It is fully within your control.
01:40:56
◼
►
Like if you are being brought down and burnt out
01:41:00
◼
►
and made angry all the time by the political stuff
01:41:04
◼
►
you're seeing on Twitter, you can just unfollow those people.
01:41:08
◼
►
If for political reasons maybe you can't unfollow them,
01:41:11
◼
►
You can mute them forever.
01:41:12
◼
►
You can mute them for a month and revisit them.
01:41:15
◼
►
If you use certain clients with more advanced options,
01:41:18
◼
►
like especially Twitterific is really good for this.
01:41:20
◼
►
Twitterific has the Muffle feature and the Mute feature.
01:41:23
◼
►
Tweetbot has a bunch of advanced muting features as well.
01:41:27
◼
►
So you can actually mute or muffle topics or keywords
01:41:30
◼
►
or regular expressions.
01:41:32
◼
►
And so you can customize this experience
01:41:34
◼
►
to not see the things you really don't wanna see,
01:41:39
◼
►
or to minimize them,
01:41:40
◼
►
or to get rid of the most egregious offenders.
01:41:43
◼
►
Most of the problem people have with Twitter
01:41:47
◼
►
is more a problem in the reading sense.
01:41:50
◼
►
The writing sense is a little bit different,
01:41:51
◼
►
but in the reading sense,
01:41:52
◼
►
when you have a problem reading Twitter,
01:41:54
◼
►
that's usually because the people who you're following,
01:41:58
◼
►
it's not making you feel good to read their stuff,
01:42:00
◼
►
or it's a burden on your mind,
01:42:03
◼
►
or it's too invasive in your life.
01:42:06
◼
►
And you can just unfollow those people
01:42:07
◼
►
or mute them or go a different direction.
01:42:09
◼
►
You don't have to worry about making people feel bad.
01:42:11
◼
►
They're not watching, they don't care.
01:42:12
◼
►
If you wanna follow somebody who knows you,
01:42:15
◼
►
chances are they'll never know.
01:42:16
◼
►
Unless they use one of those really sad services
01:42:19
◼
►
that alerts them when people unfollow them,
01:42:20
◼
►
in which case you don't need that person in your life.
01:42:24
◼
►
And again, you can also just mute somebody forever
01:42:27
◼
►
if you really quote can't unfollow them.
01:42:30
◼
►
But make it what you wanna see.
01:42:32
◼
►
So if you're seeing too much negativity,
01:42:34
◼
►
which that's where I am,
01:42:36
◼
►
I wanna follow almost no world news right now.
01:42:40
◼
►
And so I just don't, and it's fine.
01:42:43
◼
►
I'm not a Twitter completionist,
01:42:44
◼
►
and I don't read most of my timeline.
01:42:47
◼
►
So normally, like when I, I'll read all my mentions,
01:42:50
◼
►
and then on my main timeline, I'll just scroll to the top
01:42:53
◼
►
and read some stuff here and there.
01:42:54
◼
►
I'm not seeing most of it.
01:42:56
◼
►
That's it, it's fine.
01:42:57
◼
►
Now on the writing side, again, on the writing side,
01:42:59
◼
►
it's very easy to step on a landmine
01:43:02
◼
►
without even realizing it on Twitter
01:43:03
◼
►
and have the whole world explode at you.
01:43:07
◼
►
And so if you are concerned about that,
01:43:11
◼
►
and you probably should be if anybody sees your tweets,
01:43:13
◼
►
if you have any followers at all
01:43:15
◼
►
or if somebody might retweet them who does have followers,
01:43:18
◼
►
if you're concerned about having the world explode at you,
01:43:22
◼
►
don't write anything of substance.
01:43:24
◼
►
Don't write anything on there that is supposed to be a joke,
01:43:29
◼
►
Maybe it's a little subtle.
01:43:30
◼
►
Don't write anything on it that's controversial.
01:43:32
◼
►
Don't write about current controversial events or news.
01:43:36
◼
►
All the negativity there is very easy to avoid.
01:43:40
◼
►
Just don't post.
01:43:41
◼
►
And if you insist on posting,
01:43:43
◼
►
then keep to tech stuff, technical questions.
01:43:48
◼
►
Hey, what's with Swift UI these days?
01:43:50
◼
►
That kind of stuff.
01:43:52
◼
►
Don't engage in the really violent politics
01:43:56
◼
►
and stuff like that.
01:43:59
◼
►
the world provides an infinite supply of awful news
01:44:01
◼
►
and awful people doing awful things.
01:44:03
◼
►
You don't have to feed into it,
01:44:04
◼
►
you don't have to read it all.
01:44:06
◼
►
You're not doing any civic justice
01:44:09
◼
►
or doing your civic duty by reading every single bit
01:44:13
◼
►
of bad commentary about every bad thing
01:44:14
◼
►
that happens in the world.
01:44:16
◼
►
You don't need to do that, that's not your job.
01:44:18
◼
►
And if it's better for your mental health
01:44:20
◼
►
to not be part of that, just don't be part of that.
01:44:24
◼
►
It's easier said than done sometimes.
01:44:27
◼
►
So what it would take for me to leave Twitter
01:44:31
◼
►
would be if that stopped being possible.
01:44:34
◼
►
That if it stopped being possible for me
01:44:36
◼
►
to get only what I wanted out of it and not more.
01:44:41
◼
►
Now I have already left Twitter partially,
01:44:44
◼
►
as I mentioned earlier, in the sense that like,
01:44:46
◼
►
if I have some funny joke to say,
01:44:48
◼
►
or well, if I have something I think might be funny to say,
01:44:51
◼
►
I tend to say that kind of stuff privately these days.
01:44:53
◼
►
Because this is not a good time for humor.
01:44:56
◼
►
Everyone's very sensitive about everything
01:44:57
◼
►
and I don't wanna accidentally step on a landmine
01:44:59
◼
►
and have my entire world explode.
01:45:00
◼
►
So stuff like fun jokes between friends,
01:45:03
◼
►
you know what, Twitter's no longer a fun place,
01:45:05
◼
►
so I'll just say that in private channels.
01:45:09
◼
►
Or stuff that's a little bit more personal,
01:45:13
◼
►
about hey, here's what my family's doing these days,
01:45:16
◼
►
that'll probably go on Instagram,
01:45:17
◼
►
because I have a more kind of family
01:45:19
◼
►
and real life audience over there,
01:45:22
◼
►
so that's probably what would go there.
01:45:24
◼
►
but I'm still using Twitter,
01:45:27
◼
►
I'm just using it more for work stuff.
01:45:30
◼
►
And that's fine.
01:45:31
◼
►
And when you're using it for work stuff,
01:45:34
◼
►
it's fairly boring in a good way.
01:45:38
◼
►
So as long as it's still possible for me
01:45:41
◼
►
to use it for work stuff,
01:45:42
◼
►
and it is still beneficial for my work to do that,
01:45:46
◼
►
I'm gonna keep using it.
01:45:47
◼
►
- What would it take for me to stop reading?
01:45:50
◼
►
I mean, it's simple.
01:45:51
◼
►
It would have to be not delivering value for me,
01:45:53
◼
►
which is a business-y phrase or whatever,
01:45:55
◼
►
it was just like what Margo said,
01:45:56
◼
►
like there are things I get from Twitter
01:45:58
◼
►
and if I could no longer get them
01:46:00
◼
►
or didn't get them from Twitter, I would stop.
01:46:03
◼
►
It's, you know, I'm doing what most people do.
01:46:05
◼
►
It's not like a very complicated decision.
01:46:06
◼
►
It's like, is this a thing where, do I find this valuable?
01:46:10
◼
►
And yes, I find Twitter tremendously valuable.
01:46:12
◼
►
Now, Margo was saying is like,
01:46:14
◼
►
then the reason Rui complains about Twitter
01:46:16
◼
►
is all that advice you gave about like,
01:46:18
◼
►
you know, being careful what you say
01:46:21
◼
►
and avoid saying certain things or whatever,
01:46:23
◼
►
to the extent that you have to do that
01:46:25
◼
►
and to the extent that the possible blowback
01:46:28
◼
►
from being too loose is disproportionate,
01:46:32
◼
►
that's why people think Twitter is a bad place to be
01:46:34
◼
►
because you don't want it to feel like a hostile environment
01:46:36
◼
►
where you have to be very careful
01:46:39
◼
►
that someone doesn't retweet your thing
01:46:41
◼
►
into some section of the internet
01:46:43
◼
►
that would otherwise not know you exist
01:46:45
◼
►
but suddenly decides to dog pile you, right?
01:46:48
◼
►
And Twitter, the company, has been trying to fight against that for a while with varying
01:46:54
◼
►
degrees of success.
01:46:56
◼
►
But that, you know, so that I'm going to say I'm not saying that just because I find Twitter
01:47:00
◼
►
valuable doesn't have problems.
01:47:01
◼
►
It absolutely has problems, right?
01:47:02
◼
►
And the design of the network has at various times exacerbated or helped with those problems
01:47:06
◼
►
and leadership can really help solve them.
01:47:09
◼
►
But I do feel like having been on Twitter for so long now, I have built up a lot of
01:47:15
◼
►
value there in terms of the people who I follow and who follow me.
01:47:19
◼
►
That didn't happen just overnight, right?
01:47:21
◼
►
It took whatever it is, a decade and a half or however long I've been on Twitter, to get
01:47:26
◼
►
that balance right.
01:47:28
◼
►
And the people who follow me are a big part of that value.
01:47:32
◼
►
Whatever I've done to make them follow me, they do see my tweets and sometimes they respond,
01:47:36
◼
►
and that is very valuable to me, and that's not something you can kind of get overnight.
01:47:39
◼
►
So I would never want to give that up unless Twitter became really invaluable to me.
01:47:42
◼
►
But I do want to acknowledge that that's not easy.
01:47:45
◼
►
It's not easy to get to that point.
01:47:47
◼
►
And it kind of sucks that you have to be so aware of the slightly hostile environment.
01:47:52
◼
►
In some ways, Twitter is also a reflection of the current of the world, right?
01:47:56
◼
►
And if the world is in a crappy situation, then so is Twitter.
01:47:58
◼
►
And that kind of makes sense, right?
01:47:59
◼
►
And that's part of the beauty of Twitter is that it is actually a bit of a less filtered
01:48:06
◼
►
mirror of what people are thinking.
01:48:09
◼
►
or let's put it this way, voices that you otherwise
01:48:11
◼
►
would never have heard before,
01:48:13
◼
►
whether they be directly talking to a celebrity
01:48:16
◼
►
or talking to some person in a marginalized group
01:48:19
◼
►
you would never encounter and would have no idea
01:48:21
◼
►
what their respective is, Twitter allows you
01:48:23
◼
►
to make those kinds of connections.
01:48:25
◼
►
But of course, Twitter can also be exploited by bad actors
01:48:27
◼
►
to magnify their bad effects as well.
01:48:29
◼
►
So it's the blessing and the curse of Twitter.
01:48:31
◼
►
Overall, in my life, Twitter is a huge net positive,
01:48:35
◼
►
but I feel like across the entire world,
01:48:40
◼
►
the jury's still out, it's definitely closer to 50/50
01:48:43
◼
►
about the harm caused by Twitter and the value.
01:48:45
◼
►
I still lean more towards the value
01:48:47
◼
►
because I feel like being able,
01:48:49
◼
►
giving a voice to people who didn't have one
01:48:51
◼
►
is probably more than offsets the giving bad actors
01:48:56
◼
►
yet another tool for them to be bad.
01:49:00
◼
►
Because bad actors will always find a way to be bad.
01:49:01
◼
►
They'll invent their own outlet if they have to,
01:49:04
◼
►
Fox News. So Twitter is not entirely to blame for that. But I do enjoy the things I get out
01:49:09
◼
►
of Twitter that I did not get before Twitter. Did I get anywhere really, and still find value in
01:49:16
◼
►
that. And what alternatives would I consider? Like Margot said, it's like, you know, it's network
01:49:20
◼
►
effect, like this network I've built up on Twitter, I would have to rebuild that elsewhere. And that
01:49:25
◼
►
is even assuming everybody, quote unquote, everybody would agree to go to that elsewhere.
01:49:29
◼
►
The alternatives that most people have both considered and used are very tiny subsets of
01:49:35
◼
►
Twitter like a private Slack or a Discord or you know a big iMessage group or whatever.
01:49:40
◼
►
Those are not replacements for Twitter. Those are alternatives to Twitter but it's easy to get them
01:49:45
◼
►
up and running because you just need a handful of people in them. But there's you know to get
01:49:49
◼
►
something like Twitter you'd have to you know somehow get all those people to move over to
01:49:54
◼
►
the other thing or make Twitter go away or Twitter makes itself so bad that everybody leaves and goes
01:49:58
◼
►
somewhere else, but we're not there yet.
01:50:01
◼
►
- And we're not talking about that guy who, you know,
01:50:04
◼
►
we're not talking about that because--
01:50:05
◼
►
- We'll talk about that if it ever comes to some kind
01:50:07
◼
►
of conclusion, probably in a humorous after show.
01:50:10
◼
►
- Just F that guy, and I hope he loses big.
01:50:12
◼
►
I hope he has to pay them a billion dollars.
01:50:14
◼
►
He deserves it.
01:50:15
◼
►
Anyway, thank you to our sponsors this week.
01:50:17
◼
►
Linode, Hover, and the Stack Overflow podcast.
01:50:20
◼
►
Thank you to our members who support us directly.
01:50:22
◼
►
You can join at atp.fm/join,
01:50:25
◼
►
and we will talk to you next week.
01:50:27
◼
►
Now the show is over, they didn't even mean to begin
01:50:34
◼
►
'Cause it was accidental, oh it was accidental
01:50:39
◼
►
John didn't do any research, Marco and Casey wouldn't let him
01:50:44
◼
►
'Cause it was accidental, oh it was accidental
01:50:50
◼
►
And you can find the show notes at ATP.fm
01:50:55
◼
►
And if you're into Twitter, you can follow them
01:51:00
◼
►
@C-A-S-E-Y-L-I-S-S
01:51:04
◼
►
So that's Kasey Liss M-A-R-C-O-A-R-M
01:51:09
◼
►
Auntie Marco Arment S-I-R-A-C
01:51:14
◼
►
USA, Syracuse, it's accidental
01:51:19
◼
►
They didn't mean to, accidental
01:51:24
◼
►
♪ We've got no tech broadcast so long ♪
01:51:28
◼
►
- Since we're apparently in a really good mood tonight,
01:51:33
◼
►
let's talk about something that I'm super excited about.
01:51:35
◼
►
And by excited, I mean, I find to be disgusting.
01:51:39
◼
►
BMW is charging seat heater subscriptions
01:51:41
◼
►
in some parts of the world.
01:51:42
◼
►
This is reported in many places,
01:51:46
◼
►
but this includes the Verge.
01:51:48
◼
►
We'll put a link in the show notes.
01:51:49
◼
►
The Verge writes, "A monthly subscription
01:51:51
◼
►
to heat your BMW's front seats costs $18,
01:51:53
◼
►
with options to subscribe for a year at $180,
01:51:57
◼
►
three years at $300, or pay for unlimited access for $415.
01:52:02
◼
►
Other features that BMW is locking behind subscriptions
01:52:04
◼
►
as per the company's digital UK store
01:52:06
◼
►
include heated steering wheels from $12 a month,
01:52:08
◼
►
the option to record footage from your car's cameras
01:52:10
◼
►
priced at $235 for unlimited use,
01:52:13
◼
►
and the iconic sound support package,
01:52:15
◼
►
which lets you play engine sounds in your car
01:52:16
◼
►
for a one-time fee of $117.
01:52:19
◼
►
In the latter case, BMW notes that, quote,
01:52:21
◼
►
"The hardware for this feature
01:52:22
◼
►
has already been installed in your vehicle during production at no extra cost. How generous.
01:52:27
◼
►
The thing that blows me away about this are the prices. $18 a month for seed heaters? $12 a month
01:52:36
◼
►
for heated steering wheel? Like I know these are expensive vehicles and their whole strategy,
01:52:41
◼
►
which they come out and say, I think Mercedes person just came out and say it, it's like,
01:52:44
◼
►
look, these prices are below the notice of the people who buy our cars because they have a lot
01:52:47
◼
►
of money. But just, you know, I'm sure we all have met people who are very wealthy, but also
01:52:52
◼
►
don't want to pay a lot for this muffler,
01:52:54
◼
►
people feel ripped off.
01:52:56
◼
►
They say that's how much,
01:52:57
◼
►
they're grumbling about paying that much for a Netflix.
01:52:59
◼
►
And you're gonna pay 18 for the seat
01:53:01
◼
►
and 12 for the steering wheel every single month?
01:53:04
◼
►
And to be clear, for the people who don't understand
01:53:06
◼
►
what we're talking about here,
01:53:07
◼
►
you still have to pay for that stuff to be in your car.
01:53:11
◼
►
It's not like they give you the seat heaters for free
01:53:14
◼
►
or the steering wheel heater for free.
01:53:15
◼
►
Like, you're paying for that when you pay for the car.
01:53:19
◼
►
It's not like say, well, we're just shifting the cost,
01:53:21
◼
►
because otherwise if people didn't pay for a BMW,
01:53:24
◼
►
we lose money, that's not what they do, right?
01:53:25
◼
►
So the hardware is there, just so we're clear.
01:53:28
◼
►
The heaters are in the seat,
01:53:29
◼
►
the heaters are in the steering wheel.
01:53:31
◼
►
There's a button somewhere on a touchscreen
01:53:33
◼
►
that when you press it,
01:53:34
◼
►
is supposed to allow electricity to flow to those things,
01:53:36
◼
►
but it will not allow the electricity to flow to those things
01:53:39
◼
►
unless you have an up-to-date paid subscription for them.
01:53:43
◼
►
This is a terrible idea and I hope nobody goes for it
01:53:47
◼
►
and I hope it's a dismal failure
01:53:49
◼
►
because not only do I want this to fail,
01:53:52
◼
►
I can't imagine this becoming the status quo
01:53:55
◼
►
in the car industry because everybody who hears this story
01:53:58
◼
►
viscerally hates it.
01:54:00
◼
►
- I can see where they're coming from
01:54:02
◼
►
because if you look at the full price,
01:54:05
◼
►
you know, the seat heater,
01:54:06
◼
►
if you want a seat heater, unlimited access quote,
01:54:10
◼
►
400 bucks, right?
01:54:11
◼
►
Well, what is the option for heated seats cost in a BMW?
01:54:14
◼
►
It's probably about 400 bucks.
01:54:16
◼
►
- But you're already paying that to get the seat heaters.
01:54:19
◼
►
They want you to pay a second time.
01:54:21
◼
►
- Right, and so I think what we're seeing here,
01:54:23
◼
►
obviously in a regular sale of a regular car,
01:54:29
◼
►
it doesn't cost them $400 to add seat heaters.
01:54:33
◼
►
I think the reality of what we're seeing here
01:54:34
◼
►
is that these options were already costing them
01:54:38
◼
►
almost nothing, and they were just nice,
01:54:41
◼
►
high-profit add-on sales.
01:54:43
◼
►
Lots of the world works that way.
01:54:44
◼
►
Apple does it too.
01:54:46
◼
►
There's high-profit add-on sales.
01:54:47
◼
►
You think those leather cases Apple sells you
01:54:49
◼
►
for 50 or 60 bucks cost anywhere near that for them to make?
01:54:54
◼
►
There's always like high profit add-ons,
01:54:55
◼
►
extended warranties, you know,
01:54:57
◼
►
those don't cost people very much.
01:54:58
◼
►
- They call them options in the car,
01:54:59
◼
►
and the Porsche is the king of options.
01:55:01
◼
►
Their options have no connection to what they actually cost,
01:55:03
◼
►
but the whole point of those options is
01:55:05
◼
►
you can buy them or not, and you just pay for them once.
01:55:07
◼
►
And I think the real reason they wanna do this,
01:55:09
◼
►
aside from like recurring revenue is great
01:55:11
◼
►
for the balance sheet or whatever,
01:55:12
◼
►
is that when you sell the car to somebody,
01:55:14
◼
►
when you sell a car that someone paid for
01:55:16
◼
►
like some a bunch of weird options,
01:55:18
◼
►
those options go with the car.
01:55:19
◼
►
The person who buys them from you
01:55:20
◼
►
can use all those options.
01:55:22
◼
►
If you sell a car like this,
01:55:23
◼
►
now BMW has a new person paying for that.
01:55:26
◼
►
Like their revenue that they never would have gotten.
01:55:29
◼
►
BMW would never have gotten part of that car sale.
01:55:31
◼
►
Now when they sell it to somebody else,
01:55:32
◼
►
if that guy wants the seat at his work,
01:55:33
◼
►
it's gotta pay $18 a month,
01:55:35
◼
►
just like you were paying that.
01:55:37
◼
►
And you get to stop paying it
01:55:38
◼
►
and then a new person gets to start paying it.
01:55:39
◼
►
It's, pfft, no.
01:55:42
◼
►
I mean, and since this is all just hardware and software,
01:55:44
◼
►
you know there's gonna be hacks to just get around this
01:55:46
◼
►
or whatever, so now people can be jailbreaking their cars
01:55:47
◼
►
so they can hit their butts?
01:55:49
◼
►
- I see why they are trying this.
01:55:53
◼
►
I also think this is a massive failure to read the room
01:55:58
◼
►
because it sounds like a joke about BMW owners.
01:56:01
◼
►
Like this sounds like a parody.
01:56:02
◼
►
This sounds like something that they would never actually do
01:56:04
◼
►
but The Onion would write an article about.
01:56:06
◼
►
So I don't think BMW realizes how this looks to the world.
01:56:11
◼
►
And maybe, I don't know, maybe in certain areas
01:56:15
◼
►
that people don't care.
01:56:16
◼
►
Maybe their customers actually aren't mostly like us.
01:56:18
◼
►
- But that's the thing about rich people though.
01:56:21
◼
►
They want the fancy thing,
01:56:22
◼
►
and they'll pay the Porsche option prices for it,
01:56:25
◼
►
but they don't want to feel
01:56:26
◼
►
like they're being nickeled in time.
01:56:27
◼
►
In many ways, I feel like someone who's buying
01:56:29
◼
►
a fancy car like this would much rather pay five times
01:56:32
◼
►
as much to buy it up front,
01:56:34
◼
►
and then sell the car after three years,
01:56:36
◼
►
than to pay one fifth the price, but pay it monthly.
01:56:38
◼
►
Because one of them feels like a more luxurious experience.
01:56:41
◼
►
Let me pay, or ridiculously overpay for this option.
01:56:45
◼
►
You want the black stitched logos on the headrest.
01:56:49
◼
►
That'll be $7,000, all right?
01:56:51
◼
►
I'll pay you that.
01:56:52
◼
►
I feel like I'm a rich person
01:56:54
◼
►
and buying a rich person thing, right?
01:56:56
◼
►
And then the car will go down in value
01:56:58
◼
►
like 80% in the first year I own it, right?
01:57:00
◼
►
But whatever, that feels like a luxury experience.
01:57:02
◼
►
What doesn't feel like a luxury experience
01:57:04
◼
►
is to take your car home and to be nickeled and dimed
01:57:06
◼
►
for signing up for subscriptions
01:57:07
◼
►
for features that are supposedly in the car.
01:57:09
◼
►
Forget about the absolute values of,
01:57:10
◼
►
yeah, but this is cheaper than the other one.
01:57:12
◼
►
Forget about that.
01:57:13
◼
►
That's not, the sort of luxury experience is not like,
01:57:17
◼
►
let me see where every penny is going.
01:57:20
◼
►
You just want to spend way too much money
01:57:23
◼
►
and get a very nice thing
01:57:24
◼
►
and not have to think about it again.
01:57:25
◼
►
The not having to think about it,
01:57:27
◼
►
that is part of the luxury experience.
01:57:29
◼
►
When I go bring my car to the dealer,
01:57:30
◼
►
I always get a loaner 'cause I have a Mercedes
01:57:32
◼
►
and the loaner is nice.
01:57:33
◼
►
You're paying for all of that
01:57:35
◼
►
when you overpay for your car, right?
01:57:37
◼
►
That feels nice.
01:57:39
◼
►
It feels better to pay more
01:57:40
◼
►
and then to not have to think about it.
01:57:41
◼
►
It's like all-inclusive vacations
01:57:43
◼
►
or other things where you don't wanna have to think about,
01:57:45
◼
►
you know, each little bit, give a little money,
01:57:47
◼
►
give a little money.
01:57:48
◼
►
You just wanna say, here, I'm very wealthy,
01:57:49
◼
►
here's a wad of money up front,
01:57:51
◼
►
and in exchange for that,
01:57:53
◼
►
I don't have to think about this stuff anymore.
01:57:54
◼
►
And that's the opposite of the BMW experience,
01:57:56
◼
►
that it is a less luxurious experience for people,
01:57:59
◼
►
even if it actually saves them money.
01:58:00
◼
►
That's the thing about this,
01:58:01
◼
►
people are gonna do the numbers and say,
01:58:02
◼
►
well, if you do the math,
01:58:04
◼
►
it's much cheaper to own it this way.
01:58:05
◼
►
But it doesn't feel BMW, it doesn't feel Mercedes,
01:58:08
◼
►
it doesn't feel like a luxury experience,
01:58:10
◼
►
even if it is less expensive.
01:58:11
◼
►
So this is terrible for actual regular car companies,
01:58:16
◼
►
Honda, Toyota, Ford, GM.
01:58:20
◼
►
They should never do this because regular people
01:58:22
◼
►
don't have this kind of money to be spending
01:58:24
◼
►
on their steering wheel heater every month.
01:58:26
◼
►
That's ridiculous, right?
01:58:27
◼
►
And then the luxury brands, they shouldn't do it
01:58:29
◼
►
because it's annoying and it subverts their brand.
01:58:32
◼
►
It makes them feel chintzy.
01:58:33
◼
►
It makes them feel like, I don't know,
01:58:36
◼
►
like they're cheating you.
01:58:37
◼
►
It makes you feel ripped off.
01:58:38
◼
►
It makes you feel like, what did I pay all this money for
01:58:41
◼
►
to be treated like this.
01:58:42
◼
►
- Right, 'cause it's so much about pricing and value
01:58:46
◼
►
is perceptual and subjective and more about
01:58:51
◼
►
what people think is the principle of the matter
01:58:54
◼
►
than the actual numbers involved.
01:58:56
◼
►
And we see this with things like app and service pricing
01:58:59
◼
►
in our tech world where people who will spend $1,000
01:59:03
◼
►
on their phone every couple of years
01:59:05
◼
►
will balk at spending $3 a year on an app
01:59:08
◼
►
that does something they use every day.
01:59:10
◼
►
- $2.99, if it was 99 cents, maybe.
01:59:13
◼
►
- Right, there's all the psychology that goes along
01:59:16
◼
►
with pricing and value, and this, I think you're right,
01:59:19
◼
►
not only is it less luxurious to feel like
01:59:21
◼
►
you're being nickeled and dimed for stuff
01:59:23
◼
►
that you think you should deserve,
01:59:25
◼
►
especially since the hardware's already there,
01:59:27
◼
►
but this also, assuming that you ship every car
01:59:30
◼
►
with the hardware in it, and then you can just
01:59:31
◼
►
turn it on for 400 bucks, it breaks the illusion.
01:59:36
◼
►
What you're saying a minute ago, the illusion of
01:59:39
◼
►
you're buying the car and you want that nice option package
01:59:43
◼
►
'cause it gives you that nice luxurious thing that you want
01:59:45
◼
►
or it gives you this cool trim on this piece
01:59:48
◼
►
that looks nicer and feels better
01:59:49
◼
►
and maybe matches your preferred color scheme
01:59:52
◼
►
a little better or whatever else
01:59:53
◼
►
and maybe you get the sunroof and the fancy
01:59:56
◼
►
butt heaters and everything else.
01:59:58
◼
►
When you pay that option price for that,
02:00:00
◼
►
when you make that decision up front,
02:00:01
◼
►
which you're way more likely to do then
02:00:03
◼
►
than you will on a monthly basis later,
02:00:06
◼
►
so I think they won't even sell many of these things anyway,
02:00:08
◼
►
But when you buy that up front in that option package,
02:00:10
◼
►
you are, you're accepting an illusion
02:00:14
◼
►
that these options cost this much money.
02:00:17
◼
►
And it's totally wrong, they don't really cost that much.
02:00:20
◼
►
- It's like Apple and RAM.
02:00:21
◼
►
- Right, exactly, like Apple and all of their spec upgrades
02:00:23
◼
►
basically, you know, you are buying the illusion
02:00:27
◼
►
that okay, you know what, sure, I'll spend the extra
02:00:30
◼
►
couple thousand bucks to get the sunroof
02:00:32
◼
►
and the nice seats or whatever.
02:00:33
◼
►
However, if every vehicle comes with this hardware
02:00:37
◼
►
and you are just paying to unlock it,
02:00:41
◼
►
that totally shatters that illusion.
02:00:43
◼
►
And it makes it seem like you're being ripped off,
02:00:45
◼
►
even though you would have paid
02:00:47
◼
►
the exact same amount of money up front for that feature
02:00:51
◼
►
if you didn't know that the hardware was always there.
02:00:56
◼
►
Like if it was just presented as a hardware option
02:00:58
◼
►
that the hardware is either here or not
02:00:59
◼
►
based on whether you paid this,
02:01:01
◼
►
that maintains the illusion
02:01:02
◼
►
and people are happy to pay for that
02:01:04
◼
►
in most circumstances if they want those things.
02:01:06
◼
►
Whereas, if the hardware's always there
02:01:08
◼
►
and you're just paying to use it,
02:01:10
◼
►
you feel like you're being cheated.
02:01:12
◼
►
- And by the way, car options for the most part
02:01:14
◼
►
are not like that.
02:01:14
◼
►
When you buy the alloy wheels,
02:01:16
◼
►
you don't get them unless you pay for them.
02:01:18
◼
►
If you want the sunroof,
02:01:19
◼
►
it's not like they all come with a sunroof
02:01:20
◼
►
and it gets unlocked or like,
02:01:21
◼
►
oh, it comes with a V8,
02:01:22
◼
►
but we only let you use four of the cylinders.
02:01:25
◼
►
Most car options that are, even the cosmetic ones,
02:01:29
◼
►
if you don't pay for it, you don't get it.
02:01:31
◼
►
Do you want the metallic paint?
02:01:32
◼
►
Well, if you don't pay for the metallic paint for $5,000,
02:01:34
◼
►
you're not getting the metallic paint.
02:01:35
◼
►
It's not under your paint hiding where you can enable it.
02:01:38
◼
►
Even like, oh, do you want the colored piping
02:01:40
◼
►
on your seats?
02:01:42
◼
►
Do you want the contrasting stitching on your steering wheel?
02:01:45
◼
►
That'll be $500.
02:01:46
◼
►
You don't get the contrasting stitching
02:01:48
◼
►
unless you pay that $500.
02:01:49
◼
►
Does contrasting stitching cost $500?
02:01:51
◼
►
No, of course it doesn't, but you don't get it.
02:01:54
◼
►
And for these features, particular stuff like this
02:01:56
◼
►
is like software powered or whatever,
02:01:57
◼
►
well, you can't see the seat heaters,
02:02:00
◼
►
and they aren't that expensive in addition to the seat.
02:02:02
◼
►
But seats are, you know, I was watching one of the,
02:02:05
◼
►
one of my teardown things, seats are among the most expensive things in a car interior.
02:02:09
◼
►
I think one of the things I was watching said the seating in the typical high-end American
02:02:17
◼
►
minivan costs more than the drivetrain, not including the engine, but just the drivetrain.
02:02:23
◼
►
Not the engine itself, but the drivetrain, like the axles, the differential, all that
02:02:27
◼
►
The seating costs more than that because if you look at how difficult it is to assemble,
02:02:31
◼
►
how much hand assembly has to be done, how much sewing and stitching and how many parts
02:02:35
◼
►
there are or whatever, in the grand scheme of that, the seat heaters, which are essentially
02:02:39
◼
►
a wire that snakes its way through a flimsy piece of fabric that runs up your seat, right?
02:02:43
◼
►
That costs additional 10, 20 bucks per seat and they sell it to you for, you know, $150
02:02:50
◼
►
per seat, right?
02:02:51
◼
►
So huge margins on those options or whatever, that's the type of thing that they could potentially
02:02:55
◼
►
afford to put in every car and not just not tell you it's there.
02:02:57
◼
►
But I think even for things like steering wheel heaters, I think for the most part they
02:03:01
◼
►
don't put them in the non-heating steering wheels.
02:03:03
◼
►
It's not like they're there and you get them, you know,
02:03:05
◼
►
like they have a non-heated and a heated version.
02:03:08
◼
►
And certainly for in regular non-luxury cars,
02:03:10
◼
►
they have heated and non-heated versions of seats
02:03:12
◼
►
and the non-heated ones don't have the seat heaters in them.
02:03:14
◼
►
But for stuff like this, you know, if it's not visible,
02:03:17
◼
►
they can actually charge you.
02:03:18
◼
►
And then the software ones,
02:03:20
◼
►
those actually make a little bit more sense to me
02:03:22
◼
►
because at the very least there you say,
02:03:23
◼
►
well, paying for software is something we understand.
02:03:26
◼
►
And you know, well, it downloads the software
02:03:28
◼
►
and you pay for it.
02:03:29
◼
►
So technically you don't have it beforehand,
02:03:30
◼
►
but like, fine, you want to charge me your software features
02:03:32
◼
►
you pay for things that have services like Sirius XM, you're paying a monthly fee to
02:03:36
◼
►
get a service from a company, that's a thing we're all familiar with.
02:03:39
◼
►
Even paying for the downloadable engine sounds, that's the punchline in the Verge article,
02:03:45
◼
►
that's like buying a ringtone for your phone, that's all within the realm of, it's dumb
02:03:50
◼
►
purchasing $117 doesn't make sense, but if you like that sound and it's a one time purchase,
02:03:56
◼
►
it's not a big deal.
02:03:57
◼
►
the monthly subscriptions to use features of your car,
02:04:02
◼
►
I really don't think that's gonna fly.
02:04:04
◼
►
I don't think it's gonna fly for BMW.
02:04:05
◼
►
I think it's gonna damage their brand.
02:04:06
◼
►
And I really, really don't think it's gonna fly
02:04:09
◼
►
in like regular people cars.
02:04:11
◼
►
Like it's just, I mean, like you were saying, Marco,
02:04:13
◼
►
they don't even wanna pay 99 cents for an app
02:04:15
◼
►
that they use seven hours a day.
02:04:16
◼
►
You think they're gonna pay $12 a month
02:04:18
◼
►
to heat their steering wheel?
02:04:20
◼
►
[Door closes]