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]