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]