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