Podcast Search

ATP

491: Salmon and SwiftUI

Select a time to play from there. The line being spoken is highlighted as the audio plays.

0:00:00- Oh, I have a very tense neck and shoulder situation

0:00:05going on this week because I've been doing Swift UI.

0:00:09- Ah, yes.

0:00:13So I'm trying, I should get a list together.

0:00:17So with DubDub this year, they gave me all sorts of gifts.

0:00:22They gave me a photo picker because the one I'm using

0:00:25right now is the UI kit one, which you can't launch

0:00:28from SwiftUI and I have this utter pile of hacks

0:00:30to get that to work.

0:00:32They gave me a native photo picker.

0:00:33They gave me a native drawer, which is on Masquerade,

0:00:37it's the thing where you select what emoji you wanna use.

0:00:39They gave me a native one of those.

0:00:41And there was some, oh, they gave me a native

0:00:43screenshotting mechanism, which is between just the three

0:00:46of us, how you actually export an image from Masquerade,

0:00:49as I just screen capture, which I know is not the way

0:00:51I should be doing it, but I'm not here to argue

0:00:52about that right now.

0:00:53Anyway, of those three things--

0:00:55- Wait, what?

0:00:56Is the maximum resolution?

0:00:57is the resolution it is on your screen?

0:00:59- No, no, because it's at 3x.

0:01:02So yes-ish. - Yes, though,

0:01:04that is how you've been doing it.

0:01:04- Yes, so yes-ish.

0:01:06I'm not here to argue about that right now.

0:01:09So anyway. - You need to fix that.

0:01:11- On the list.

0:01:12So anyway, concentrate, concentrate.

0:01:14So the photo picker thing,

0:01:16the photo picker thing gives you a SwiftUI image view,

0:01:20which is useless if you wanna do any sort of manipulation

0:01:23of the image.

0:01:26because I need a UI image instead of just a Swift UI image.

0:01:30And the officially blessed way to do that

0:01:32is this new transferable protocol

0:01:34where it'll give you a URL

0:01:35where the file is sitting in the file system

0:01:37for you to copy to your own sandbox and do something with,

0:01:40except that in all the beta seeds so far,

0:01:42it gives you the URL and the file's already fricking gone

0:01:44by the time you get the URL.

0:01:46Cool.

0:01:47The screenshotty thing doesn't work

0:01:49and that's mostly a Casey problem.

0:01:51That's not terribly interesting,

0:01:52but it's another thing that doesn't work

0:01:53the way I want it to.

0:01:54And the drawer, the way it works is it's presenting a sheet,

0:01:59a modal sheet, not taking over the entire screen.

0:02:03My drawer can't be modal because you're supposed

0:02:05to interact with both the drawer and the backing view

0:02:07that launched the drawer.

0:02:09So of the three things that I so desperately wanted

0:02:12and seemed like Christmas in June just for Casey,

0:02:15none of them are working right now

0:02:17and I am very sad about it.

0:02:19So with that in mind, Marco, tell me about SwiftUI

0:02:21and how great it is.

0:02:23Where we last left last show.

0:02:25- Our intrepid hero.

0:02:26- Yes, I had come to the realization that

0:02:29if I'm going to continue being a professional

0:02:31iOS developer as my career,

0:02:34it was my responsibility to switch

0:02:37as much as I possibly could to SwiftUI,

0:02:40really dive in eagerly and dive in head first

0:02:43and try to do as much of it as I possibly could.

0:02:45And so my task for this past week has been,

0:02:50I've been kind of juggling a few things.

0:02:53I've been doing some server work,

0:02:54I've been doing a minor Overcast update

0:02:56with the existing code base,

0:02:56and then in the spare time I had between those two things,

0:02:59I was trying to start clean with SwiftUI.

0:03:03I have a brand new project that just basically a test

0:03:06to see can I replicate some of the basics

0:03:09of the Overcast interface with SwiftUI?

0:03:12I mentioned in the past a lot how I feel very burdened

0:03:16and trapped by the amount, the sheer amount

0:03:20of UI code I have.

0:03:21It's a lot of code, it's old code,

0:03:24it is all in a legacy language using legacy frameworks

0:03:28and it is a huge amount of tricks and hacks

0:03:32to try to get exactly what I want to happen.

0:03:35And so my goal with SwiftUI has been,

0:03:38as I'm doing this exploration and my new prototype

0:03:41of how this thing could work,

0:03:43I want as little code as I can.

0:03:45I wanna do things in the cleanest, least complicated way

0:03:49that I can do them.

0:03:50And if I have to give up certain details

0:03:52of how things look or work, as long as it's not too bad,

0:03:55I'm willing to do that.

0:03:56- Which, just to interrupt briefly,

0:03:57I think that this is a very smart and pragmatic way

0:04:00of doing things, which was born, it seems,

0:04:02in no small part from your discussion with Dave

0:04:05on Under the Radar, which was excellent.

0:04:07And I am in full support of this technique.

0:04:09Like, I think this is a really great way

0:04:10for you to dip your toe in, decide whether or not

0:04:13hate it and not have damaged your existing app, you know, into either fork or like you

0:04:19said sounds like you know you start a new project, but one way or another I think this

0:04:22is a really great way to do it and I'm curious to hear how it's going so far because I'm

0:04:26guessing it's not great.

0:04:27So, okay. So first of all and what you just said like you know decide whether I like it

0:04:33or not that's not a question I'm considering. I'm requiring myself to like it. Like I'm

0:04:39I'm going to like this and I'm just going to keep eating it until I like it.

0:04:42I've been there.

0:04:43Me too, and it does eventually work for most things.

0:04:46It's not there on salmon necessarily, but we'll get there.

0:04:49Oh, I just had salmon for dinner tonight. Salmon's great.

0:04:51Anyway, it has a lot of benefits.

0:04:53I'm trying to like it, I'm still working on that one, but I've gotten almost everything else.

0:04:56Salmon and SwiftUI.

0:04:58So first, the first thing I tried was,

0:05:01let me see if I can get what my player currently does now,

0:05:05which is, you know, navigation view, you know, in the main screen,

0:05:08main screen.

0:05:09Below it is this little mini player, when you have a podcast loaded, and you can swipe

0:05:14that mini player up and it expands into the now playing view.

0:05:18Oh, and that's all custom animation in UIKit, isn't it?

0:05:21Yes, that is a custom transition with, I believe it's UI View property animators, I think,

0:05:26are powering that right now, and an interruptible presentation, custom transition stuff.

0:05:31So anyway, it's all that stuff.

0:05:32They introduced all that stuff like five years ago, or geez, probably more 10 years ago.

0:05:36Anyway, I wanted to just replicate that basic thing

0:05:39in SwiftUI.

0:05:40Day one of this was just trying so many different things

0:05:44to replicate that, like being able to drag something up,

0:05:47have a view within it that expands into a new location

0:05:50and position, drag it back down, have it be interruptable.

0:05:53You can not drag it all the way if you want,

0:05:55and have it be full screen when it gets there,

0:05:58not a presented sheet, but an actual full screen cover modal.

0:06:01All these little details of just like,

0:06:03okay, let me just see if I can get this to work.

0:06:04And I kept going through this pattern of,

0:06:06all right, well, I'll try the obvious way.

0:06:08That doesn't work.

0:06:09Do some Google searching, 'cause of course,

0:06:10the documentation is not super helpful.

0:06:13Do some Google searching, find some often ancient blog posts

0:06:16from Swift UI three years ago that's no longer relevant,

0:06:20or things have changed, or names have changed,

0:06:22or parameters have changed, protect the innocent.

0:06:24All the experimentation, eventually the code would balloon

0:06:28up into a giant complex beast that would still actually

0:06:32not really work exactly the way it should,

0:06:34and usually will have at least one deal killer.

0:06:37So when I was doing that part of it,

0:06:38the deal killers were like, as I would drag the sheet up,

0:06:42as soon as it would hit right below the safe area

0:06:46on the top where the notch cuts in,

0:06:49it would snap to the height of the full screen.

0:06:52And so it would like, so as you were dragging it

0:06:54right at that top pixel, it would go from, you know,

0:06:5795%, 200% of the height.

0:06:59And I could not figure out a way to not do that.

0:07:01I tried, how about instead of moving the frame,

0:07:03let's move the offset.

0:07:04Nope, that doesn't work either.

0:07:05There were so many little details like that

0:07:07that I would get it 80% of the way there,

0:07:10but then I would run it to something

0:07:11where I literally couldn't ship this.

0:07:13(laughing)

0:07:14It looks like a bug.

0:07:16If something is less fancy than it used to be,

0:07:21that's fine, I can take that.

0:07:22But if something looks like a bug or acts like a bug,

0:07:24I can't take that.

0:07:26So eventually I gave up, I'm like, you know what, forget it.

0:07:29I'll just present a sheet and call it a day.

0:07:32I'm not gonna do the interactive transition.

0:07:34I'm willing to give up the cool thing

0:07:37where the artwork grows into the new location

0:07:39and shrinks back down.

0:07:40I'm willing to give that up if everything else

0:07:42can be much more clean and simple

0:07:44and maintainable, et cetera.

0:07:45I know it'll be less nice.

0:07:47Oh well, I'm willing to give that up.

0:07:48So eventually I figured out regular presenting

0:07:51of an outplaying thing.

0:07:53All right, next.

0:07:55Theme options.

0:07:56Can I do in the app changing of the tint color live

0:08:02and have it change everything in the whole app?

0:08:04And can I have it change dark mode programmatically?

0:08:07Because I have the option now

0:08:08where you can always run it in dark mode.

0:08:10This is not used by a ton of people,

0:08:13but it's used by enough people that if I remove that,

0:08:16it would be a problem.

0:08:17Like I would hear about it a lot.

0:08:20People would leave one star reviews for years

0:08:22over just that.

0:08:23So I know, like all right, I really need to have a way

0:08:26to override dark mode system-wide with a preference.

0:08:30and again, have that be able to be changed

0:08:32while the app is running and update everything.

0:08:34I have that now in my current system.

0:08:36So, how do I do that?

0:08:39Oh, also, one of my goals during this.

0:08:42So, small code, simple straightforward code, no hacks,

0:08:46and also, trying not to dip back into UI kit

0:08:50if I don't have to.

0:08:51Well, doing this was the first thing that broke that rule

0:08:57because I could not get it to do everything right

0:09:01without using a scene delegate,

0:09:03which is not part of the new architecture.

0:09:05You're not supposed to use those anymore.

0:09:06But I had to eventually make a scene delegate.

0:09:09It's at least Swift.

0:09:10I'm not ducking down to Objective-C yet.

0:09:13It'll happen, I'm sure.

0:09:16It's at least Swift, but I had to use some of UIKit

0:09:20in order to get that part working.

0:09:22And that took like three days

0:09:23just trying to get the theme system working.

0:09:26So eventually I got that.

0:09:28I got tint colors being able to be changed,

0:09:29I got programmatic dark mode control

0:09:31so I can have an always on dark mode or not,

0:09:33and also respond to the system dark mode

0:09:35and not override that and not get stuck in dark mode forever

0:09:37'cause the stupid environment variable

0:09:39gets overwritten without a scene delegate.

0:09:40Like all these little, like,

0:09:42so again, same kind of thing.

0:09:44The code slowly balloons up with hacks.

0:09:46Eventually I figure out, not gonna do this,

0:09:49too many hacks, clear it all back.

0:09:50And then eventually I find a simpler way to do it

0:09:53that might involve some breakage of my purity laws here.

0:09:55So finally, now I've been working on it.

0:09:58I have the now playing just simple present,

0:10:02dismiss, full screen.

0:10:03I have the theme basics.

0:10:06Now let me try to do a three column layout.

0:10:11What I've wanted to do forever is a three column layout

0:10:16for Mac and iPad.

0:10:18And then when you drag the window to be too small for that

0:10:21or when you're running on an iPhone,

0:10:23it collapses into a regular navigation view

0:10:25And Overcast is actually not a three column app,

0:10:27it's actually a two column app with a now playing screen,

0:10:29which makes it even easier.

0:10:31Really, I just need the Navigation View to do two columns.

0:10:33Either the root screen with the podcast

0:10:37or playlist screen on top of it, or next to it.

0:10:40Very simple, this should not be a hard thing.

0:10:42And in fact, that has been a feature

0:10:44of UI Split View forever.

0:10:49Obviously, this should not be a hard thing in SwiftUI,

0:10:53Especially since this year at W2C with iOS 16

0:10:57and the coordinated releases,

0:10:59there is an entirely new navigation stack view

0:11:03and navigation split view pair of APIs.

0:11:06And there's all these new ways to represent

0:11:08how they are presenting their views

0:11:09and representing their paths and everything else, great.

0:11:12They don't work.

0:11:15- Cool. - I keep thinking,

0:11:17usually when you're a programmer

0:11:20and you are using an API in a relatively straightforward way

0:11:25and it's not working, you can almost always blame yourself.

0:11:28It's almost always your fault.

0:11:29And in this case, it might still be.

0:11:31It probably is my fault,

0:11:33but so many little details just break.

0:11:37And this is, again, this is not like my entire app.

0:11:39This is a simple test project

0:11:40that has like three files in it.

0:11:42And I just, and I know it's still a beta

0:11:44and I should file bugs and I'll get to that, but,

0:11:48Like, I keep going back to the W2C videos

0:11:51and how the navigation split view and stack view,

0:11:53and even, I even tried using the old navigation methods.

0:11:55I'm like, well, you know, what if I can do this

0:11:56without requiring iOS 16?

0:11:58That'd be nice.

0:11:59You know, I could deploy it earlier.

0:12:01I'm gonna require iOS 15 in my next update.

0:12:03I'd love to use things that require 15, and that's fine.

0:12:06And I just couldn't get it to work reliably in a good way.

0:12:12And even when I did, like for the parts of it

0:12:15that I could get working reliably,

0:12:16there are so many limitations on the control

0:12:19you get over that.

0:12:21So for instance, one thing that I absolutely want

0:12:24in my split view interface is I want all three columns

0:12:29to always be displaying.

0:12:33And I do not want the little side view collapse-y button

0:12:37in the corner that hides and shows the side view.

0:12:39I don't want that button to exist in the app.

0:12:41I just want all three views to be showing

0:12:43when there's space and when there isn't space.

0:12:45I will put my own layout in there with the regular stacked

0:12:48area.

0:12:50And as far as I can tell, there's no way

0:12:52to tell the new SwiftUI split view thing,

0:12:55don't show that show toolbar button.

0:12:57Like, it's always there, no matter what,

0:12:59as far as I can tell.

0:13:01And you look at UI split view, and there's

0:13:04tons of options for controlling it.

0:13:06And they made this whole thing that's supposed to replace it,

0:13:08and there's like one option.

0:13:10And so anyway, so now I'm like, all right,

0:13:13now I'm going to break my other law.

0:13:15Let me see if I can get this to work with using UI view

0:13:20representable and UI hosting controllers

0:13:23and seeing if I can use a UI split view inside

0:13:27of my otherwise Swift UI layout.

0:13:30And now there's all sorts of complexities with that.

0:13:32And I can't get the safe area insets to work.

0:13:34And it's just-- oh, I am trying so hard to get something

0:13:40that's going to end up hopefully being so little, so simple,

0:13:43and so maintainable code.

0:13:44So if everything ends up being super fragile

0:13:47and really delicate to actually work in and tweak,

0:13:51then am I really achieving that goal?

0:13:54- Yeah, yeah, I think it's hard for me to tell,

0:13:59when I complain a moment about SwiftUI,

0:14:01it's hard for me to tell if I'm just holding it wrong.

0:14:05And I mean that kind of genuinely,

0:14:07because it is a very different paradigm

0:14:10than what I'm used to.

0:14:12And so the best, and this is gonna turn so many people off

0:14:15and I'm sorry, but just bear with me here.

0:14:17The best recent experience I've had that's similar to this

0:14:20is when I was learning RxSwift or in modern stuff,

0:14:24learning combined.

0:14:25Because it's a very, very different way

0:14:27of going about doing things.

0:14:29Isn't necessarily better, isn't necessarily worse.

0:14:32It's just different.

0:14:33There's advantages to RxSwift and Combine.

0:14:35There's advantages to SwiftUI.

0:14:37It doesn't make it better, doesn't make it worse.

0:14:39It's just different.

0:14:40And when I was learning RxSwift for a long time,

0:14:45to the order of like months,

0:14:48I was trying to accomplish things

0:14:51in the more procedural, traditional way,

0:14:54rather than just really embracing this whole new world

0:14:57that I was trying to dive into.

0:15:00And because of that,

0:15:01a lot of my early RxSwift code was kind of garbage

0:15:04because I wasn't really doing it the RxSwift way.

0:15:06And I wonder, and actually my problem with image renderer,

0:15:09which is the thing that captures the screen,

0:15:11or captures the SwiftUI view.

0:15:13I think that the problems I have with that,

0:15:15as much as I wanna blame Apple,

0:15:16I think that's actually me holding it wrong,

0:15:17and I'm not doing things exactly the way I should be,

0:15:20and that's the problem.

0:15:21And I wonder if, for some of the stuff

0:15:23that you're talking about,

0:15:24and certainly for a lot of the stuff

0:15:26that I'm running into problems with SwiftUI,

0:15:29I wonder if, and I think Dave made this speech

0:15:31to you as well, I wonder if the issue is less with SwiftUI,

0:15:36and more that I'm just too busy thinking in a UI kit way.

0:15:41Even though I'm not doing it deliberately,

0:15:42I'm not doing it consciously,

0:15:44I'm thinking in that old way of thinking

0:15:46and that old style of thinking.

0:15:47And because of that,

0:15:48I'm trying to kind of implicitly replicate UI kit

0:15:52in SwiftUI, which is not the way to do SwiftUI.

0:15:55And David, a really great way of putting this

0:15:57on under the radar.

0:15:57I forget exactly how he phrased it

0:15:58and I won't try to parrot it now

0:16:00'cause I'll ruin his argument.

0:16:01But I don't, and I can't speak for you, Marco.

0:16:03Maybe you are doing it,

0:16:05thinking of things in SwiftUI way and so on and so forth.

0:16:07I don't know, but that's something that I feel

0:16:09I'm running into and that's a problem.

0:16:10But even with all of that said, I do feel like,

0:16:14and the vibe I get from people that are doing

0:16:17a lot of SwiftUI is that yeah, a lot of it,

0:16:20you just can't freaking do.

0:16:23And the tough thing is, it is a big black box.

0:16:26And once you hit the wall or the edge of that big black box,

0:16:31you're screwed.

0:16:31Like, okay, I guess it's UI kit time, baby,

0:16:34Because what other choice do I have?

0:16:36And that's, I understand why that is,

0:16:38given the nature of a declarative, you know,

0:16:42user interface development scheme, language,

0:16:45whatever you want to call it.

0:16:46But that's kind of a problem, right?

0:16:49Especially since we have been trained by Apple,

0:16:53or maybe not by Apple,

0:16:54but certainly third-party developers have made it our thing

0:16:56to have these like super bespoke custom user interfaces.

0:16:59And I know that you've talked, Marco, recently,

0:17:00or at least I believe you have,

0:17:02about how that maybe isn't necessary anymore.

0:17:03and I agree with you, but we want everything to look good

0:17:06and feel good, and it is very hard to make anything look

0:17:11or feel any way that SwiftUI isn't familiar with already.

0:17:16If you wanna make something super custom,

0:17:18it is very difficult.

0:17:19Now there are things that make that better.

0:17:20There's a new layout system,

0:17:21which honestly I haven't really dabbled with yet,

0:17:23and actually might work for you in this case, maybe?

0:17:26- I don't really need the, like the layout is,

0:17:28one of the reasons why I like using SwiftUI for this,

0:17:31I like the idea of it at least,

0:17:32is that having a layout that like,

0:17:35oh, sometimes I have a menu player, sometimes I don't.

0:17:37I have a now playing screen come up

0:17:39and it's arranged in different ways

0:17:41depending on the size of the screen.

0:17:41Like that stuff, SwiftUI makes that super easy.

0:17:44That's why I wanna use it.

0:17:45And there's a lot of other stuff

0:17:46that it makes super easy as well.

0:17:48I'm not even talking about doing stuff

0:17:49that's necessarily that custom.

0:17:52This thing where I have like a stack view

0:17:54or a split view depending on the size,

0:17:56like that theoretically I shouldn't even need

0:17:58to have that distinction.

0:17:59Theoretically, the split view should just do this.

0:18:02Like when it's small,

0:18:02it should just present the phone interface.

0:18:04In practice, in my experience so far,

0:18:06it just doesn't work.

0:18:08But maybe I'm doing like one little wrong thing.

0:18:13But it's very hard to figure that out.

0:18:16And I mean, even simple things like my root list screen,

0:18:19like the first level list screen.

0:18:21Overcast displays two kinds of things on that list screen,

0:18:24playlists and podcasts.

0:18:26And so I have in my little demo,

0:18:27I have two basic structs, playlist and podcast.

0:18:30And so I'm trying to make a list that has two sections,

0:18:33and depending on which one of those you tap,

0:18:35it presents a different detail view for that,

0:18:38'cause it's either showing a playlist or a podcast.

0:18:40So many of these abstractions

0:18:42that are built into the new navigation things

0:18:45either become very messy or totally break

0:18:48when the content in a list can be more than one type.

0:18:53Almost all of these new APIs they've made

0:18:55seem to make that very difficult,

0:18:57and seem to have not been designed with that in mind.

0:18:59- Well that's why you gotta use an enumeration.

0:19:01That's the answer to all problems

0:19:02when it comes to the Swift type system.

0:19:04And I say that only slightly jokingly.

0:19:06I'm snarking right now,

0:19:08but Swift enums are really, really incredible,

0:19:11and you can do some incredibly powerful things with them

0:19:13with little to no quote-unquote overhead to do it.

0:19:17- Yeah, and part of the reason why

0:19:19this has been such a frustrating journey for me

0:19:20is that some of the time I've spent battling this

0:19:23has been battling the language,

0:19:24because a lot of those little details,

0:19:26because I'm not a Swift expert yet,

0:19:28I don't know a lot of these hacks and workarounds.

0:19:30So I'll have a situation where it's like,

0:19:32okay, well I want this binding to be optional.

0:19:35Not to bind to an optional value,

0:19:38but I want the binding itself to be optional.

0:19:40And you can do that, it turns out.

0:19:42You just can't use @binding as the prefix.

0:19:44You have to write out the whole type afterwards.

0:19:46And every time you do that, you gotta look that up.

0:19:49Things like having these two different things,

0:19:50Playlist and Podcast.

0:19:51I had them both inherit from a common protocol.

0:19:54try using a protocol anywhere in SwiftUI, you can't.

0:19:58And some of the, because SwiftUI itself

0:20:01is also such a giant pile of hacks in the Swift language,

0:20:04some of the error messages are comical

0:20:06and they send you in such a weird direction.

0:20:09Like you'll get error messages about things like

0:20:12the initializer can't be called 'cause it's private

0:20:14because a value that SwiftUI expects to be optional

0:20:17wasn't marked optional.

0:20:19Like that has nothing to do with the message.

0:20:20It's just, there are so many little things

0:20:23where I'm just hitting wall after wall after wall.

0:20:26And I'm at the point now where I actually am motivated

0:20:30to keep going, I'm excited to get to my perceived future

0:20:34where I think I can do this all in a relatively clean way

0:20:37and save a bunch of code and update my knowledge

0:20:39and my code base and all this stuff.

0:20:41Like I am sold on the benefits of getting there

0:20:44and I'm just beating my head against the wall constantly

0:20:47along the path there and I've now been beating my head

0:20:50against the wall for like a week,

0:20:51and I have relatively little to show for it so far.

0:20:56All I have is a bunch of ways to do things that don't work,

0:20:58and a few things I got working.

0:21:01But I am still going, I'm still optimistic,

0:21:03I still think this is the right path, but this is hard.

0:21:07And I think Apple is deluding themselves

0:21:11if anybody there thinks that either Swift or SwiftUI

0:21:16is suitable for beginners.

0:21:19- It is so not, like at all.

0:21:22And you know, I think part of the reason

0:21:24I'm finding some of this stuff so difficult

0:21:25is obviously because the way I'm used to doing things

0:21:28is different, and so somebody learning from scratch

0:21:31probably wouldn't have a lot of this baggage that I have.

0:21:33- Oh, that's an interesting point, yeah.

0:21:35- However, there are so many things where

0:21:38here's a common need I have to fix,

0:21:40or here's an error I ran into, how do I fix this?

0:21:42And the answer is so technical, and so language nerdy,

0:21:46and so obtuse and the only thing you can really do

0:21:49is Google for it and hope somebody answered it

0:21:52the right way that you understand.

0:21:54I don't know how anybody expects people

0:21:57to use this language and this framework,

0:22:01which itself is a giant pile of hacks

0:22:02on top of an already complex language,

0:22:05as a beginner to programming.

0:22:07One of the great things, beginner languages

0:22:10should be fairly understandable at a deep level.

0:22:14you should be able to know everything that's going on

0:22:17if you're a beginner and you start asking questions

0:22:20and say, you know, you see like, what does, you know,

0:22:22argc and argv mean in my main function here?

0:22:25You should be able to know that.

0:22:26Like if you ask somebody, they will tell you

0:22:28and you should understand the answer,

0:22:29things should be relatively knowable.

0:22:31You should know, okay, if I write this statement,

0:22:33this is going to happen.

0:22:34I get this error, here's why that happened.

0:22:36If you're learning with Swift and SwiftUI,

0:22:39there is so much, there's such a vast constellation

0:22:44of non-trivially complex topics

0:22:47that you really should know or have some familiarity with

0:22:50because you'll run into these problems all the time

0:22:52and you'll need to know how to do it.

0:22:54This is a very advanced language

0:22:56and a very advanced complicated framework

0:22:58that requires a lot of brain messing.

0:23:01Back when I was learning languages,

0:23:07what was taught in college was Java and then C.

0:23:12I heard from all the professors all the time

0:23:13that the big challenge with where people would drop off

0:23:17was the concept of pointers in C.

0:23:20Because it's a level of indirection.

0:23:22And it makes sense, it's a complex topic

0:23:25for most people who are just learning this stuff

0:23:27and it takes a certain intellectual leap of complexity

0:23:31and of abstraction to understand a pointer

0:23:34and things you can do with pointers

0:23:35and where they are used and how they are used.

0:23:38SwiftUI is full of things like that.

0:23:41There are tons of that type of abstraction

0:23:44or that type of difficult or kind of indirect concept

0:23:49in SwiftUI.

0:23:50And so I don't know how people are going to learn this

0:23:52as beginners and not just hit their heads against the wall

0:23:55all the time.

0:23:56Because what Apple shows in the conference slides

0:23:59is like, oh, this thing is super easy.

0:24:01You just do this, this, and this,

0:24:02and then this wonderful thing pops out.

0:24:05But first of all, what they're doing is very, very trivial.

0:24:10like what they're showing in their examples is very trivial.

0:24:13And then second of all,

0:24:14when you're agreeing with an empty screen

0:24:16and you have to just type code,

0:24:17it's very hard to know what even to type

0:24:20to get what you want without just Googling

0:24:23and finding examples and copy and pasting.

0:24:25And those areas of SwiftUI I think are so entrenched

0:24:30to just the way the language and the framework

0:24:32have developed and are designed from the start.

0:24:35And even the whole concept of declarative UI

0:24:39in the complexity we have of it today

0:24:41is so complicated to get going and to not break.

0:24:46I think people are gonna have a very hard time learning this.

0:24:50I mean, maybe it's just me.

0:24:51Maybe this is 'cause I'm now considered

0:24:52an elderly programmer at age 40.

0:24:54And maybe I'm just too old to learn these new concepts.

0:24:59But I don't think that's entirely it.

0:25:01I mean, that's probably part of it.

0:25:03But I think this is just really hard.

0:25:05And it looks easy.

0:25:07When you see the conference slide code,

0:25:09it looks really easy, and in practice it really isn't.

0:25:13- I just want to point out that my high school age son

0:25:16wrote an app in SwiftUI and put it on the App Store,

0:25:18and it's got a lot of screens and a lot of buttons

0:25:19and stuff on it, and he doesn't know any language.

0:25:22(laughing)

0:25:24He wrote an app and put it in the App Store,

0:25:25does he not know?

0:25:26Like, no one that young mostly knows anything.

0:25:29It's like the first major program he wrote.

0:25:30So, beginners figure it out.

0:25:32That idea of Googling, copying, and pasting

0:25:34can take you a long way.

0:25:36I mean, he's also a Syracuse, so.

0:25:37- Well, that's a fair point.

0:25:39Yeah, we should grade on a curve here.

0:25:41But no, I think you and me are lamenting

0:25:45all the crummy parts of SwiftUI, of which there are many.

0:25:48But I will say, and I think,

0:25:50didn't I say this like last week,

0:25:51that when SwiftUI does work,

0:25:54when you are within the guardrails that SwiftUI lays out,

0:25:57it is pretty fantastic.

0:26:01It's really incredible how quickly you can build

0:26:04a really good looking user interface

0:26:06with not an overabundance of code.

0:26:09And a lot of it just really does work

0:26:12if you stay in the guardrails.

0:26:15But that's the problem,

0:26:16is that those guardrails aren't just guardrails,

0:26:19they're entire, like 500 foot tall brick walls.

0:26:23And getting around them is not easy.

0:26:25Whereas in UIKit, for all the good and bad of UIKit,

0:26:29when you need to jump over a guardrail,

0:26:31it's like you just step right over.

0:26:33Like, oh, there we go, all right, done.

0:26:35Problem solved.

0:26:36Whereas with this, you're like trying to figure out

0:26:38how to like put the little rock-climbing things

0:26:42in between the bricks so you can find a foothold

0:26:44to raise yourself up the 500-foot brick wall

0:26:46that's completely vertical in order to get what you need.

0:26:49It's just, it's so frustrating.

0:26:51I don't know, I feel like I need Underscore

0:26:54to like sit next to me and just smack my hand

0:26:57with like a ruler every time I go to do something

0:26:59that's not the right way.

0:27:00Just be like, whoosh, nope, try again.

0:27:02All right, well what if I did,

0:27:03(imitates whip cracking)

0:27:04Nope, not that either, you know?

0:27:04Like, I just need him next to me.

0:27:06Pair programming is like not my thing.

0:27:08I hate it, I don't like it.

0:27:09I've thought about like going on Twitch

0:27:12and recording myself as I'm writing code

0:27:13and as soon as I think about that,

0:27:15I'm like, nope, nope, nope, nope, nope, nope, nope.

0:27:17That's a terrible decision.

0:27:19But I feel like I need a trusted friend

0:27:22to like sit next to me and show me the way

0:27:24because clearly what I'm doing ain't working.

0:27:27- Well, and the thing is,

0:27:28and I've had those moments where everything

0:27:30is going great and super easy,

0:27:32Like when I had to make my stupid placeholder

0:27:35now playing screen for this little mockup thing

0:27:37I'm working in, I was able to make such a nice screen

0:27:42with so little effort. (laughs)

0:27:44Like it's so good and it was like,

0:27:47oh, let me border this artwork and crop it

0:27:50with Johnny Ive Corners and all this stuff.

0:27:53And it's like perfect, easy, one line, two seconds,

0:27:56done, live previewing, done, done, done, great.

0:27:58Let me pad that, let me,

0:27:59there's a little drop shadow on that,

0:28:00oh, perfect, done, like, I've done all of those things

0:28:04in UIKit in Objective-C, and it's so much harder.

0:28:08And it took so much longer, and it's so much more code.

0:28:12And so that's where I'm trying to get.

0:28:14Like, I can see in the distance, I can see,

0:28:16I hope it's not a mirage, I can see, like,

0:28:19how good SwiftUI can be, and how much value

0:28:23this can deliver to me, but first,

0:28:25I have to, like, make sure that I can get

0:28:27the structure working, and again, I'm trying to do this

0:28:30in the most modern way possible.

0:28:32Like look, if the iOS 16 requiring APIs

0:28:37are the thing I need to do this, fine.

0:28:39Like my prototype is requiring iOS 16 so far

0:28:42just so I don't get any warnings anywhere.

0:28:43I just wanna see what's possible.

0:28:45And you know, I'll decide then.

0:28:46But I want to try to get things to be clean and correct

0:28:51and idiomatic if I can.

0:28:52Like I don't want to be doing a lot of hacks.

0:28:54I don't want to be doing a lot of weird customization.

0:28:56I don't wanna have to use UI kit bridging inside of it

0:28:59to get certain things to work.

0:29:01I want to use only SwiftUI if I can, as much as possible,

0:29:04'cause the whole point of doing this is to pull my code

0:29:08forward 10 years and actually be able to work

0:29:11in that clean modern way like the conference slides do.

0:29:14And just getting there, I'm just hitting so many walls.

0:29:18And parts of it are so good that it motivates me

0:29:21to keep going, and I'm sure a lot of this is, again,

0:29:24just 'cause I'm new at this, but I hope I can get there,

0:29:28because I've seen, I've tasted,

0:29:32do you taste the Promised Land?

0:29:33That sounds kind of gross.

0:29:35- You've seen the Promised Land.

0:29:36- Okay, you've seen the Promised Land.

0:29:37(laughing)

0:29:38I've seen the mirage of how good this can be

0:29:42in my dumb little now playing placeholder screen

0:29:45and I just am trying to get there

0:29:47and it's so, so hard to get there.

0:29:50- Yeah, and it's tough too because,

0:29:52I mean, I've never seen the code for Overcast

0:29:54but just imagining it.

0:29:56the now playing screen in particular to my eyes,

0:29:59like screams Combine and SwiftUI.

0:30:01Like it's a bunch of things,

0:30:03it's a bunch of events happening over time

0:30:05where not a lot of things,

0:30:07well, leaving aside the user input,

0:30:09like not a lot is changing.

0:30:10You just need to update like counters

0:30:12and the state of whether or not you're playing

0:30:14or paused or whatever.

0:30:15Like all of this stuff is just like custom tailor-made

0:30:19for Combine and SwiftUI.

0:30:20Like this is the perfect problem statement

0:30:22for Combine and SwiftUI.

0:30:23But the problem is there's all that other stuff around it,

0:30:25which is important, it's super important.

0:30:28Like I'm not trying to say you're wasting your time

0:30:30or anything, all of the user interface stuff

0:30:31is super important and if you can't get through that hurdle,

0:30:35then it's almost like you failed before you've even begun.

0:30:38And it's too bad because I can see how this would be

0:30:41such a perfect match made in heaven

0:30:43if you can just get there and I don't blame you if you can.

0:30:45- Yeah and this is why I decided to start with

0:30:48what I thought would probably be the hardest part,

0:30:50which is like this big structural navigation.

0:30:52So like where SwiftUI I think shines

0:30:55and has shown, yeah, has shown since it was introduced

0:30:59for the most part is in the design of single screens.

0:31:03When you have just a screen, a view,

0:31:06laying that out with SwiftUI is awesome.

0:31:08Where SwiftUI I think has had a lot of challenges

0:31:11is in navigation, presentation, modal,

0:31:15like all the things where you are changing screens,

0:31:18you are structuring multiple screen things

0:31:20or navigational patterns and directions,

0:31:22That kind of stuff, it has had a very hard time with

0:31:26and I don't yet know if we're out of the woods on that.

0:31:28But I decided, let me start with that

0:31:30because if I can get that right,

0:31:32then I will be much further along

0:31:35on the path towards my goal of being all SwiftUI.

0:31:38I would love if, whenever this crazy UI project is done,

0:31:43maybe, I don't know, a year from now,

0:31:45I would love if I can say this whole new branch of the app

0:31:49now that's using this is all SwiftUI.

0:31:52That would be great, I would love to get there.

0:31:54I don't know that I can yet.

0:31:56I mean, and you know, all might have an asterisk like,

0:31:59you know, the AirPlay view doesn't have a SwiftUI thing,

0:32:01so I had to wrap that, but you know, other,

0:32:02like, for the most part, I want as much of it as possible

0:32:05to be SwiftUI, 'cause that's the goal here.

0:32:09And so, and again, I'm willing to give up certain details

0:32:12of how things look and work in order to get there.

0:32:16But I gotta find out if what I want is even possible.

0:32:19And so far, it's just wall after wall after wall.

0:32:23But I have made some progress.

0:32:26And so I'm happy about that.

0:32:27And I'm motivated to keep going.

0:32:29Sounds like when you wanted to make an app with no setting

0:32:31screen.

0:32:32I feel like you need to be a little bit

0:32:33looser on these edicts that you put before yourself.

0:32:36Making an app with the navigation skeleton

0:32:38entirely in UIKit but all your views are SwiftUI,

0:32:41that's perfectly fine.

0:32:43It will cause you fewer headaches.

0:32:44And you can so easily convert that down the line,

0:32:46because every one of those SwiftUI views is easy to take

0:32:49and shove into a Swift UI thing.

0:32:51That's her point.

0:32:52- I mean, that's my fallback ultimately.

0:32:54If I have to, like that's why today I started playing

0:32:56with the just embedding a UI split view.

0:32:58Like if I have to do that fine,

0:33:01I would just really rather not.

0:33:03Like if I can--

0:33:04- And you'd be making an upgrade

0:33:05'cause you'd be getting rid of all the objective C code

0:33:06and doing it in Swift and you think that's not a big deal,

0:33:08it's like well, who cares?

0:33:09You know, UIKit in Swift versus UIKit in Objective-C,

0:33:12it's so much less code, it's so much nicer,

0:33:13you'll be very happy.

0:33:14I think you should just do that.

0:33:16- Sure, and again, like,

0:33:17and I wrote the Objective-C code 10 years,

0:33:20eight years ago, whatever it was,

0:33:21I wrote that a long time ago where some of that,

0:33:24first of all, I've gotten better as a programmer,

0:33:25so some of that I would just write better.

0:33:27Second of all, a lot of it now has newer methods

0:33:30that would use less code no matter which language

0:33:32I'm doing it in.

0:33:33So I could say things there, but ultimately,

0:33:36anything that I'm, if I'm at this level here,

0:33:40doing basics of navigation structure,

0:33:42if I have to wrap UIKit and call into it from SwiftUI

0:33:46and stuff or vice versa, to me that is technical debt.

0:33:49That I know I'll have to repay that down the road

0:33:52at some point if I leave it in.

0:33:53So let me take a bit of extra time now and see,

0:33:57can I get away without this?

0:33:59Can't like, what can I do here?

0:34:01Can I maybe not wrap this?

0:34:03And then I can see, you know,

0:34:06I'm willing to spend some time up front now

0:34:09and have one very ranty podcast pre-show

0:34:12to avoid possibly having to rewrite this stuff

0:34:14in three to five years.

0:34:17We are sponsored this week by the Stack Overflow Podcast.

0:34:22This was one of the first podcasts I ever listened to.

0:34:26It was something I would walk to work,

0:34:28back when I worked at Tumblr in Manhattan,

0:34:30and I was walking to work listening to this on my iPod

0:34:33before I even had an iPhone.

0:34:34And it's such a great podcast,

0:34:36and it really went through the history of the site.

0:34:38And now, they have matured and moved on so much,

0:34:41So over a dozen years, the Stack Overflow Podcast

0:34:45has continued to explore what it means to be a developer

0:34:49and how the art and practice of software engineering

0:34:51is changing our world.

0:34:53And they cover everything you might think

0:34:55for a developer podcast, Rails to React, Java to Node.

0:34:59Stack Overflow Podcast hosts important conversations

0:35:02and fascinating guests that will help you understand

0:35:04how technology is made and where it's headed.

0:35:07It's hosted by Ben Popper, Matt Kiernanter,

0:35:10Cassidy Williams and Ciora Ford,

0:35:12and it is your home for all things code.

0:35:15With new episodes dropping twice a week,

0:35:17check out the Stack Overflow podcast.

0:35:18This is a great podcast, it's been there forever,

0:35:21basically, in podcasting terms.

0:35:23Now that I kind of feel old now,

0:35:24but the Stack Overflow podcast is just great.

0:35:27We all love Stack Overflow, it's an amazing site

0:35:29and amazing resource for programmers.

0:35:30And the podcast is what you'd expect from them,

0:35:33from the team that made that.

0:35:35It is that good.

0:35:36So check it out yourself, Stack Overflow podcast.

0:35:39It's available in every podcast app.

0:35:41Wherever you get your podcasts,

0:35:43go get the Stack Overflow podcast.

0:35:45Subscribe today.

0:35:46Thank you so much to the Stack Overflow podcast

0:35:48for talking in my ears for a very long time,

0:35:51over a very long time.

0:35:52It's just wonderful.

0:35:53And for sponsoring our show.

0:35:55- All right, let's start the show.

0:36:00Very quickly, there is an alternative piehole workaround.

0:36:03Last week I had spoken about how I'd gotten a tip--

0:36:05- Still funny.

0:36:06- Still funny.

0:36:07a tip about how Safari will occasionally stall as it's ostensibly going and doing things with

0:36:13iCloud private relay and you can uncheck the hide my stuff in the Safari preferences to get it to

0:36:19work better. A lot of people wrote in and said that you could add, and I'll put this in the show notes,

0:36:23block_icloud_pr=false in pihole-ftl.conf and supposedly that'll fix all your problems for

0:36:32for all of your clients across your network.

0:36:35I tried this and perhaps here again,

0:36:37I'm falling back on user error,

0:36:38but for what it's worth, it did not work for me.

0:36:42So your mileage may vary,

0:36:43but it is something you can check out

0:36:45and I will put a link in,

0:36:46or I'm not gonna put a link in the show notes,

0:36:47but I will put the relevant stuff in the show notes.

0:36:50So you might wanna give that a shot.

0:36:53Hey Marco, you wanna talk about SwiftUI?

0:36:55(laughing)

0:36:56- That's a great way to speed through a show.

0:36:58- Oh god.

0:36:59- It'll be really quick.

0:37:00I just have a few minutes of content on SwiftUI.

0:37:02- Yeah, well actually I didn't put this in here,

0:37:04I think Jon did.

0:37:04So Jon, tell us about switching between SwiftUI's

0:37:06HStack and VStack.

0:37:07- Yeah, we should talk about SwiftUI's topic,

0:37:09we don't cover enough on the show.

0:37:11(laughing)

0:37:13This is, last week I was complaining about SwiftUI,

0:37:16and mentioned one of the problems I was having

0:37:19and the various hacks I was using to work around it,

0:37:21and like clockwork, Swift by Sundell,

0:37:24the great website that has lots of good tips on Swift

0:37:26and SwiftUI, posted an article that has a solution

0:37:30to my problem, which was I wanted to, you know,

0:37:33sometimes I want to use a VStack,

0:37:34sometimes I want to use an HStack,

0:37:37and this was all before a view that fits or whatever.

0:37:40And I tried writing something myself

0:37:42that would switch between them, it was a pain,

0:37:44so I ended up just doing a conditional, which is not ideal,

0:37:46'cause then I have to, you know, copy the code into a sub,

0:37:49and then, anyway.

0:37:49But he's got an article on how to do just that,

0:37:54and I ended up writing something a little bit different

0:37:56than what he made, because my needs

0:37:57are a little bit different.

0:37:58So now in my app I have a thing called HStack or VStack that I call instead of calling VStack

0:38:05and HStack in conditionals.

0:38:07So I was happy about that and if you were wondering how to do it, check out the article.

0:38:11All right, so you said that you have some improvements about conditionals in your if

0:38:17modifier and I'd like to know about that, but before we do, I'd like everyone, if it's

0:38:22safe and if you can, and maybe Marco put a screenshot in the chapter art.

0:38:27If you could please click the link to the gist

0:38:30that John has provided.

0:38:33What in the name of Zeus's butthole is going on?

0:38:37- I don't use cuddled elses.

0:38:38I think we've talked about it before.

0:38:39Cuddled elses are bad.

0:38:41- You are a monster.

0:38:42Look at line six and seven.

0:38:43- Cuddled elses are very, very bad.

0:38:46- What is this insanity?

0:38:47If you're gonna do it this way,

0:38:49then you should put the open bracket from line four

0:38:52on its own line and the open bracket from line seven

0:38:54on its own line. - I used to do it that way,

0:38:55but I slowly got converted over the years

0:38:56to doing it this way.

0:38:58- So you've chosen the worst of all worlds.

0:39:00- No, this is just normal.

0:39:01This is the bog standard fat part of the bell curve.

0:39:06Everybody formats their code like this.

0:39:07- What?

0:39:08- Cuddled elses.

0:39:09- No, you're a monster.

0:39:10- Yes, cuddled elses are weird and nobody,

0:39:12and I can tell you having a long career in development

0:39:14in many different languages,

0:39:15nobody wanted to do BSD braces like I did.

0:39:17And I held onto them for a really long time

0:39:19for about half my career,

0:39:20but then eventually I was defeated by everybody else

0:39:22who wanted to do Kano.

0:39:23- Wait, which one is BSD braces?

0:39:24- BSD braces is where the open and the close

0:39:26on the same column.

0:39:27- Oh yeah, okay, yeah, I used to be devouted that as well,

0:39:29and I also lost that fight.

0:39:31- I couldn't hold onto that, I was defeated by the masses.

0:39:33- Yep, yep, yep. - It was just too much.

0:39:35But then the K and R is what you see here,

0:39:36where the open one comes after the if,

0:39:38and the closed one is online by itself.

0:39:40And no, no cuddled elses.

0:39:41Cuddled elses are in the vast minority,

0:39:43and they're bad, and you should not use them.

0:39:45- Okay. - Disagree.

0:39:46- Do me a favor, do me a favor, listeners.

0:39:48If you think cuddled elses are okay,

0:39:51@Syracuse on Twitter, you go ahead and tell him

0:39:53how wrong he is, because he is very wrong.

0:39:56- And to be clear, this is when the closed brace

0:39:59of the previous, of the if clause is on the same line

0:40:01as the else and the open brace.

0:40:02So it goes closed brace, else, open brace,

0:40:04all in one line, right?

0:40:06- Correct. - I know people like it,

0:40:07but they're in the minority and they're wrong, so oh well.

0:40:10- No, Jon, no, this is insanity.

0:40:13Either go with BSD or cuddle the elses,

0:40:16don't do this halfway nonsense, this is bananas.

0:40:19- They need to feel loved, Jon.

0:40:20(laughing)

0:40:21- It's not halfway, it's just the normal way.

0:40:23I'm telling you, having read so many other people's code

0:40:27and worked with so many different programmers,

0:40:29literally thousands of other programmers I have worked with

0:40:32and looked at their code over the course of my career,

0:40:34and I can tell you that the style you see here

0:40:36is the most common across all languages,

0:40:38all time, all decades, ever, ever.

0:40:40Everything else that deviates from that

0:40:43is an idiosyncrasy that is in the minority.

0:40:45- Well, of the tens of programmers I've ever worked with

0:40:48or seen their code, they disagree.

0:40:51- Yeah, I have been a professional developer

0:40:53for almost 20 years, I have never in my life

0:40:56seen this monstrosity that I'm looking at right now.

0:40:59Not once. - It's all over

0:41:00Apple's codes, not everyone calls it Cuddled Elses.

0:41:01- No it is not, no it is not.

0:41:03It's either, what did you call it?

0:41:04BSD or it's Cuddled Elses.

0:41:06It's this in between. - You saw BSD and Apple code,

0:41:07I don't see that anywhere.

0:41:08- No, what did you call it?

0:41:09What's the, yeah, oh, the, yeah, BSD.

0:41:11- Yeah, BSD braces, where they open and close

0:41:12are on some common refill, I and F.

0:41:15- Yeah, I don't think I see that in Apple's code necessarily

0:41:17but the only things I've seen reliably, professionally

0:41:21is either BSD or Cuddled Elses.

0:41:22This nonsense, I cannot stand it.

0:41:25I cannot abide.

0:41:26Anyway, moving on.

0:41:27Tell me about your awful looking

0:41:29but otherwise functional if modifier.

0:41:31- Yeah, so last week I had a little if modifier.

0:41:33It's like in the desperation of Swift UI.

0:41:35You can't get it to do what you want.

0:41:36You just need some way to do one thing

0:41:39and then something else

0:41:39and you can't just write straight up code

0:41:40because that big chain of modifiers

0:41:42is not regular Swift code.

0:41:45It is in fact a chain of calls.

0:41:47What can you do there?

0:41:49Well, you can make an if modifier and say,

0:41:50I'm tired of dealing with this.

0:41:51I can't figure out how to make this work.

0:41:52I'm just going to make a .if modifier,

0:41:54and it's really easy to do that.

0:41:55And I posted a code for that last week.

0:41:57So a couple of people said you can

0:41:59make that code more efficient so you

0:42:01don't have to wrap everything in any view

0:42:04if you just use the view builder directive.

0:42:06So that's the new version that we're talking about here.

0:42:08You can take a look at it.

0:42:09We'll put a link in the show notes.

0:42:10It's basically the same as the code

0:42:11of last week with just a couple of extra view builder

0:42:13annotations and no more any view wrapping for stuff.

0:42:16But the real problem is that any time you

0:42:19do this type of conditional, Swift UI

0:42:21has a more difficult time figuring out

0:42:24how to animate between states because it can't sort of see

0:42:28into the if, right?

0:42:30And the return value from the if is different,

0:42:32depending on which branch takes or whatever.

0:42:34And so the suggestion for many people

0:42:35was don't do that instead.

0:42:38Lots of SwiftUI directives, if you pass them nil or something,

0:42:42they basically become no ops.

0:42:44And so then you just do like a ternary operator

0:42:46or something within the argument list

0:42:48and say if some condition is set, nil.

0:42:50otherwise do the thing.

0:42:51And then you just have a regular chain with no conditionals

0:42:54and each one of those, each thing in the chain,

0:42:56you just have like, you know, some argument or something

0:42:58that says should this be a no op

0:43:00or should it actually do something?

0:43:01And Swift finds it easier to transition between states

0:43:04if you do that.

0:43:05So I played with this.

0:43:07I did actually end up expunging all of the .ifs

0:43:09from my entire code base.

0:43:11And I have to say, after I finished that,

0:43:13the code is less clear.

0:43:15Like I can squint at it and say, yeah,

0:43:17this used to be a thing where I did if this

0:43:20this big long of modifiers, right?

0:43:22And now it is just this big long thing of modifiers.

0:43:24But every modifier is a different way

0:43:27to tell it to be a no op.

0:43:30Some of them don't have any good way

0:43:31to tell them to be a no op,

0:43:32so you have to do these weird hacks, right?

0:43:34If you looked at my code now,

0:43:36it would be hard for you to tell,

0:43:37especially if I spread the lines out a little bit,

0:43:39it would be hard for you to tell

0:43:41what used to be in an if.

0:43:42It is, it makes less sense, it reads less clearly

0:43:45than before when it was .if

0:43:47and then a whole bunch of stuff indented or whatever.

0:43:49So that's a little disappointing, but all that said,

0:43:52and I don't know the details of why the .if

0:43:54confuses SwiftUI, but I do know more than I ever wanted

0:43:57to know about how SwiftUI behaves when transitioning

0:44:02between states where it can't figure out

0:44:05what the relationship between the states is.

0:44:07I don't wanna talk more about dev stuff

0:44:10'cause we already had a big dev conversation,

0:44:11but briefly, I basically got a list

0:44:14and then I've got, it changes state to a list

0:44:16with either one more item or one fewer item.

0:44:18And to a human, it's really easy to see what changed.

0:44:20Oh, what changed?

0:44:21This item was added.

0:44:21Oh, what changed?

0:44:22This item was removed, right?

0:44:23So you would think that any kind of animation

0:44:26between those states, it'd be really simple

0:44:28to say something about, oh, the thing that was added,

0:44:30I want it to slowly fade in,

0:44:32or I want it to grow from being small to big, right?

0:44:35But SwiftUI, especially given the mess

0:44:37I've already had to make with it,

0:44:38has no idea how those states relate to each other.

0:44:40So it does some random animation.

0:44:42It's like, what are you even doing, right?

0:44:44Because in reality, what I'm giving it to,

0:44:47especially with things passed by value,

0:44:48it's getting an entirely new list.

0:44:50It just so happens that the new list is exactly the same

0:44:52as the old list with the exception of one item,

0:44:54but SwiftUI can't figure that out.

0:44:56So what I ended up doing,

0:44:57speaking of things that are less clear than they were,

0:44:59is the diffing that the SwiftUI does is a diffing for you.

0:45:02You just give it the list and it will be able to diff them

0:45:05and know what's changed or whatever.

0:45:07That works great until you wanna animate it

0:45:09and then you realize it has no idea about this.

0:45:11So now I have to do the diffing outside of the SwiftUI.

0:45:15I have my model, and instead of my model being real simple,

0:45:18like, oh, here's SwiftUI, here's the list of things.

0:45:20Oh, here's a new list of things.

0:45:22And it's the same as the old list, my plus or minus one.

0:45:24Works great until you animate it.

0:45:25Now what I have to do is on the outside,

0:45:28take the old list and the new list,

0:45:29and figure out how to mutate the old list

0:45:31so that it looks like the new list

0:45:33so that SwiftUI isn't confused about how it changed

0:45:35because it is literally the same objects

0:45:37except for the one I added or the one I removed.

0:45:39And that was extremely frustrating.

0:45:41It made my code much uglier,

0:45:43And the whole idea of, like, you know,

0:45:45SwiftUI's internals diffing the data structures

0:45:46and animating them,

0:45:48apparently if you do enough fancy stuff,

0:45:50SwiftUI gets confused about what's what

0:45:51and can't animate between the states.

0:45:53So that was part of why I totally removed this .if thing

0:45:56from my code to see if that was the problem.

0:45:58Nope, that wasn't the problem.

0:45:59But anyway, I left it removed.

0:46:01But if you're interested,

0:46:02there's a bunch of other links we'll put in the show.

0:46:05It's about why that .if conditional is not a great idea.

0:46:09And then there's also a link to a WWDC 2021 session

0:46:13that talks about the internals

0:46:14that explains this a little bit.

0:46:16- Yeah, and I think the short-shore version is

0:46:18because these are all not pass by reference,

0:46:21but pass by value,

0:46:22it just has to like look at the structure of everything

0:46:25in order to figure out, okay, what's the same,

0:46:27what's different?

0:46:28And with this if modifier, you're changing the structure.

0:46:31You know, what's being returned is a different type

0:46:33than what it would have been otherwise.

0:46:35And that's what screws everything up.

0:46:36So yeah, that objective-c.io post is really good

0:46:39John, tell me about macOS support lifetime.

0:46:41Should I get my tinfoil hat out?

0:46:43-We talked about this, I think, last week,

0:46:45about macOS Ventura dropping support for older Macs,

0:46:49and, you know, how -- what's the worst-case scenario?

0:46:52Like, you could have bought a Mac recently,

0:46:54and now you can't even upgrade to the latest OS.

0:46:57So, Ars Technica did a good article

0:46:59about what has it been like over the past few decades

0:47:03in terms of support for OS updates.

0:47:05If you buy a Mac, how long after you buy a Mac

0:47:08How long after you buy that Mac can you continue to install the latest version of Mac OS?

0:47:12And they did some graphs here and the graphs are pretty unsurprising if you take a look

0:47:18at them.

0:47:19If you know any Apple history you'll see it's basically two humps like a camel.

0:47:21There's a big hump and then a dip and then another hump, right?

0:47:24What's going on with that dip around 2005-ish?

0:47:27That was the Intel transition.

0:47:29And so now fast forwarding to modern day, we're going through the ARM transition now.

0:47:34It doesn't surprise me that there's a dip.

0:47:36The big dip in 2005 was not just Intel transition,

0:47:39but also 32-bit to 64-bit.

0:47:40So it's kind of a double whammy around that same

0:47:43couple year span there.

0:47:44So we're still dipping now.

0:47:46And if you want to know what the values are,

0:47:47like the low of from introduction for Mac's release

0:47:51between 1998 and 2026, the low of 4.13 years

0:47:56is how long you got Mac up,

0:47:57how long you could install the latest version of macOS.

0:48:00And the high is around like 8.13 years or whatever.

0:48:04So I don't think it's surprising that the ARM transition

0:48:07is cutting off some Macs.

0:48:08I think it is,

0:48:09I mean, you would say it was disappointing,

0:48:12but honestly, as someone who,

0:48:13I mean, I'm still using an Intel Mac now,

0:48:15I would much prefer Apple to concentrate entirely

0:48:18on ARM Macs and not worry about Intel Macs

0:48:22after a reasonable point.

0:48:23And if you look at the levels that we're approaching

0:48:25these days, it's not even down to the levels

0:48:28it was during the Intel transition.

0:48:29It's just lower than it was.

0:48:31We went a couple of years where there was no,

0:48:34you know, where macOS didn't drop any supported Macs,

0:48:37and now we're kind of catching up for lost time here.

0:48:39So I don't think it's that bad,

0:48:40but if you wanna look at the details in a bunch of graphs,

0:48:42check out the article.

0:48:43- Good talk.

0:48:46All right, do you wanna tell me about the benefits

0:48:47of IPv6, please, and thank you.

0:48:48- It's a long time ago when we were,

0:48:50I think Marco was asking,

0:48:51do I have to understand IPv6?

0:48:52Why would I wanna do that?

0:48:54You know, maybe you're--

0:48:55- I'm too busy breaking my brain with Swift UI.

0:48:57I need to like kick some stuff out.

0:48:58I need to evict some things out of my cache.

0:49:01Yeah, should I add this?

0:49:05Is this something I need to add?

0:49:07What benefits are there other than being able to talk

0:49:09to other clients that use IPv6?

0:49:11And Dan Chandler wrote in to say,

0:49:12"IPv6 has a number of features that greatly enhance

0:49:14the security of online communications.

0:49:16When IPv4 was created, it was assumed

0:49:18that only a small number of systems

0:49:19would ever be connected and that at some level,

0:49:21trust would be assumed.

0:49:22IPv6 addresses the reality of today's internet

0:49:24as a hostile environment.

0:49:25IPv6 is much more secure than IPv4 for a lot of reasons."

0:49:28And I'll put a link in the show notes

0:49:29that lists some of those reasons.

0:49:30Here's just a couple of them from that article.

0:49:32Mandatory use of IPsec, authentication header,

0:49:35which provides authentication for data integrity

0:49:37for the entire IPv6 packet.

0:49:39If an endpoint receives a packet with specific source address,

0:49:41it can be assured that a packet did indeed

0:49:43come from that IP address.

0:49:44This may sound weird to you

0:49:45if you don't know how IPv4 works,

0:49:47but the idea that you can just lie

0:49:49and say that the source of this packet is not what it was

0:49:53is a thing you can do,

0:49:54because if you don't have any kind of data integrity

0:49:57where you can prove that you are,

0:49:59that the source really is authentic.

0:50:00It's really easy to change that stuff.

0:50:02Well, not really easy, but it's possible, which is scary.

0:50:05And then finally there's a ESP,

0:50:07encapsulating security payload.

0:50:08No one else, not even the intended receiver,

0:50:10can read the content of the communication in transit.

0:50:13So yeah, if you look at this, you see all these features

0:50:16and you think, IPv4 doesn't have those?

0:50:19You can change the source.

0:50:20Anyone can read the content.

0:50:22IPsec is not required.

0:50:24It's kind of like if we were using the web

0:50:26and you never saw HTTPS, not quite the same thing,

0:50:29not quite that bad, but yeah, IPv6 was made late enough

0:50:34that they understood that not having these features

0:50:36is a really bad idea.

0:50:37IPv4 was made more in the sort of academic days

0:50:41where it was assumed that everyone would trust each other

0:50:43and be nice and yeah, they didn't quite understand

0:50:46what the internet would become back then.

0:50:48- We are sponsored this week by Hover,

0:50:51a great place to buy a domain name.

0:50:54Hover is a jumping off point for tons of entrepreneurs.

0:50:57And Hover wants you to start your next business,

0:51:00the same way I do, with a great domain name.

0:51:03They have over 300 domain name extensions

0:51:05to choose from at Hover, so you can build your brand online

0:51:09with exactly what you want to say.

0:51:11No matter what you want to build,

0:51:12there is a domain name waiting for it.

0:51:14Hover has excellent technical support available

0:51:16to help you get started, answer any questions you might have,

0:51:19and this support team doesn't try to upsell you.

0:51:21They just want to get you online and get you going.

0:51:23and they give you all sorts of great stuff with Hover.

0:51:25Free, Whois privacy protection,

0:51:27a super clean and pleasant UI,

0:51:30and they also have monthly sales on popular TLDs.

0:51:33So no wonder Hover is such a popular choice

0:51:36for people starting all kinds of businesses

0:51:37and personal sites.

0:51:38I personally have used Hover for many, many years now,

0:51:42and it's just a pleasant experience

0:51:44to buy management domains there.

0:51:46At no point is it ever fighting you.

0:51:48They have a great search, too.

0:51:49They probably have the best search I've ever seen,

0:51:51'cause sometimes exactly the name you want

0:51:53might not be available, but the search can reveal

0:51:56a lot of possibilities that are available to you.

0:51:58And they just have great search there,

0:52:00great management panel once you get there,

0:52:02great pricing, very competitive.

0:52:04So it's a great domain name registrar.

0:52:07And if you need a domain name for anything,

0:52:09I strongly recommend Hover.

0:52:10They have email stuff as well, I've done that there as well.

0:52:12Great experiences all around for the many years

0:52:14that I've been with them.

0:52:15So get your next domain name and many more

0:52:18at hover.com/atp.

0:52:20You can get a 10% discount with that referral link

0:52:23on all new purchases.

0:52:25Once again, hover.com/ATP for 10% off all new purchases.

0:52:30Make a name for yourself with Hover.

0:52:33- Let's talk about the belated birthday gift

0:52:41that Apple has given Mr. Marco Arment.

0:52:45Marco, how excited are you?

0:52:47Because apparently, Johnny Ive is completely done with Apple

0:52:50and Apple's completely done with Ive.

0:52:52- I've known for a while, well, you know, quote, known.

0:52:55We've heard for a while that Johnny's involvement

0:52:59in actual product design was not even that significant,

0:53:04even when he was still officially working there

0:53:07for the last few years.

0:53:08That basically, like, he, it seemed from most reports

0:53:12that he was really getting burnt out,

0:53:15and also, I think, bored with computers,

0:53:17and as designy people tend to do,

0:53:19you know, that you wanna move on,

0:53:21design new kinds of things at some point.

0:53:23And so apparently, the rumors seem to all be,

0:53:26you know, coalescing on that he was

0:53:29very involved in Apple Park, you know, the building,

0:53:32and lots of little details about the building,

0:53:34and like the furniture, and the door handles,

0:53:36and all this stuff.

0:53:37And that was, I mean, that was years of, you know,

0:53:41involvement there, where he seemed to be stepping away

0:53:45from the products, like, slowly.

0:53:47he was apparently not super involved.

0:53:51And so then by the time that his official announcement

0:53:55that he was actually leaving to go form his own consultancy,

0:53:58by the time that announcement came out,

0:54:00people in the know or people who in the room

0:54:03will seem to already be pretty sure

0:54:05that he wasn't really there that much to begin with

0:54:08by that point.

0:54:09He had checked out, he was burnt out,

0:54:11he wanted new challenges, he didn't seem to care

0:54:13that much about computers anymore,

0:54:14he'd been designing them forever.

0:54:16And I can't blame him, he wants a new thing after all that.

0:54:19Totally understandable.

0:54:20At the time though, Johnny's involvement in the company

0:54:23was fairly important to the company's image

0:54:25and to Wall Street.

0:54:26And in the same way, it was considered

0:54:29a very delicate matter as Steve Jobs' health declined.

0:54:34They were very careful with how they worded that

0:54:37when they revealed certain things to Wall Street

0:54:39and things like that because they knew that

0:54:41a sudden shock about Steve Jobs when he was a CEO

0:54:44would have been taken poorly by the stock market

0:54:47and the press and reputation, maybe the employees even.

0:54:51After Steve passed away and they managed that transition

0:54:54as well as they could given the circumstances,

0:54:57then Johnny was left and Johnny became

0:55:00the celebrity person of Apple

0:55:03to Wall Street and to the press for a while.

0:55:06Never as much as Steve was,

0:55:08but he was still very significant and important

0:55:10in a publicity sense.

0:55:12I think Johnny's exit was very, very padded and cushioned and couched and was very on

0:55:21message to follow this certain planned trajectory that I think overstated his role towards the

0:55:28end by quite a lot.

0:55:30Because I think the reality seems to point to that he wasn't really that involved towards

0:55:34the end of his time there.

0:55:36And I think when he finally did officially leave and go form this company, they had this

0:55:43party announcement like, "Oh, Johnny will continue consulting for Apple.

0:55:47Apple will be the first client of this new company."

0:55:49Or however they worded it.

0:55:51That I don't think was really ever going to be a thing.

0:55:54I think that was solely to continue the very soft exit of Johnny Ive so as not to upset

0:56:01Wall Street and the press and the analysts and everything else.

0:56:04And they did a masterful job of handling that in a way that nobody really freaked out, nobody

0:56:09was ever that surprised by any part of it.

0:56:12And I think this is just the final, like, "Alright, now we're really done."

0:56:15Now he's really 100% gone and no longer involved.

0:56:20Didn't they pay $100 million to his consulting company?

0:56:24Yeah.

0:56:25I mean, that was part of the story, is that it wasn't just like, "Oh, you know, he's leaving

0:56:28to do his own thing and we'll still be working with them."

0:56:31It was actually, we'll still be working with them and we will pay them $100 million to

0:56:35continue to work with us, which, I mean, you could say, boy, that seems like a lot, but

0:56:39then again, Johnny Ive has quite a reputation and a resume, so if you were paying for him

0:56:42starting from nothing, you'd probably pay a similar amount, but to your point, if it

0:56:46really was to just kind of make the exit smooth and he was already kind of checked out, what

0:56:51did that $100 million buy you?

0:56:53I mean, maybe it protected your stock price from going down by a much, much greater amount,

0:56:58monetarily speaking, and absolute values, perhaps,

0:57:00but it just, part of the article is that it seemed like

0:57:03that the people who were still at Apple

0:57:04felt kind of bitter that they're,

0:57:06the outgoing person is getting $100 million

0:57:08when they're not actually doing any of the work

0:57:11and hadn't been for a while even when they were here.

0:57:13- And there's lots of different ways

0:57:14that $100 million thing could have come up.

0:57:16I mean, it could have just been like, you know,

0:57:18part of the transition that Johnny negotiated.

0:57:21I mean, by all accounts, once Steve was gone,

0:57:26Johnny became extremely politically powerful in the company.

0:57:30He basically could do whatever he wanted.

0:57:32And his say mattered a lot.

0:57:34He had tons of clout, tons of weight to his decisions

0:57:37and to his preferences and opinions and everything.

0:57:39I mean, as we've talked about, to a fault.

0:57:41Like that often resulted in bad decisions being made

0:57:44for the products or for the customers.

0:57:47Or maybe for the company in cases like this.

0:57:49And so who knows how he negotiated that

0:57:51or why they decided to do that.

0:57:53I'm sure it was to some degree mutual

0:57:55because of various transitional reasons,

0:57:58but I have a feeling it was always intended

0:58:01to be temporary and transitional,

0:58:03and that the idea was probably never

0:58:05to actually have this go indefinitely into the future.

0:58:08I bet this was a contract for a certain number of years,

0:58:11and I believe they reported it was

0:58:13for a certain number of years, it was up for renewal,

0:58:15and they decided not to renew it.

0:58:16I bet that was always the plan, really.

0:58:18And I don't think that would be a sudden surprise to Johnny.

0:58:21And by the way, and I think you're right, John,

0:58:23The design team now that's there now,

0:58:27led by Evans Hanke, who was formerly,

0:58:28I think she formerly basically ran the studio

0:58:31when Johnny was there too,

0:58:33but he was a level above her, managerially.

0:58:36But I think she'd been doing the work

0:58:37for a while before that.

0:58:39But she and her team deserve full credit

0:58:43for what they've done.

0:58:44They don't need the ghost of Johnny Ive,

0:58:47people thinking that Johnny had anything to do

0:58:49with all these awesome new products that we got,

0:58:50because he probably didn't.

0:58:52Maybe he glanced at the plans at some point,

0:58:55but chances are he didn't have much to do

0:58:57with anything that we see today out of Apple.

0:59:00- You keep saying this, but you're talking

0:59:01about hardware, right?

0:59:02But didn't they change Johnny to be the head

0:59:05of design for hardware and software?

0:59:08- They did, yes.

0:59:09- So who took over the software side of that?

0:59:11- Well, yeah, well that's Alan Dye,

0:59:13and I don't have a lot of nice things to say about Alan Dye,

0:59:15so I'm gonna leave that aside for now.

0:59:18But on the hardware side, their hardware design

0:59:21been excellent in the post-Johnny era, assuming that the Johnny era ended roughly when he

0:59:25officially left the company.

0:59:27Even though, again, it probably was a little bit before that, really.

0:59:30But anyway, assuming that he hasn't had much, if anything, to do with the company since

0:59:34then, the current design team deserves full credit.

0:59:39They don't need to be in any way in people's minds sharing credit with Johnny Ive over

0:59:44what they've done recently.

0:59:45Because they've done amazing work and they deserve to have that be theirs and 100% theirs,

0:59:50some guy who they probably never see anymore who gets a whole bunch of money from the company

0:59:56for some reason up until now only because of his past and not because of anything he's

1:00:01doing in the present. For the current design team, I see totally why they would probably

1:00:06be very in favor of ending this involvement. And even for Johnny Ive, you know, there was

1:00:11a thing in the article that said that Johnny, as part of the agreement, was precluded from

1:00:15from working on competing products.

1:00:17And Johnny loves cars.

1:00:21And Johnny, he doesn't even have some deal

1:00:23like where he's gonna work with Ferrari on something.

1:00:24- I think he already is.

1:00:25- Right, yeah, I think so too.

1:00:27So if that, maybe that was a bit of a friction point there,

1:00:31that if Apple is working on car stuff,

1:00:33they don't want Johnny to be working on cars

1:00:35if he's being contracted by Apple.

1:00:37That makes sense, that's reasonable.

1:00:40And I think Johnny should work with Ferrari,

1:00:42because that is exactly the kind of thing

1:00:44that esteemed high-end designers like him work on.

1:00:49They work on cars that look really cool

1:00:51that pretty much nobody buys,

1:00:53'cause they're not gonna design like the next Toyota.

1:00:56That's neither what they want,

1:00:58nor does Toyota want them.

1:00:59Johnny should design a Ferrari.

1:01:01That is perfect, 'cause that lets him have

1:01:03his creative outlet that he wants

1:01:05and has earned in this new area.

1:01:08It's not gonna be a mass market thing,

1:01:09but it doesn't need to be, that's fine.

1:01:11He and Mark Newsome can work on the next Christmas tree

1:01:13you know, wherever, like, they can do stuff like that.

1:01:16That's great.

1:01:16That's the kind of stuff he probably wants to do now.

1:01:19And so to still be bound by anything from Apple,

1:01:23any restrictions or any, you know, tie to them,

1:01:26is not that great for him either.

1:01:28So I think this makes total sense.

1:01:30Like, this was clearly meant to be a transitional thing

1:01:34to ease anybody's possible fears about Johnny

1:01:37no longer being at Apple.

1:01:38That transition is over and it went great

1:01:41because the stock market didn't seem to care,

1:01:43analysts didn't seem to care,

1:01:45and the new people, well, the people at Apple

1:01:47who took over are doing a fantastic job

1:01:50in the hardware department.

1:01:51So this is all good news as far as I'm concerned.

1:01:55- I think it kind of helped that they had a bunch

1:01:56of really crappy computers during this transition

1:01:59so that now that those are gone,

1:02:00like, you can, you know, things are on an upswing, right?

1:02:04If everything had been fantastic,

1:02:06but then Johnny leaves and then things start going downhill,

1:02:10everyone would be upset instead,

1:02:11what we got was things started to go downhill, Johnny left, and then things started to pick

1:02:14up and now he's gone for good.

1:02:15Yeah.

1:02:16Which I think is, you know, I mean, again, I thought that you're planning, you don't

1:02:19plan to make the butterfly keyboard, right?

1:02:21You don't plan to, you know, not put ports on your computers for years and years, but

1:02:25that's what they ended up doing and it made a lot of people upset.

1:02:29It's interesting with Ferrari or whatever, like, I mean, obviously those companies have

1:02:33a lot of money and there's cachet to them or whatever, but I've spent his entire career

1:02:38making things for the masses.

1:02:40Like, you know, the iPods and iPhones are not niche devices.

1:02:43They sold literally billions of them, right?

1:02:45There's not much more, that's more mass market than the iPod and the iPhone in terms of famous

1:02:52consumer products, right?

1:02:54And in most things I've read about him, especially early in his career, he was actually interested

1:02:59in making something, yes, something nice, but also something nice that regular people

1:03:04could have.

1:03:05a lot of his presentation videos where he used to be

1:03:07in his little white world talking about products,

1:03:10you could see how excited he was to like,

1:03:12make something like the, you know, the iMac G4

1:03:15with the Chrome arm thing or whatever and say,

1:03:18"This computer, which isn't even one of our most expensive

1:03:20computers is going to go into the houses of regular people

1:03:24and they're going to have a beautiful object."

1:03:26He got excited about the iPods.

1:03:27Like, we made this iPod using these advanced techniques

1:03:31and look how beautiful it is.

1:03:32And everybody's gonna have one of these.

1:03:34You're just gonna go on the subway

1:03:35and you're gonna see 50 of them, right?

1:03:36And they're all like,

1:03:38that they're all nicer things than the average, you know,

1:03:42even similarly priced product, right?

1:03:44And I feel like he's always been excited about that.

1:03:46If you read some of his,

1:03:48read a couple of his biographies about

1:03:49designing pens and telephones, like not pre-smartphones,

1:03:53and you know, like just everyday objects,

1:03:54but also trying to make them just a little bit nicer

1:03:57than a typical plastic pen.

1:03:58It's still a plastic pen,

1:03:59but it's a plastic pen that,

1:04:01not through expensive materials or manufacturing,

1:04:03but just in your, just this choice of how it's constructed,

1:04:06it's a nicer pen for people to have at a similar price

1:04:09or maybe just a little bit more.

1:04:11So maybe he lost interest in that.

1:04:12Maybe he's like, I've done that, been there, done that.

1:04:14Like I spent my career doing that.

1:04:16I'm not going to make anything more mass market

1:04:17than I've already made.

1:04:18So now I want to make stuff that no one's even heard of

1:04:21just because it interests me.

1:04:22I don't need money anymore.

1:04:24I just want to make weird Ferraris.

1:04:25And by the way, I think that they're working

1:04:27with Ferrari on interiors, not the exteriors

1:04:30'cause Ferrari is weird about the exteriors

1:04:32they you know anyway I don't think he's doing exteriors and I would not want him

1:04:36to because from what I've heard of the Apple car I don't want him designing

1:04:39yeah interior exterior of any car but Ferrari interiors have been a mess so if

1:04:44he can help there that'd be great although I have a feeling that I

1:04:46wouldn't like any car interior that he designed either because I just feel like

1:04:49his current sort of predilections and his taste for design it's not a good fit

1:04:54for what I look for in automobiles it actually kind of is a good fit for the

1:04:58rumored you know the apple car with no steering wheel that's just like this personal transport

1:05:03Jetson bubblemobile I think Johnny I would do a good job on that it's just not something I'm

1:05:08interested in but anyway yeah like him I I feel happy for him I feel happy for apple and I feel

1:05:14happy for Johnny because I think like you said they will both they'll both be free to do what

1:05:18they want everyone who is still at apple designing things um should feel better about you know the

1:05:25with a clean break.

1:05:26There are some points in this article about,

1:05:28not that Johnny was poaching people from Apple,

1:05:30but people were leaving Apple to go work for his company.

1:05:32He's got a lot of friends at Apple,

1:05:33and some other people are at similar stages in their career

1:05:35where they feel like, I've done all these great things,

1:05:38I'm not going to top what I already did

1:05:40in terms of Apple stuff,

1:05:42so it's time for me to move on and do something else.

1:05:44But as far as I'm concerned, let the new people in.

1:05:47I'm ready for new takes on what it means

1:05:50to be an Apple product.

1:05:52And I think we've seen a couple of new takes,

1:05:53albeit from people who were there when Johnny was there,

1:05:56but you gotta have this turnover.

1:05:58You gotta have the fresh blood in every once in a while,

1:06:02otherwise things can stagnate.

1:06:03And that's like the celebrity status of Johnny

1:06:07and Apple's desire to keep him there

1:06:11because of that celebrity status.

1:06:12It's just like keeping Tom and his Edison around

1:06:15or whatever, like someone whose name

1:06:18is in the public consciousness

1:06:19much more than you would think someone

1:06:20in that profession would ever be.

1:06:23They don't know or care what role the person has,

1:06:24they just know the name is associated with it.

1:06:26And so him wanting to leave back in like 2015 or whatever,

1:06:29and then having the folks at Apple

1:06:32just essentially beg him to stay

1:06:33because he provided value, essentially value

1:06:36to the stock price and public reception,

1:06:38that's not a great situation for anybody.

1:06:39Like, I mean, granted, he could have left

1:06:42whenever he wanted, but he listened to his friends at Apple

1:06:45and said, "Okay, I'll stick it out just a little bit longer,"

1:06:47but it just seemed like it was miserable for everybody.

1:06:49And I think this extended departure has been too long.

1:06:52But, you know, I also wouldn't turn down $100 million so that Apple could continue to say

1:06:57that they're working with Johnny.

1:07:00Whether they're actually working with him or not, who cares?

1:07:02Yeah.

1:07:03And if he's like, "Oh, I'd love to have that gig.

1:07:05Give me $200 million to do nothing."

1:07:07Well, if you designed the iMac, the iPhone, and the iPod, then you can get $100 million

1:07:12to do nothing.

1:07:13But until then, I probably can't command that kind of price.

1:07:17I'll get right on it.

1:07:19No, I agree with you guys.

1:07:20I think that this is long time coming.

1:07:23I think that it's probably a good thing.

1:07:25And certainly, if the hardware of the last few years,

1:07:30as you've said, Marco, if the hardware of the last few years

1:07:32is any sort of hint, then I think

1:07:34that we're potentially about to see some of Apple's best.

1:07:39I'm a little worried about these unreleased products like AR

1:07:42in the car if it ever ships.

1:07:43But I'm really pleased with this transition.

1:07:47And I think it's gone very well.

1:07:48And it's been great for me.

1:07:50I mean, in so many ways, this is the best time

1:07:53to be an Apple fan in a long time.

1:07:55So I'm really stoked.

1:07:57Let me ask you, John, why is it that we're talking

1:08:00about a gaming monitor next?

1:08:01Why do I care?

1:08:03What's going on?

1:08:04- We've talked about gaming monitors a few times.

1:08:06We've talked about monitors a lot,

1:08:07mostly in the context of Mac monitors.

1:08:09Now Apple finally made a monitor that fulfills the specs

1:08:12that we wanted for a price that is not

1:08:13completely unreasonable.

1:08:15And what, two out of three of us have that one now.

1:08:17I did write, you got one, right, Jomaro?

1:08:19- The studio display, no.

1:08:21- Oh no, in case you got two, that's what I'm thinking.

1:08:22- No, no, no, no, I only have the one.

1:08:25I want a second one, but I only have the one.

1:08:27- It's hard for me to keep track of what you have

1:08:28versus what you are thinking about buying.

1:08:30But anyway, I mean, now that that solved the problem

1:08:33on the Mac side, and in particular, the camera's not great,

1:08:36but at least there's a product in that area.

1:08:38But what I was always looking for and talking about

1:08:40in terms of monitors, because my monitor situation

1:08:42has been solved through the use of excessive money,

1:08:45(laughing)

1:08:48What do I do for my PlayStation monitor?

1:08:50Because I use my PlayStation on a gaming monitor,

1:08:53and I've got an older gaming monitor, which is fine.

1:08:56It's 4K, but it doesn't support HDR.

1:08:59It doesn't support 120 frames per second.

1:09:01And now with the advent of the PlayStation 5,

1:09:03those are features that would be nice to have

1:09:04in a gaming monitor.

1:09:05So I thought when the PlayStation 5 came out, great.

1:09:08I'll just replace my existing 4K monitor

1:09:11with a new 4K monitor that supports 120 frames per second

1:09:14in HDR.

1:09:15And that turned out to be a really difficult thing to find.

1:09:18Talked about it a few times in the show

1:09:20when monitors would be released

1:09:21and we'd see what they're offering.

1:09:23And we talked about it in the context

1:09:26of the Apple Studio display.

1:09:27Like, hey, if I wanted to buy a non-Apple display

1:09:29that has these features, what can I get?

1:09:31Can I get one that's like a 5K version of the XDR?

1:09:34And the answer was not really, or if you could,

1:09:36it was $4,900 instead of 5,000, right?

1:09:41Like they were very expensive.

1:09:42And in the gaming monitors, 4K, 1600 nit, 100% P3,

1:09:47120 hertz gaming monitors basically didn't exist.

1:09:54Or you could find them and they were $3,000, right?

1:09:58And I don't wanna spend, I don't wanna buy a $3,000 monitor

1:10:02for my $400 PlayStation 5 or whatever it is.

1:10:05Like it's a big mismatch and I already spent a lot of money

1:10:07on monitors, so I'm kinda like, well surely monitor tech

1:10:10will advance and we'll be able to find something better.

1:10:12But, you know, years have passed

1:10:14and I watch all these YouTube reviews

1:10:16and there's just not a lot out there

1:10:18that fulfills that criteria.

1:10:22You know, it's just, it almost makes me wish

1:10:24that I could get, well, this probably doesn't get to you,

1:10:27but the MacBook Pro Display, right?

1:10:311600 nits, it does 120 hertz, right?

1:10:35It's got HDR and it's great.

1:10:38that would be a great gaming monitor, but it's 15 inches.

1:10:41Right?

1:10:42And so I don't want a game on a 15 inch monitor,

1:10:44but I look at that tech, I'm like,

1:10:46just put that in a 27 inch 4K screen

1:10:49and I would love to buy it.

1:10:50And no one has done that.

1:10:51Well, for a reasonable price.

1:10:53Again, you can find monitors that do that,

1:10:55but they're very, very expensive.

1:10:57And they're not really made for gaming.

1:10:58They're mostly made for like artists or people who are

1:11:01doing HDR video or whatever.

1:11:02Well, recently Sony, the company that makes the PlayStation 5

1:11:06came out with their own gaming monitor,

1:11:08which is kind of weird,

1:11:10because usually they just leave this to third parties.

1:11:12There's more than enough third-party manufacturers

1:11:15of monitors, there's a whole world of them.

1:11:17But Sony came out with one,

1:11:18and it's styled a little bit like the PlayStation 5,

1:11:21if you look at it, you guys can look at the pictures,

1:11:23we'll put some links in the show notes.

1:11:25It's got a weird kind of front foot, let's call it,

1:11:30that sticks out forward from the monitor.

1:11:34It's like on an angle,

1:11:35And when you move the monitor up and down,

1:11:36it sort of slides up and down this angled foot,

1:11:39kind of like it's going up and down a ski slope, right?

1:11:41So as it gets lower, it also gets closer to you.

1:11:43And as it gets higher, it gets farther away.

1:11:45And then there are two legs that kind of point backwards.

1:11:47It's a very strange looking stand.

1:11:49It looks a little bit like the PlayStation 5,

1:11:51if you know what the PlayStation 5 looks like,

1:11:52especially from the back, if you look at it,

1:11:53it looks a little bit like the PlayStation 5.

1:11:56But it's intended to be a monitor

1:11:57that you use with the PlayStation 5.

1:11:58So here are the specs.

1:12:0027 inch, 4K, it's an IPS LCD.

1:12:02There's people in all the various technologies for LCDs.

1:12:06IPS is not the sort of high-end competitive gaming one.

1:12:11Those, they have monitors that sacrifice image quality

1:12:14for response time.

1:12:16This is not that.

1:12:17IPS does not have the best of the best response time,

1:12:20but it does look better than the more responsive displays.

1:12:23Right, so that's what I always look for.

1:12:24My current LG is an IPS display.

1:12:26VA displays are similar, but like they're not the,

1:12:29you know, the super high-end, I am an esports gamer,

1:12:32I don't care what it looks like.

1:12:33I just want everything to be as fast as possible.

1:12:35- And pretty much every LCD Apple has shipped

1:12:37in recent memory has been IPS.

1:12:38- Yeah, 'cause it looks the best, right?

1:12:40And I'm not a competitive, you know,

1:12:42not a professional gamer.

1:12:43I'd rather have it look good when I'm playing.

1:12:45I want okay response number, I'd rather have it look good.

1:12:47So it's 27 inch, 4K IPS, right?

1:12:48So that's exactly the size of monitor that I want

1:12:51and the kind of screen I want.

1:12:53It has local dimming, which means the backlight

1:12:55is not just one giant light that's on all the time.

1:12:58The backlight has various zones and it turns off zones

1:13:01or turns them down depending on what parts of the image are bright and what parts of

1:13:04the image are dark.

1:13:07As we've discussed in the past, local dimming is not ideal because if you have a star field

1:13:12behind each one of those pinprick stars they have to turn on a very large region of the

1:13:16backlight and so yes the star will be bright but also there will be a little bit of a halo

1:13:20around the star that is also a little bit brighter than it should be because the backlight

1:13:25is broken up into pretty big chunks.

1:13:27So it has 96 zones, which is not that many zones.

1:13:30The Pro Display XDR has 275.

1:13:33Modern monitors and modern TVs can have thousands of zones,

1:13:37or thousands of LEDs anyway.

1:13:39I think we have tens of thousands of LEDs

1:13:41and maybe thousands of zones.

1:13:42Anyway, 96 zones is not a lot, right?

1:13:45In terms of HDR, it has,

1:13:46they use acronyms on monitors,

1:13:48Display HDR 600, which is, I don't know,

1:13:51it's like a marketing term

1:13:52or something that some spec testing can apply with.

1:13:54What it's trying to say kind of is that the brightest things in an HDR scene will be 600

1:14:00nits.

1:14:01As measured by testers, they can actually go up to like 700 nits.

1:14:04And that number might ring a bell because the Apple Studio display goes up to 600 nits

1:14:08as well, although Apple does not call it HDR.

1:14:11It's a little bit brighter than your average monitor like what I'm looking at now in the

1:14:16XDR in regular mode where you're just looking at the user interface, it maxes at 500 nits.

1:14:21It only goes to 1600 when it's showing HDR content.

1:14:25Whereas I think the studio display does something similar where it will still max at 500 for

1:14:30looking at the UI but when you see something with an extended brightness it will go up

1:14:34to 600.

1:14:35But anyway, all this is to say is that this monitor does not hit 1600 nits.

1:14:39It's not super duper bright HDR.

1:14:41But it is a little bit brighter than your average monitor.

1:14:45It's got 144Hz refresh rate and also can do lower refresh as well.

1:14:50It's a variable refresh rate and G-Sync, so you can use it as a PC monitor as well.

1:14:56As a quote unquote one millisecond response time, all of these gaming monitors have a

1:15:00mode where they will overshoot the intended value of the pixel and then back off a little

1:15:03bit to get a better response time.

1:15:06You can, I don't have a good link for this, but if you Google for how LCDs work and how

1:15:10response time works, very often it is faster to go past the color that you want a pixel

1:15:15to B and then back off, then it is go directly from color A

1:15:18to color B on a per pixel basis.

1:15:21They call that overshoot.

1:15:23And various PC monitors will have settings

1:15:26where you can say, how much overshoot do you want?

1:15:28Do you want the maximum response time

1:15:30at the cost of weird artifacts?

1:15:33Briefly, the image looks weird.

1:15:35And then it's hard to see, especially on video,

1:15:38what it's actually doing.

1:15:39But you can choose.

1:15:40You can have it not do any of that

1:15:41and have a slower response time, do a little bit of that

1:15:43and have a little bit faster.

1:15:44but they all want to advertise a one millisecond response

1:15:47time of the pixels.

1:15:48And to get one millisecond, you really

1:15:49have to crank up the overshoot, and it doesn't look great.

1:15:51It has auto HDR tone mapping.

1:15:53This is another problem in the world of television and games.

1:15:57You've got these displays that can display

1:15:59some range of brightness from 0 to 600,

1:16:02or maybe 0 to 1,600 nits.

1:16:04And then you've got content that's mastered for some range

1:16:07of brightness that is different than that.

1:16:09Content can be mastered from 1 to 800 nits, 1 to 1,000, 1

1:16:13to 4,000.

1:16:14there's nothing out there that does 4,000 nits, right?

1:16:16But some content is mastered to be, you know,

1:16:19from zero to 4,000 nits.

1:16:21And so, tone mapping has to map from

1:16:24what the content was mastered for

1:16:25and what the display is capable of.

1:16:27And you can get into these weird situations

1:16:29where the monitor will be doing tone mapping,

1:16:31but so will the PlayStation and the tone mapping,

1:16:33there'll be double tone mapping and it'll be all messy.

1:16:35It's a complicated situation.

1:16:37So this one is a monitor from Sony

1:16:38that plugs into a Sony console

1:16:40and presumably they cooperate with each other

1:16:42so that only one of them does a tone mapping

1:16:43that it does it in a way that doesn't

1:16:45look incredibly terrible.

1:16:47And then finally, the most important part

1:16:49of this entire product is the price.

1:16:51It is $900.

1:16:53And that might sound like a lot,

1:16:55but compared to $3,000, it is pretty good.

1:16:59So I feel kind of like this is the Apple Studio display

1:17:02of the gaming monitors.

1:17:03It was a product where nothing like this existed, right?

1:17:07You could either pay $3,000 and get something

1:17:10that's not really designed to be a gaming monitor,

1:17:12Or you could pay 700 and get a gaming monitor

1:17:15that has none of the specs you wanted, right?

1:17:17Now there's this $900 device

1:17:19that like the Apple Studio Display,

1:17:20doesn't have all the specs of the 3000, $4000 things,

1:17:24but it's much better than the gaming monitors

1:17:28that didn't care anything about the things that I care about.

1:17:32How good does it look?

1:17:32How bright does it get?

1:17:34Does it handle high refresh, right?

1:17:35'Cause I didn't want one of those monitors

1:17:36that sacrifices appearance for speed.

1:17:39And those can be pretty expensive anyway, right?

1:17:41The wildcard in this is the Dell Alienware OLED monitor,

1:17:46but that's a curved monitor.

1:17:47It is not 4K, it is not even 16 by nine.

1:17:50So it is not a good fit for the PlayStation at all.

1:17:53I would love to see a,

1:17:54and that's a QD OLED monitor by the way,

1:17:56I would love to see a QD OLED monitor,

1:17:58just like the Sony one.

1:18:00And that product will, you know,

1:18:03be the real king of the gaming monitor space.

1:18:05But for now, I'm excited by the idea

1:18:07that Sony has put this product right in the middle

1:18:10where none existed before to say we have a pretty good monitor

1:18:13with pretty good specs that will absolutely

1:18:15work with your PlayStation for a reasonable-ish price.

1:18:19It looks way better than the monitors

1:18:22that cost less than it.

1:18:23And it looks almost as good as monitors

1:18:26that cost thousands and thousands more.

1:18:27And the stand is a little weird, but I think

1:18:29you can re-summount it anyway.

1:18:30So the reason I want to talk about this

1:18:32is because I think there are parallels to the Apple Studio

1:18:34display, and I'm excited about it.

1:18:35I'm not going to buy it because I'm

1:18:37buying too many expensive things right now,

1:18:39and my monitor is fine, but I'm glad that,

1:18:43I mean maybe they saw the Apple Studio display

1:18:44and said we should introduce a thing

1:18:46that people wanted forever too,

1:18:47or maybe nobody wants this except for me.

1:18:49But, you know, another thing,

1:18:52they introduced a line of products.

1:18:54There is a cheaper monitor coming

1:18:56that is 1080p, 400 nits, 240 hertz, and only $530,

1:19:01and that's probably the one, and no local dimming at all,

1:19:05that's probably the one that's more like,

1:19:06well if you don't care about resolution

1:19:08and then you just want maximum response time by this thing.

1:19:10But this monitor is very exciting to me

1:19:13and I hope I'll either get something like it

1:19:16for my PlayStation 6 or by then I'll be able

1:19:19to get a QT OLED monitor.

1:19:21And by the way, the other thing for people

1:19:22who are wondering what they can game on,

1:19:24televisions are getting smaller,

1:19:26which is an exciting development.

1:19:28We used to look every year

1:19:29like how much bigger televisions are getting,

1:19:31but after a certain point,

1:19:33it was hard to make television smaller, especially at 4K.

1:19:37Nobody wants a small TV.

1:19:38It's hard to sell a small television.

1:19:40It used to be like 42 inch plasma.

1:19:42It was like, wow, you have a giant TV.

1:19:44Try finding a 42 inch TV now.

1:19:47But coincidentally this year, one of the big stories is,

1:19:50I think it's just LG,

1:19:52one of the OLED television manufacturers

1:19:55produced a 42 inch television

1:19:56and people were so excited because that's so small.

1:19:59It's kind of like the iPhone mini, right?

1:20:00Then they don't want to put it in their pocket.

1:20:02But the smallest television used to be able to get

1:20:05like with good picture quality was like 55 inch

1:20:07and then LG came out with a 48 inch

1:20:10and people were using 48 inch OLED televisions

1:20:13as their quote unquote gaming monitor

1:20:14or sometimes as their PC monitor.

1:20:16They'd put it on the desk in front of them

1:20:18and they'd set the, it's a 4K television, right?

1:20:21And they'd be using their PC attached

1:20:23to a giant television, which sounds kind of ridiculous

1:20:26but OLEDs are actually pretty good

1:20:27and if you put the monitor far enough away

1:20:29so you can't see the pixels, it's actually pretty nice.

1:20:31And now they made a 42 inch one

1:20:33And that television is essentially designed for people

1:20:36who want to use it as a gaming monitor on their desk.

1:20:39Still too big for me, not something that I would want to do,

1:20:41but the image quality on a 42 inch LG OLED television,

1:20:44it's so much better than any of these gaming monitors.

1:20:47And the prices are reasonable-ish.

1:20:50It's like, I don't know, it's under $2,000, right?

1:20:53But it's, you know, it's 42 inches

1:20:55and every pixel is lit up individually.

1:20:57And it does HDR like, you know,

1:20:59up to a peak of like 800, 900 nits or something like that.

1:21:02has pretty amazing response time,

1:21:04it supports all the things.

1:21:05So, you know, if that interests you,

1:21:08be aware that that is a thing that's happening.

1:21:10People are using televisions as gaming monitors,

1:21:12and I don't even know what to call it anymore.

1:21:14Is it a gaming monitor, is it a TV?

1:21:15It's technically a TV,

1:21:16but that's not what it's designed for.

1:21:17It even has feet, so they're big enough

1:21:19so that you can put your mouse and keyboard underneath it

1:21:21when it's on your desk.

1:21:22So yeah, if you're in the market for something to use

1:21:26with your Xbox or PlayStation,

1:21:28and you didn't know if there's anything decent to buy,

1:21:30check out the Sony thing.

1:21:31They also came out with some gaming headsets as well.

1:21:34They're basically just like gamified versions

1:21:37of their noise canceling headphones

1:21:38that we're all talking about for using on plane flights

1:21:40back when we used to fly.

1:21:41Only they look like PlayStations.

1:21:42They have a bunch of gaming specific features

1:21:43and those look pretty neat too.

1:21:46- Cool.

1:21:47- You can get two of these

1:21:47and do all your computing on them, Casey.

1:21:49- No.

1:21:50- I mean, it is kind of like the Apple Studio Display.

1:21:52It's got very similar specs.

1:21:54It's better than the Apple Studio Display

1:21:55'cause it does high refresh and has local dimming

1:21:57and your studio display doesn't have any of those things.

1:21:59- Yes, that's true.

1:22:02- And it cost $1600.

1:22:03- Also true.

1:22:05- But it's 5K, as we know.

1:22:07- Yes, exactly.

1:22:08- Yep, that's kind of a big deal.

1:22:10- That's kind of a big deal.

1:22:11- I know, I know, I'm just saying,

1:22:12like the Apple Studio is why this does fill this row,

1:22:14but we talked a lot about this.

1:22:15What is Apple gonna do?

1:22:16Is surely, if they want a monitor,

1:22:17it has to at least match the specs of the MacBook Pros,

1:22:19and Apple said, "Nope, doesn't."

1:22:22- Well, we're good.

1:22:22- And it didn't.

1:22:23- We are sponsored this week by Linode,

1:22:26my favorite place to run servers.

1:22:28Visit linode.com/atp, see why Linode is so beloved

1:22:33by so many developers and users like me.

1:22:35So I run a lot of servers, between ATP

1:22:39and my personal website and Overcast,

1:22:41and there's just, there's so, I run so many servers,

1:22:44I think I run something like 30 instances,

1:22:46and I've used a lot of hosts in my time,

1:22:49and I've been with Linode the longest,

1:22:50I moved all my stuff there over time,

1:22:52because it's just the best, I've been with so many hosts

1:22:55that were like, fine, but none of them were really great

1:22:57for this long and Leno just is so they have incredible services to offer.

1:23:02They have all these compute instances, basic ones,

1:23:05specialized things like GPU compute or high memory.

1:23:08They have all these advanced other services like block storage, Kubernetes,

1:23:13their upcoming bare metal release.

1:23:14And they recently launched managed databases for MySQL,

1:23:18Postgres and Mongo. And they're even doing redis later this year.

1:23:22These are simple, reliable, managed databases,

1:23:26high performance database clusters,

1:23:27they take care of a whole bunch of stuff for you.

1:23:29So it's just an amazing product.

1:23:30And all this is backed at Linode by amazing support

1:23:33if you need it.

1:23:34So with other hosts, sometimes you file a ticket,

1:23:37maybe they get to it eventually,

1:23:39and then the person gets to it,

1:23:40and is like, oh, I don't know how to fix this,

1:23:41let me escalate it.

1:23:42That doesn't happen with Linode.

1:23:43They respond quickly, and the person who responds

1:23:46can help you.

1:23:47There's no weird tears to go through or anything like that.

1:23:49And all this is brought to you at an incredible value.

1:23:52This is why I've been with them for so long.

1:23:54Not only is all this stuff great,

1:23:56they're also really cheap.

1:23:57Like for what you get, it's a great value.

1:23:59So see for yourself, see what you can get at Linode.

1:24:02It's a great host to run servers.

1:24:04Visit linode.com/atp, create a free account,

1:24:07and you get $100 in credit.

1:24:09Once again, linode.com/atp, new accounts, get $100 in credit.

1:24:14Thank you so much to Linode for hosting all my servers

1:24:17and for sponsoring our show.

1:24:23All right, let's do some Ask ATP,

1:24:24and Radu Pirovska writes, "My iMac randomly wakes from sleep.

1:24:28"The only thing plugged in is the ethernet cable.

1:24:30"I'm using the Apple keyboard and Apple mouse,

1:24:32"which I started turning off

1:24:33"when I put the computer to sleep.

1:24:35"All Energy Saver options are set to solve this.

1:24:37"Problem still appears.

1:24:38"Help!"

1:24:40So what does Radu do?

1:24:41- Hmm, so John's gonna have the right answer,

1:24:44but my random guess at the answer is

1:24:48either wake on LAN, some kind of network thing,

1:24:52Or it could be like, Apple has various things,

1:24:56like used to be called Power Nap,

1:24:57I don't know what the current version of all this stuff is.

1:25:00Things where the system will wake itself up

1:25:02to do certain tasks or check updates for things.

1:25:05And maybe that's waking up for that reason

1:25:08and something is going wrong in that process

1:25:10where it then wakes the whole computer up for some reason.

1:25:13My third guess is USB devices.

1:25:17Anything plugged into USB seems to be able

1:25:20to do weird things to computers when it doesn't work right.

1:25:23And maybe this is one of those weird things that can do it.

1:25:25- Oh, but supposedly only Ethernet is plugged in.

1:25:28- Oh yeah, the only thing plugged in, eh, hmm.

1:25:30- Oh wait, what about Wake on LAN?

1:25:31Wake on LAN is the same. - Yeah, that's what

1:25:32I was just saying, yeah, some kind of like,

1:25:33yeah, it could be Wake on, I mean,

1:25:35I don't know how Wake on LAN ever worked.

1:25:37I don't know what that is. - It still works.

1:25:39- Does it? - I know it works

1:25:39'cause I have it turned off on the machines

1:25:40I don't want it to work on.

1:25:41It's real important that it be turned off.

1:25:43- All right, so John, as the only one of us

1:25:44I think that actually uses sleep on a regular basis

1:25:46on the computer.

1:25:47What is this?

1:25:49- Are you shutting down?

1:25:50What are you not using sleep for?

1:25:51- Well, I'm like, I throw the mouse in the corner,

1:25:53which is my hot corner to turn the display off,

1:25:55and then I walk away.

1:25:55- Yep, yeah, all right.

1:25:57Anyway, I do sleep my computer.

1:25:59I have experience, not with this particular computer,

1:26:01but in my many years, I have lots of experience

1:26:03battling sleep/wake things.

1:26:05Marco covered most of the bases.

1:26:06Like, the procedure you go through is like,

1:26:08oh, just removing all the peripherals

1:26:09to eliminate sources of, you know,

1:26:11what could possibly be causing it,

1:26:13and you end up in the Mac OS 10 days,

1:26:14you end up looking in the console log,

1:26:17'cause every time your Mac wakes,

1:26:18it will have a wake reason and it will list it

1:26:20and you try to correlate that.

1:26:21And it's just this debugging process I've done many times.

1:26:24I remember doing it like my Power Mac G5,

1:26:26which has lots of weird issues with this.

1:26:28And I would eventually find what it is.

1:26:29Oh, it's this USB hub.

1:26:31Oh, it's this one app doing this thing.

1:26:32You know, there's this thing where you can use

1:26:34in the command line to see what's taking power assertions

1:26:35to stop it from sleeping, what's waking it up.

1:26:38Luckily, you don't have to go through all that stuff

1:26:41that I just described because there is a cool new app

1:26:43called Sleep Aid.

1:26:44that is entirely, I mean, believe it,

1:26:46this is kind of a condemnation of Mac,

1:26:48of Apple's operating system,

1:26:49but the entire purpose of this app

1:26:51is to figure out what the hell is going on

1:26:53with your Mac in sleep.

1:26:54So you leave this app running all the time

1:26:56and it does what I was just describing

1:26:59and puts a GUI on it.

1:27:00It's always watching the console.

1:27:01It's always checking what has power assertions.

1:27:03It does amazing amount of stuff.

1:27:06I don't know if it will solve your sleep problem,

1:27:08but I can tell you when I saw this app, I'm like,

1:27:10they made an app to do that stuff I was doing

1:27:12and it looks great.

1:27:14If I had a sleep problem, this is the first thing I would try.

1:27:16Because trying to describe to someone how they can try

1:27:20to debug this themselves, it's impossible.

1:27:21But you can just say, try this app.

1:27:24Maybe it will help.

1:27:24The app itself is also complicated.

1:27:26Don't think this is a simple app.

1:27:28It is also very complicated.

1:27:29And you have to-- looking at this app

1:27:31and figuring out what it's trying to tell you

1:27:33and what action you can take may be difficult.

1:27:36But it's better than the alternative.

1:27:37So that's my suggestion.

1:27:39Check out Sleep Aid.

1:27:40And if that doesn't work, disconnect everything

1:27:41from your computer forever.

1:27:42if that doesn't work, get a new computer.

1:27:44(laughing)

1:27:46- I've noticed that on my otherwise

1:27:48almost flawless MacBook Pro, it will,

1:27:51every two or three days, it'll just decide

1:27:53to reboot itself for reasons.

1:27:55And I haven't spent the time to debug this yet,

1:27:58but I remember seeing in the little dialogue that pops up,

1:28:00you know, it's Marco's favorite,

1:28:01your computer was shut down because of a problem.

1:28:04But anyways, in the dialogue--

1:28:05- No, my favorite is the one that says,

1:28:07you shut down your computer--

1:28:09- Oh, that's right, that's right.

1:28:10- Because it was like, I sure didn't!

1:28:11- Right, right.

1:28:13So anyway, so I've seen like a watchdog timeout

1:28:15of like 120 seconds for something.

1:28:17I can't remember what it is off some of it.

1:28:19- That's the one you see all the time.

1:28:20- Yeah, so I really would love to know why this is happening

1:28:23and every time I submit the report and every time I write,

1:28:26what is your comment for this report?

1:28:28- I was asleep when this happened.

1:28:29- The computer was sitting idle

1:28:31or sometimes the computer was in the midst of shutting down

1:28:34and or rebooting, which is also a time when I get this

1:28:37on next boot, which is super fun.

1:28:40But anyway, I need to try to figure out what that is.

1:28:42So if you've had a similar problem

1:28:43and you have a fix you want to let me know about,

1:28:45please let me know.

1:28:46- Someone in the chat room is saying,

1:28:47how just sleeping in your computer

1:28:48is a recipe for disaster.

1:28:50Let me tell you, I've been using computers this way

1:28:52ever since the dawn of sleep.

1:28:53I do not shut down my computer.

1:28:55When I'm done using it for the day,

1:28:57I put it to sleep, and then when I use it again

1:28:59in the morning, I wake it up.

1:29:00Sleep and wake are great.

1:29:01I have some other computers that never sleep

1:29:03because they're like servers, they're running Plex,

1:29:05they're doing all sorts of other stuff, right?

1:29:06But my main computer, I always put to sleep.

1:29:09That should not be a problem, and in general, it is not.

1:29:12Occasionally it has been.

1:29:13Again, my Power Mac G5 back in the day

1:29:14had real sleep problems, and I think laptops in particular

1:29:17have all sorts of sleep problems.

1:29:18But for desktop computers,

1:29:21the only time I should ever have a problem with this,

1:29:23or the only thing that should kill my uptime

1:29:24is software updates.

1:29:26When I have to update the operating system,

1:29:27that's when I reboot.

1:29:28And in practice, that's pretty much how it works.

1:29:30Like, I only restart, if I'm restarting into Windows

1:29:34to play a Windows game or something,

1:29:36or if there's a software update.

1:29:38There's nothing inherent in computers that says,

1:29:41oh, you have to shut down everyone's

1:29:42so I'll clean everything out.

1:29:43If the operating system is working,

1:29:44and yes, maybe if you have 96 gigs of RAM like I do,

1:29:47everything should be fine.

1:29:48And in practice, it is.

1:29:50So again, I don't vouch for laptops,

1:29:53but I don't think it's a good decision to think that

1:29:58that's never gonna work so I shouldn't try it.

1:29:59It should work, and it does work the majority of the time.

1:30:03Maybe it's 51%.

1:30:04I don't know what the worldwide percentage is,

1:30:06but as far as I'm concerned,

1:30:07I will battle my computer until that is the case,

1:30:10if I have to.

1:30:11That's why I have all the experience

1:30:12fighting weird sleep things, right?

1:30:13If I'm waking up and stuff like that.

1:30:15In fact, like I said, not only do I sleep my thing

1:30:17every night, I have stuff scheduled to wake it up

1:30:20in the middle of the night to do local time machine backups

1:30:22and super duper clones, and then it goes back to sleep.

1:30:25So when I come in the morning, my computer is asleep,

1:30:27but it did stuff usefully during the night,

1:30:29and yes, that's a feature that the Mac has

1:30:31where you can schedule--

1:30:32- Got up, went to the bathroom.

1:30:33(laughing)

1:30:34- You can schedule wake times.

1:30:35You can tell, you wake up at this time

1:30:37and then go back to sleep at this time.

1:30:38And of course, when it wakes up,

1:30:40I have these little programs that run,

1:30:42they're just Perl scripts that do a bunch of stuff.

1:30:44From those scripts, you can then tell it

1:30:45to go back to sleep when it's done.

1:30:47Like, that's what my computer does all the time,

1:30:50and it's fine, like it does not cause any problems.

1:30:53It shouldn't cause problems.

1:30:54If you have a weird laptop and it does,

1:30:55I'm sorry, you have a desktop.

1:30:57(laughing)

1:30:58- I have so many problems with my 13 inch now.

1:31:01Well, 14, excuse me, now it's 14.

1:31:03Oh my God.

1:31:05I have to reboot it every few days for some weird thing.

1:31:09Usually it's like, that is my FaceTime laptop

1:31:14when we do our workouts.

1:31:16Most of the time, if I haven't rebooted it in a few days,

1:31:19it just won't ring for the FaceTime call.

1:31:22The FaceTime call will not come into it for some reason.

1:31:25And I'll have to reboot it for it to receive

1:31:28FaceTime calls reliably.

1:31:29So that's part of my routine now is like,

1:31:31every Monday, Wednesday, and Friday,

1:31:33right before the workout, I reboot my laptop

1:31:35because otherwise it's not reliable.

1:31:38That's the same one that a few weeks ago

1:31:41it started occasionally not accepting power

1:31:44or charging input sometimes until I power it off

1:31:48and power it back on again.

1:31:50So it's having a fun time.

1:31:53Spoiler alert, I ordered a MacBook Air

1:31:55in part because I want to send that laptop in for service

1:31:59and I wanna have something I can use

1:32:01as a spare in the meantime because right now

1:32:02I basically have no spares.

1:32:04I need a spare for both reasons like that,

1:32:07and also I want something I can run the beta on.

1:32:09And as a podcaster, not only am I obligated

1:32:12to buy everything Apple releases,

1:32:14so I can quote talk about it,

1:32:15but also as a podcaster, I'm required not to use

1:32:18a beta version of Mac OS on any computer

1:32:21I ever need to use to record podcasts.

1:32:23And so, I need a spare.

1:32:26- I've got Ventura, but it's on an external disk,

1:32:28and that's the other reason I reboot.

1:32:30I looked at all my uptime notes, and I realized,

1:32:31Oh, I was rebooting a venture to look at stuff before last week's show.

1:32:35Some guy writes, "What do you guys do when someone changes a phone number?

1:32:38I used to delete them, but if I ever search my past conversation, those messages show

1:32:42up as a phone number without a name.

1:32:44I guess this makes sense, since I deleted the number from my friend's contact, it's

1:32:47no longer associated with their name.

1:32:49Since then I used to keep two versions of a contact, one marked deprecated so I wouldn't

1:32:52lose our old conversations.

1:32:53However, iOS is so suggestive about merging contacts now that I can't do this anymore.

1:32:57I've tried labeling phone numbers as old phone, but iOS sometimes sends the message to the

1:33:01the old phone.

1:33:02For months I thought my mom didn't reply to my text messages.

1:33:05Turns out I was messaging her old phone.

1:33:07Is there a way to fix this without losing all the old messages I have with my mom?

1:33:10I gotta be honest with you, I've never had this problem when somebody changes a phone

1:33:13number which almost never happens anymore.

1:33:15I change their phone number in the contact and I have never run into an issue.

1:33:19Am I missing something?

1:33:20I run into this all the time, not just with phone numbers.

1:33:23It's a practice, I feel the same way.

1:33:25So I have, even for myself, just forget about contacts, just for myself, the "me" contact

1:33:29as they call it.

1:33:31everyone has screwed up on their phone by the way.

1:33:32We look at someone's phone and realize their me contact is nonsense and they have a separate

1:33:35contact for themselves.

1:33:36Anyway, I've had many email addresses over my life and I feel like the way contacts should

1:33:44work is I should be able to put every email address I've ever had in contacts so that

1:33:49when I'm looking at mail or something like that, if there's some email from decades ago,

1:33:54it knows that it was me because it says, "Oh, this email address at this company you used

1:33:57to work for dot com.

1:33:58Yeah, that's you.

1:33:59remember it's you because that address is in your contacts.

1:34:02But I would like to be able to tell contacts is,

1:34:04"Hey, these are the addresses that I'm using now

1:34:07"in priority order, and then these are my old addresses."

1:34:11That doesn't seem like rocket science,

1:34:13but contacts on Apple's platforms has no idea about that.

1:34:16You can set them to home or work or old phone or other,

1:34:18but like, I have no idea.

1:34:21For instance, when I type in A-L-E,

1:34:23I try to autocomplete Alex to message him,

1:34:26it always offers me his phone number.

1:34:28And yeah, you can tap through it and pick like his iCloud

1:34:31email address so I can do message or whatever.

1:34:33But it just makes me do that every time.

1:34:35Other people, it suggests their email address.

1:34:37Very often when people are messaging me

1:34:39and in their contacts they have five of my email addresses

1:34:42plus my phone number, what does this suggest to them?

1:34:44Does it suggest my phone number?

1:34:45Does it suggest one of my email addresses?

1:34:46If so, which email address?

1:34:47I have no idea how contacts is choosing

1:34:49between these things.

1:34:50Please, Apple, in your contacts,

1:34:53A, let us mark addresses as like old historical reasons

1:34:56just so it can continue to associate them

1:34:58with our name correctly.

1:34:59And B, let us prioritize the order.

1:35:02Primary email, secondary email.

1:35:03I know you can label the home at work,

1:35:05but that apparently means nothing

1:35:06because I have no idea how it picks.

1:35:07Why does it pick a phone number for my son

1:35:09but the email address for my daughter?

1:35:10They both have phone numbers and email addresses.

1:35:12How is it picking?

1:35:13If I keep repeatedly manually picking email address,

1:35:15will it eventually learn?

1:35:16I doubt it.

1:35:18Very frustrating.

1:35:19I feel this pain.

1:35:20To answer the question, no, I don't delete them.

1:35:21I leave them in there because it annoys me

1:35:23if I go through some old email

1:35:25and it doesn't have my name associated with it anymore.

1:35:27It should know that I used to work at oldcompany.com forever.

1:35:31And I don't understand why I should have to lie to it

1:35:33and delete that and have it not know

1:35:35that those email addresses belong to me anymore.

1:35:37- Carl Rosas writes, "With all the talk

1:35:39"about Twitter recently," and I should add

1:35:41that this was sent in a couple of months back,

1:35:43"I'm just curious, what would it take for you

1:35:44"to stop reading Twitter regularly?

1:35:46"What would it take for you to stop posting

1:35:47"to Twitter regularly?

1:35:48"What alternatives would you consider?"

1:35:50Oh, I am addicted to that hell site,

1:35:53There's nothing you can take over my cold dead hands.

1:35:55Now, I honestly don't know.

1:35:57I really don't.

1:35:58Like, it's a reasonable question

1:35:59to which I don't have a good answer.

1:36:00I'm sure some way, somehow,

1:36:02there could be something that breaks

1:36:04that causes me to stop using it.

1:36:06But honestly, as awful as Twitter can be,

1:36:10it's also kind of amazing.

1:36:12This sounds like SwiftUI.

1:36:13So SwiftUI is like Twitter.

1:36:14That's the takeaway from today's episode, everyone.

1:36:17- SwiftUI is way better than Twitter.

1:36:19(laughing)

1:36:20- But I don't know.

1:36:21I feel like I post considerably less often than I used to, which is probably healthy

1:36:27and good.

1:36:29But I don't know, I still interact with friends on Twitter.

1:36:32I still get almost all my news from Twitter, which is, again, probably not healthy.

1:36:38I don't know.

1:36:39There's nothing that I've found that has effectively replaced it.

1:36:44And I think there are alternatives I could and would turn to, like micro.blog.

1:36:50But I don't know, I can't wean myself off of it

1:36:54no matter how hard I try.

1:36:56- I'll start with the end of the question

1:36:57and work backwards.

1:36:58What alternatives would you consider?

1:37:01This is kind of the key for me,

1:37:02because we've seen alternatives to Twitter pop up

1:37:06here and there over the years.

1:37:07Most notably, I think, was App.net,

1:37:09and now there's Mastodon and stuff like that.

1:37:12You mentioned Microblog.

1:37:13I think it's not quite an alternative.

1:37:14It's kind of a different thing,

1:37:15but it's in the ballpark, I think.

1:37:17But ultimately, the ones that are more direct replacements,

1:37:20Mastodon and formerly App.net.

1:37:22The reason why App.net didn't work

1:37:26and why I think Mastodon is always gonna be

1:37:28kind of a specialty thing and not really ever

1:37:31a mass market thing or a replacement for Twitter

1:37:33in almost any way for almost anybody

1:37:35is that the network effect is very strong

1:37:37with this kind of thing and you don't really want

1:37:40to leave social network for a much, much, much smaller one

1:37:45for most reasons.

1:37:47Now sometimes you do want that.

1:37:48Sometimes you want like a small group kind of thing,

1:37:50but usually when you want something to be smaller,

1:37:54usually you want it to be private.

1:37:56And so when you think about alternatives to Twitter,

1:38:00for me, I have greatly reduced my Twitter usage

1:38:03in recent years, in part because it's a hellscape,

1:38:07and I'll get to that in a second,

1:38:08but also in part because I've been spending

1:38:11so much more time in private Slack and iMessage groups,

1:38:15And I've been putting more stuff in other social networks

1:38:18like Instagram that are kind of more,

1:38:20like more what I'm going for at that moment.

1:38:24I don't post on TikTok.

1:38:26I do occasionally watch TikTok,

1:38:28but I don't participate in it as a social network

1:38:31in terms of producing.

1:38:32So I'm only producing stuff on Twitter and Instagram.

1:38:37And I've never used Snapchat.

1:38:39I don't think they would let me in.

1:38:40I think I'm too old.

1:38:41And even if they did, I wouldn't know how to use it.

1:38:43I barely understand how to use Instagram at this point.

1:38:47Anyway, so I think what Twitter,

1:38:52where the role Twitter has that I think would be hard

1:38:56for me to replace it is in promoting stuff I do

1:39:01and getting good questions answered from,

1:39:06if I have a question like,

1:39:07hey, why doesn't this thing work in SwiftUI?

1:39:09I know I can post it on Twitter

1:39:10and I can probably get an answer to that.

1:39:13Or when something is happening right now

1:39:15and I wanna know about it,

1:39:16that's a place I know that I can go

1:39:18and get updates constantly flooding in.

1:39:20Now that being said,

1:39:21in my time at Tumblr,

1:39:24I would occasionally hear people complain like,

1:39:27"Oh, Tumblr's really mad today."

1:39:29And what that meant was the people I follow on Tumblr

1:39:34are posting really mad things right now.

1:39:36But that's a very different thing than the entire service.

1:39:40The people you choose to follow

1:39:42and, correspondingly, what you choose to post.

1:39:45You know, people often complain that they're in traffic.

1:39:49They don't usually complain that they are traffic.

1:39:52You know, when you say like,

1:39:53Twitter's only mad right now,

1:39:54well if you're posting, getting all mad,

1:39:55or retweeting everyone else's mad stuff,

1:39:57you're also part of that.

1:39:58Anyway, so backing that up a second,

1:40:00Twitter, when we say like, you know,

1:40:02Twitter is negative or upset or dangerous or whatever,

1:40:06usually what we're talking about is

1:40:08what we've chosen to follow on Twitter.

1:40:11And that's mostly within our control.

1:40:14Now, Twitter's a little bit different in the sense that

1:40:16stuff that you post very easily spreads to other people

1:40:20who maybe you didn't want necessarily for it to spread to,

1:40:24and you can get like piled on from someone else's audience

1:40:27if they retweet your thing,

1:40:28and they have a terrible audience.

1:40:30That happens a lot, especially around things like

1:40:34electronic currency and electronic car makers.

1:40:37In general, Twitter is for the most part

1:40:40what you choose to follow.

1:40:42It's what you're choosing to look at.

1:40:44And you can say like, oh, I have to keep up with the news,

1:40:48like all this stuff going on with politics

1:40:51and world events, it's like, I have to watch this stuff.

1:40:53Well, you actually don't.

1:40:55It is fully within your control.

1:40:56Like if you are being brought down and burnt out

1:41:00and made angry all the time by the political stuff

1:41:04you're seeing on Twitter, you can just unfollow those people.

1:41:08If for political reasons maybe you can't unfollow them,

1:41:11mute them.

1:41:11You can mute them forever.

1:41:12You can mute them for a month and revisit them.

1:41:15If you use certain clients with more advanced options,

1:41:18like especially Twitterific is really good for this.

1:41:20Twitterific has the Muffle feature and the Mute feature.

1:41:23Tweetbot has a bunch of advanced muting features as well.

1:41:27So you can actually mute or muffle topics or keywords

1:41:30or regular expressions.

1:41:32And so you can customize this experience

1:41:34to not see the things you really don't wanna see,

1:41:39or to minimize them,

1:41:40or to get rid of the most egregious offenders.

1:41:43Most of the problem people have with Twitter

1:41:47is more a problem in the reading sense.

1:41:50The writing sense is a little bit different,

1:41:51but in the reading sense,

1:41:52when you have a problem reading Twitter,

1:41:54that's usually because the people who you're following,

1:41:58it's not making you feel good to read their stuff,

1:42:00or it's a burden on your mind,

1:42:03or it's too invasive in your life.

1:42:06And you can just unfollow those people

1:42:07or mute them or go a different direction.

1:42:09You don't have to worry about making people feel bad.

1:42:11They're not watching, they don't care.

1:42:12If you wanna follow somebody who knows you,

1:42:15chances are they'll never know.

1:42:16Unless they use one of those really sad services

1:42:19that alerts them when people unfollow them,

1:42:20in which case you don't need that person in your life.

1:42:23(laughs)

1:42:24And again, you can also just mute somebody forever

1:42:27if you really quote can't unfollow them.

1:42:30But make it what you wanna see.

1:42:32So if you're seeing too much negativity,

1:42:34which that's where I am,

1:42:36I wanna follow almost no world news right now.

1:42:40And so I just don't, and it's fine.

1:42:43I'm not a Twitter completionist,

1:42:44and I don't read most of my timeline.

1:42:47So normally, like when I, I'll read all my mentions,

1:42:50and then on my main timeline, I'll just scroll to the top

1:42:53and read some stuff here and there.

1:42:54I'm not seeing most of it.

1:42:56That's it, it's fine.

1:42:57Now on the writing side, again, on the writing side,

1:42:59it's very easy to step on a landmine

1:43:02without even realizing it on Twitter

1:43:03and have the whole world explode at you.

1:43:07And so if you are concerned about that,

1:43:11and you probably should be if anybody sees your tweets,

1:43:13if you have any followers at all

1:43:15or if somebody might retweet them who does have followers,

1:43:18if you're concerned about having the world explode at you,

1:43:22don't write anything of substance.

1:43:24Don't write anything on there that is supposed to be a joke,

1:43:29Maybe it's a little subtle.

1:43:30Don't write anything on it that's controversial.

1:43:32Don't write about current controversial events or news.

1:43:36All the negativity there is very easy to avoid.

1:43:40Just don't post.

1:43:41And if you insist on posting,

1:43:43then keep to tech stuff, technical questions.

1:43:48Hey, what's with Swift UI these days?

1:43:50That kind of stuff.

1:43:52Don't engage in the really violent politics

1:43:56and stuff like that.

1:43:59the world provides an infinite supply of awful news

1:44:01and awful people doing awful things.

1:44:03You don't have to feed into it,

1:44:04you don't have to read it all.

1:44:06You're not doing any civic justice

1:44:09or doing your civic duty by reading every single bit

1:44:13of bad commentary about every bad thing

1:44:14that happens in the world.

1:44:16You don't need to do that, that's not your job.

1:44:18And if it's better for your mental health

1:44:20to not be part of that, just don't be part of that.

1:44:24It's easier said than done sometimes.

1:44:27So what it would take for me to leave Twitter

1:44:31would be if that stopped being possible.

1:44:34That if it stopped being possible for me

1:44:36to get only what I wanted out of it and not more.

1:44:41Now I have already left Twitter partially,

1:44:44as I mentioned earlier, in the sense that like,

1:44:46if I have some funny joke to say,

1:44:48or well, if I have something I think might be funny to say,

1:44:51I tend to say that kind of stuff privately these days.

1:44:53Because this is not a good time for humor.

1:44:56Everyone's very sensitive about everything

1:44:57and I don't wanna accidentally step on a landmine

1:44:59and have my entire world explode.

1:45:00So stuff like fun jokes between friends,

1:45:03you know what, Twitter's no longer a fun place,

1:45:05so I'll just say that in private channels.

1:45:09Or stuff that's a little bit more personal,

1:45:13about hey, here's what my family's doing these days,

1:45:16that'll probably go on Instagram,

1:45:17because I have a more kind of family

1:45:19and real life audience over there,

1:45:22so that's probably what would go there.

1:45:24but I'm still using Twitter,

1:45:27I'm just using it more for work stuff.

1:45:30And that's fine.

1:45:31And when you're using it for work stuff,

1:45:34it's fairly boring in a good way.

1:45:38So as long as it's still possible for me

1:45:41to use it for work stuff,

1:45:42and it is still beneficial for my work to do that,

1:45:46I'm gonna keep using it.

1:45:47- What would it take for me to stop reading?

1:45:50I mean, it's simple.

1:45:51It would have to be not delivering value for me,

1:45:53which is a business-y phrase or whatever,

1:45:55it was just like what Margo said,

1:45:56like there are things I get from Twitter

1:45:58and if I could no longer get them

1:46:00or didn't get them from Twitter, I would stop.

1:46:03It's, you know, I'm doing what most people do.

1:46:05It's not like a very complicated decision.

1:46:06It's like, is this a thing where, do I find this valuable?

1:46:10And yes, I find Twitter tremendously valuable.

1:46:12Now, Margo was saying is like,

1:46:14then the reason Rui complains about Twitter

1:46:16is all that advice you gave about like,

1:46:18you know, being careful what you say

1:46:21and avoid saying certain things or whatever,

1:46:23to the extent that you have to do that

1:46:25and to the extent that the possible blowback

1:46:28from being too loose is disproportionate,

1:46:32that's why people think Twitter is a bad place to be

1:46:34because you don't want it to feel like a hostile environment

1:46:36where you have to be very careful

1:46:39that someone doesn't retweet your thing

1:46:41into some section of the internet

1:46:43that would otherwise not know you exist

1:46:45but suddenly decides to dog pile you, right?

1:46:48And Twitter, the company, has been trying to fight against that for a while with varying

1:46:54degrees of success.

1:46:56But that, you know, so that I'm going to say I'm not saying that just because I find Twitter

1:47:00valuable doesn't have problems.

1:47:01It absolutely has problems, right?

1:47:02And the design of the network has at various times exacerbated or helped with those problems

1:47:06and leadership can really help solve them.

1:47:09But I do feel like having been on Twitter for so long now, I have built up a lot of

1:47:15value there in terms of the people who I follow and who follow me.

1:47:19That didn't happen just overnight, right?

1:47:21It took whatever it is, a decade and a half or however long I've been on Twitter, to get

1:47:26that balance right.

1:47:28And the people who follow me are a big part of that value.

1:47:32Whatever I've done to make them follow me, they do see my tweets and sometimes they respond,

1:47:36and that is very valuable to me, and that's not something you can kind of get overnight.

1:47:39So I would never want to give that up unless Twitter became really invaluable to me.

1:47:42But I do want to acknowledge that that's not easy.

1:47:45It's not easy to get to that point.

1:47:47And it kind of sucks that you have to be so aware of the slightly hostile environment.

1:47:52In some ways, Twitter is also a reflection of the current of the world, right?

1:47:56And if the world is in a crappy situation, then so is Twitter.

1:47:58And that kind of makes sense, right?

1:47:59And that's part of the beauty of Twitter is that it is actually a bit of a less filtered

1:48:06mirror of what people are thinking.

1:48:09or let's put it this way, voices that you otherwise

1:48:11would never have heard before,

1:48:13whether they be directly talking to a celebrity

1:48:16or talking to some person in a marginalized group

1:48:19you would never encounter and would have no idea

1:48:21what their respective is, Twitter allows you

1:48:23to make those kinds of connections.

1:48:25But of course, Twitter can also be exploited by bad actors

1:48:27to magnify their bad effects as well.

1:48:29So it's the blessing and the curse of Twitter.

1:48:31Overall, in my life, Twitter is a huge net positive,

1:48:35but I feel like across the entire world,

1:48:40the jury's still out, it's definitely closer to 50/50

1:48:43about the harm caused by Twitter and the value.

1:48:45I still lean more towards the value

1:48:47because I feel like being able,

1:48:49giving a voice to people who didn't have one

1:48:51is probably more than offsets the giving bad actors

1:48:56yet another tool for them to be bad.

1:49:00Because bad actors will always find a way to be bad.

1:49:01They'll invent their own outlet if they have to,

1:49:04Fox News. So Twitter is not entirely to blame for that. But I do enjoy the things I get out

1:49:09of Twitter that I did not get before Twitter. Did I get anywhere really, and still find value in

1:49:16that. And what alternatives would I consider? Like Margot said, it's like, you know, it's network

1:49:20effect, like this network I've built up on Twitter, I would have to rebuild that elsewhere. And that

1:49:25is even assuming everybody, quote unquote, everybody would agree to go to that elsewhere.

1:49:29The alternatives that most people have both considered and used are very tiny subsets of

1:49:35Twitter like a private Slack or a Discord or you know a big iMessage group or whatever.

1:49:40Those are not replacements for Twitter. Those are alternatives to Twitter but it's easy to get them

1:49:45up and running because you just need a handful of people in them. But there's you know to get

1:49:49something like Twitter you'd have to you know somehow get all those people to move over to

1:49:54the other thing or make Twitter go away or Twitter makes itself so bad that everybody leaves and goes

1:49:58somewhere else, but we're not there yet.

1:50:01- And we're not talking about that guy who, you know,

1:50:04we're not talking about that because--

1:50:05- We'll talk about that if it ever comes to some kind

1:50:07of conclusion, probably in a humorous after show.

1:50:10- Just F that guy, and I hope he loses big.

1:50:12I hope he has to pay them a billion dollars.

1:50:14He deserves it.

1:50:15Anyway, thank you to our sponsors this week.

1:50:17Linode, Hover, and the Stack Overflow podcast.

1:50:20Thank you to our members who support us directly.

1:50:22You can join at atp.fm/join,

1:50:25and we will talk to you next week.

1:50:27Now the show is over, they didn't even mean to begin

1:50:34'Cause it was accidental, oh it was accidental

1:50:39John didn't do any research, Marco and Casey wouldn't let him

1:50:44'Cause it was accidental, oh it was accidental

1:50:50And you can find the show notes at ATP.fm

1:50:55And if you're into Twitter, you can follow them

1:51:00@C-A-S-E-Y-L-I-S-S

1:51:04So that's Kasey Liss M-A-R-C-O-A-R-M

1:51:09Auntie Marco Arment S-I-R-A-C

1:51:14USA, Syracuse, it's accidental

1:51:19They didn't mean to, accidental

1:51:24♪ We've got no tech broadcast so long ♪

1:51:28- Since we're apparently in a really good mood tonight,

1:51:33let's talk about something that I'm super excited about.

1:51:35And by excited, I mean, I find to be disgusting.

1:51:39BMW is charging seat heater subscriptions

1:51:41in some parts of the world.

1:51:42This is reported in many places,

1:51:46but this includes the Verge.

1:51:48We'll put a link in the show notes.

1:51:49The Verge writes, "A monthly subscription

1:51:51to heat your BMW's front seats costs $18,

1:51:53with options to subscribe for a year at $180,

1:51:57three years at $300, or pay for unlimited access for $415.

1:52:02Other features that BMW is locking behind subscriptions

1:52:04as per the company's digital UK store

1:52:06include heated steering wheels from $12 a month,

1:52:08the option to record footage from your car's cameras

1:52:10priced at $235 for unlimited use,

1:52:13and the iconic sound support package,

1:52:15which lets you play engine sounds in your car

1:52:16for a one-time fee of $117.

1:52:19In the latter case, BMW notes that, quote,

1:52:21"The hardware for this feature

1:52:22has already been installed in your vehicle during production at no extra cost. How generous.

1:52:27The thing that blows me away about this are the prices. $18 a month for seed heaters? $12 a month

1:52:36for heated steering wheel? Like I know these are expensive vehicles and their whole strategy,

1:52:41which they come out and say, I think Mercedes person just came out and say it, it's like,

1:52:44look, these prices are below the notice of the people who buy our cars because they have a lot

1:52:47of money. But just, you know, I'm sure we all have met people who are very wealthy, but also

1:52:52don't want to pay a lot for this muffler,

1:52:54people feel ripped off.

1:52:56They say that's how much,

1:52:57they're grumbling about paying that much for a Netflix.

1:52:59And you're gonna pay 18 for the seat

1:53:01and 12 for the steering wheel every single month?

1:53:04And to be clear, for the people who don't understand

1:53:06what we're talking about here,

1:53:07you still have to pay for that stuff to be in your car.

1:53:11It's not like they give you the seat heaters for free

1:53:14or the steering wheel heater for free.

1:53:15Like, you're paying for that when you pay for the car.

1:53:19It's not like say, well, we're just shifting the cost,

1:53:21because otherwise if people didn't pay for a BMW,

1:53:24we lose money, that's not what they do, right?

1:53:25So the hardware is there, just so we're clear.

1:53:28The heaters are in the seat,

1:53:29the heaters are in the steering wheel.

1:53:31There's a button somewhere on a touchscreen

1:53:33that when you press it,

1:53:34is supposed to allow electricity to flow to those things,

1:53:36but it will not allow the electricity to flow to those things

1:53:39unless you have an up-to-date paid subscription for them.

1:53:43This is a terrible idea and I hope nobody goes for it

1:53:47and I hope it's a dismal failure

1:53:49because not only do I want this to fail,

1:53:52I can't imagine this becoming the status quo

1:53:55in the car industry because everybody who hears this story

1:53:58viscerally hates it.

1:54:00- I can see where they're coming from

1:54:02because if you look at the full price,

1:54:05you know, the seat heater,

1:54:06if you want a seat heater, unlimited access quote,

1:54:10400 bucks, right?

1:54:11Well, what is the option for heated seats cost in a BMW?

1:54:14It's probably about 400 bucks.

1:54:16- But you're already paying that to get the seat heaters.

1:54:19They want you to pay a second time.

1:54:21- Right, and so I think what we're seeing here,

1:54:23obviously in a regular sale of a regular car,

1:54:29it doesn't cost them $400 to add seat heaters.

1:54:33I think the reality of what we're seeing here

1:54:34is that these options were already costing them

1:54:38almost nothing, and they were just nice,

1:54:41high-profit add-on sales.

1:54:43Lots of the world works that way.

1:54:44Apple does it too.

1:54:46There's high-profit add-on sales.

1:54:47You think those leather cases Apple sells you

1:54:49for 50 or 60 bucks cost anywhere near that for them to make?

1:54:53Nope.

1:54:54There's always like high profit add-ons,

1:54:55extended warranties, you know,

1:54:57those don't cost people very much.

1:54:58- They call them options in the car,

1:54:59and the Porsche is the king of options.

1:55:01Their options have no connection to what they actually cost,

1:55:03but the whole point of those options is

1:55:05you can buy them or not, and you just pay for them once.

1:55:07And I think the real reason they wanna do this,

1:55:09aside from like recurring revenue is great

1:55:11for the balance sheet or whatever,

1:55:12is that when you sell the car to somebody,

1:55:14when you sell a car that someone paid for

1:55:16like some a bunch of weird options,

1:55:18those options go with the car.

1:55:19The person who buys them from you

1:55:20can use all those options.

1:55:22If you sell a car like this,

1:55:23now BMW has a new person paying for that.

1:55:26Like their revenue that they never would have gotten.

1:55:29BMW would never have gotten part of that car sale.

1:55:31Now when they sell it to somebody else,

1:55:32if that guy wants the seat at his work,

1:55:33it's gotta pay $18 a month,

1:55:35just like you were paying that.

1:55:37And you get to stop paying it

1:55:38and then a new person gets to start paying it.

1:55:39It's, pfft, no.

1:55:42I mean, and since this is all just hardware and software,

1:55:44you know there's gonna be hacks to just get around this

1:55:46or whatever, so now people can be jailbreaking their cars

1:55:47so they can hit their butts?

1:55:49- Yep.

1:55:49- I see why they are trying this.

1:55:53I also think this is a massive failure to read the room

1:55:58because it sounds like a joke about BMW owners.

1:56:01Like this sounds like a parody.

1:56:02This sounds like something that they would never actually do

1:56:04but The Onion would write an article about.

1:56:06So I don't think BMW realizes how this looks to the world.

1:56:11And maybe, I don't know, maybe in certain areas

1:56:15that people don't care.

1:56:16Maybe their customers actually aren't mostly like us.

1:56:18- But that's the thing about rich people though.

1:56:21They want the fancy thing,

1:56:22and they'll pay the Porsche option prices for it,

1:56:25but they don't want to feel

1:56:26like they're being nickeled in time.

1:56:27In many ways, I feel like someone who's buying

1:56:29a fancy car like this would much rather pay five times

1:56:32as much to buy it up front,

1:56:34and then sell the car after three years,

1:56:36than to pay one fifth the price, but pay it monthly.

1:56:38Because one of them feels like a more luxurious experience.

1:56:41Let me pay, or ridiculously overpay for this option.

1:56:45You want the black stitched logos on the headrest.

1:56:49That'll be $7,000, all right?

1:56:51I'll pay you that.

1:56:52I feel like I'm a rich person

1:56:54and buying a rich person thing, right?

1:56:56And then the car will go down in value

1:56:58like 80% in the first year I own it, right?

1:57:00But whatever, that feels like a luxury experience.

1:57:02What doesn't feel like a luxury experience

1:57:04is to take your car home and to be nickeled and dimed

1:57:06for signing up for subscriptions

1:57:07for features that are supposedly in the car.

1:57:09Forget about the absolute values of,

1:57:10yeah, but this is cheaper than the other one.

1:57:12Forget about that.

1:57:13That's not, the sort of luxury experience is not like,

1:57:17let me see where every penny is going.

1:57:20You just want to spend way too much money

1:57:23and get a very nice thing

1:57:24and not have to think about it again.

1:57:25The not having to think about it,

1:57:27that is part of the luxury experience.

1:57:29When I go bring my car to the dealer,

1:57:30I always get a loaner 'cause I have a Mercedes

1:57:32and the loaner is nice.

1:57:33You're paying for all of that

1:57:35when you overpay for your car, right?

1:57:37That feels nice.

1:57:39It feels better to pay more

1:57:40and then to not have to think about it.

1:57:41It's like all-inclusive vacations

1:57:43or other things where you don't wanna have to think about,

1:57:45you know, each little bit, give a little money,

1:57:47give a little money.

1:57:48You just wanna say, here, I'm very wealthy,

1:57:49here's a wad of money up front,

1:57:51and in exchange for that,

1:57:53I don't have to think about this stuff anymore.

1:57:54And that's the opposite of the BMW experience,

1:57:56that it is a less luxurious experience for people,

1:57:59even if it actually saves them money.

1:58:00That's the thing about this,

1:58:01people are gonna do the numbers and say,

1:58:02well, if you do the math,

1:58:04it's much cheaper to own it this way.

1:58:05But it doesn't feel BMW, it doesn't feel Mercedes,

1:58:08it doesn't feel like a luxury experience,

1:58:10even if it is less expensive.

1:58:11So this is terrible for actual regular car companies,

1:58:16Honda, Toyota, Ford, GM.

1:58:20They should never do this because regular people

1:58:22don't have this kind of money to be spending

1:58:24on their steering wheel heater every month.

1:58:26That's ridiculous, right?

1:58:27And then the luxury brands, they shouldn't do it

1:58:29because it's annoying and it subverts their brand.

1:58:32It makes them feel chintzy.

1:58:33It makes them feel like, I don't know,

1:58:36like they're cheating you.

1:58:37It makes you feel ripped off.

1:58:38It makes you feel like, what did I pay all this money for

1:58:41to be treated like this.

1:58:42- Right, 'cause it's so much about pricing and value

1:58:46is perceptual and subjective and more about

1:58:51what people think is the principle of the matter

1:58:54than the actual numbers involved.

1:58:56And we see this with things like app and service pricing

1:58:59in our tech world where people who will spend $1,000

1:59:03on their phone every couple of years

1:59:05will balk at spending $3 a year on an app

1:59:08that does something they use every day.

1:59:10- $2.99, if it was 99 cents, maybe.

1:59:13- Right, there's all the psychology that goes along

1:59:16with pricing and value, and this, I think you're right,

1:59:19not only is it less luxurious to feel like

1:59:21you're being nickeled and dimed for stuff

1:59:23that you think you should deserve,

1:59:25especially since the hardware's already there,

1:59:27but this also, assuming that you ship every car

1:59:30with the hardware in it, and then you can just

1:59:31turn it on for 400 bucks, it breaks the illusion.

1:59:36What you're saying a minute ago, the illusion of

1:59:39you're buying the car and you want that nice option package

1:59:43'cause it gives you that nice luxurious thing that you want

1:59:45or it gives you this cool trim on this piece

1:59:48that looks nicer and feels better

1:59:49and maybe matches your preferred color scheme

1:59:52a little better or whatever else

1:59:53and maybe you get the sunroof and the fancy

1:59:56butt heaters and everything else.

1:59:58When you pay that option price for that,

2:00:00when you make that decision up front,

2:00:01which you're way more likely to do then

2:00:03than you will on a monthly basis later,

2:00:06so I think they won't even sell many of these things anyway,

2:00:08But when you buy that up front in that option package,

2:00:10you are, you're accepting an illusion

2:00:14that these options cost this much money.

2:00:17And it's totally wrong, they don't really cost that much.

2:00:20- It's like Apple and RAM.

2:00:21- Right, exactly, like Apple and all of their spec upgrades

2:00:23basically, you know, you are buying the illusion

2:00:27that okay, you know what, sure, I'll spend the extra

2:00:30couple thousand bucks to get the sunroof

2:00:32and the nice seats or whatever.

2:00:33However, if every vehicle comes with this hardware

2:00:37and you are just paying to unlock it,

2:00:41that totally shatters that illusion.

2:00:43And it makes it seem like you're being ripped off,

2:00:45even though you would have paid

2:00:47the exact same amount of money up front for that feature

2:00:51if you didn't know that the hardware was always there.

2:00:56Like if it was just presented as a hardware option

2:00:58that the hardware is either here or not

2:00:59based on whether you paid this,

2:01:01that maintains the illusion

2:01:02and people are happy to pay for that

2:01:04in most circumstances if they want those things.

2:01:06Whereas, if the hardware's always there

2:01:08and you're just paying to use it,

2:01:10you feel like you're being cheated.

2:01:12- And by the way, car options for the most part

2:01:14are not like that.

2:01:14When you buy the alloy wheels,

2:01:16you don't get them unless you pay for them.

2:01:18If you want the sunroof,

2:01:19it's not like they all come with a sunroof

2:01:20and it gets unlocked or like,

2:01:21oh, it comes with a V8,

2:01:22but we only let you use four of the cylinders.

2:01:25Most car options that are, even the cosmetic ones,

2:01:29if you don't pay for it, you don't get it.

2:01:31Do you want the metallic paint?

2:01:32Well, if you don't pay for the metallic paint for $5,000,

2:01:34you're not getting the metallic paint.

2:01:35It's not under your paint hiding where you can enable it.

2:01:38Even like, oh, do you want the colored piping

2:01:40on your seats?

2:01:42Do you want the contrasting stitching on your steering wheel?

2:01:45That'll be $500.

2:01:46You don't get the contrasting stitching

2:01:48unless you pay that $500.

2:01:49Does contrasting stitching cost $500?

2:01:51No, of course it doesn't, but you don't get it.

2:01:54And for these features, particular stuff like this

2:01:56is like software powered or whatever,

2:01:57well, you can't see the seat heaters,

2:02:00and they aren't that expensive in addition to the seat.

2:02:02But seats are, you know, I was watching one of the,

2:02:05one of my teardown things, seats are among the most expensive things in a car interior.

2:02:09I think one of the things I was watching said the seating in the typical high-end American

2:02:17minivan costs more than the drivetrain, not including the engine, but just the drivetrain.

2:02:23Not the engine itself, but the drivetrain, like the axles, the differential, all that

2:02:26stuff.

2:02:27The seating costs more than that because if you look at how difficult it is to assemble,

2:02:31how much hand assembly has to be done, how much sewing and stitching and how many parts

2:02:35there are or whatever, in the grand scheme of that, the seat heaters, which are essentially

2:02:39a wire that snakes its way through a flimsy piece of fabric that runs up your seat, right?

2:02:43That costs additional 10, 20 bucks per seat and they sell it to you for, you know, $150

2:02:50per seat, right?

2:02:51So huge margins on those options or whatever, that's the type of thing that they could potentially

2:02:55afford to put in every car and not just not tell you it's there.

2:02:57But I think even for things like steering wheel heaters, I think for the most part they

2:03:01don't put them in the non-heating steering wheels.

2:03:03It's not like they're there and you get them, you know,

2:03:05like they have a non-heated and a heated version.

2:03:08And certainly for in regular non-luxury cars,

2:03:10they have heated and non-heated versions of seats

2:03:12and the non-heated ones don't have the seat heaters in them.

2:03:14But for stuff like this, you know, if it's not visible,

2:03:17they can actually charge you.

2:03:18And then the software ones,

2:03:20those actually make a little bit more sense to me

2:03:22because at the very least there you say,

2:03:23well, paying for software is something we understand.

2:03:26And you know, well, it downloads the software

2:03:28and you pay for it.

2:03:29So technically you don't have it beforehand,

2:03:30but like, fine, you want to charge me your software features

2:03:32you pay for things that have services like Sirius XM, you're paying a monthly fee to

2:03:36get a service from a company, that's a thing we're all familiar with.

2:03:39Even paying for the downloadable engine sounds, that's the punchline in the Verge article,

2:03:45that's like buying a ringtone for your phone, that's all within the realm of, it's dumb

2:03:50purchasing $117 doesn't make sense, but if you like that sound and it's a one time purchase,

2:03:56it's not a big deal.

2:03:57the monthly subscriptions to use features of your car,

2:04:02I really don't think that's gonna fly.

2:04:04I don't think it's gonna fly for BMW.

2:04:05I think it's gonna damage their brand.

2:04:06And I really, really don't think it's gonna fly

2:04:09in like regular people cars.

2:04:11Like it's just, I mean, like you were saying, Marco,

2:04:13they don't even wanna pay 99 cents for an app

2:04:15that they use seven hours a day.

2:04:16You think they're gonna pay $12 a month

2:04:18to heat their steering wheel?

2:04:19Hmm.

2:04:20[Door closes]