PodSearch

ATP

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:09 ◼   ► - Ah, yes.

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:46 ◼   ► Cool.

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:39 ◼   ► in SwiftUI.

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:13 ◼   ► (laughing)

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:48 ◼   ► area.

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:49 ◼   ► in SwiftUI.

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:22 ◼   ► (laughing)

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:37 ◼   ► (laughing)

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:31 ◼   ► screen.

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:55 ◼   ► (laughing)

00:36:56 ◼   ► - That's a great way to speed through a show.

00:36:58 ◼   ► - Oh god.

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:11 ◼   ► (laughing)

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:07 ◼   ► - What?

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:20 ◼   ► (laughing)

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:18 ◼   ► at them.

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:24 ◼   ► Yeah.

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:15 ◼   ► Yeah.

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:04 ◼   ► could have.

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:02 ◼   ► Yeah.

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:45 ◼   ► (laughing)

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:14 ◼   ► in HDR.

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:41 ◼   ► Right?

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:00 ◼   ► nits.

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:34 ◼   ► to 600.

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:13 ◼   ► to 4,000.

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:51 ◼   ► It is $900.

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:46 ◼   ► - Cool.

01:21:47 ◼   ► - You can get two of these

01:21:47 ◼   ► and do all your computing on them, Casey.

01:21:49 ◼   ► - No.

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:38 ◼   ► "Help!"

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:44 ◼   ► (laughing)

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:33 ◼   ► (laughing)

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:57 ◼   ► (laughing)

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:03 ◼   ► Oh my God.

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:16 ◼   ► I doubt it.

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:19 ◼   ► (laughing)

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:27 ◼   ► and good.

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 ◼   ► mute 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:23 ◼   ► (laughs)

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:53 ◼   ► Nope.

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 ◼   ► - Yep.

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:26 ◼   ► stuff.

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:19 ◼   ► Hmm.

02:04:20 ◼   ► [Door closes]