PodSearch

ATP

546: Re-Crop With the Wisdom of Age

 

00:00:00   I do feel really good tonight because earlier today I moved my deployment target for my new rewrite of the app from iOS 16 to iOS 17.

00:00:13   I mean, we all know you would.

00:00:15   I know, well, but also, okay, part of the rewrite is a new sync protocol that is way more efficient both on the client and the server.

00:00:24   So I thought I should target iOS 16 because like 95% or something of my users are on iOS 16 and above.

00:00:30   So I'm like, if I can deploy this to them, I can also save a bunch on the server side resource wise and dramatically lighten the load on the servers.

00:00:38   So my thinking was, if I ship this thing sometime this winter, I can ship it to everybody and dramatically lighten the load on the servers.

00:00:45   Well, in the meantime, I made the mistake of looking at my numbers for last fall of like how quickly did people adopt iOS 17 last fall?

00:00:53   Out of my user base, not out of the entire world of iPhone users, but just out of my users.

00:00:58   You mean iOS 16?

00:00:59   Yes, that's what I meant, sorry.

00:01:01   And it turned out that by December, I had something like 88% by December 1st of people who had already installed iOS 16 by then.

00:01:12   It having come out like the prior September.

00:01:15   So it only took a few months to reach almost 90% of adoption on the new OS.

00:01:21   And I was looking at my own life, introspectively, and thinking, what are the odds that I ship this thing before December 1st?

00:01:29   It's basically zero.

00:01:31   Like, I cannot imagine that happening.

00:01:34   I just cannot imagine making that much progress in that much time where I'd have this entire rewrite of the app ready to ship only, you know, five months from now or something.

00:01:45   It's just, it's not going to happen.

00:01:47   Look, and I would love if for some reason, if four and a half months from now, you hear me in the show complaining, oh, I can't believe I can't ship this rewrite.

00:01:55   It's been done sitting around for weeks now and I can't ship it because my iOS 17 adoption isn't high enough yet.

00:02:01   Listeners, if that happens, you can feel free to say I told you so.

00:02:04   But there is no chance of that happening, as far as I can tell.

00:02:08   There is no way I ship this entire rewrite by December.

00:02:11   I'd be lucky to ship it by April, I think.

00:02:13   Oh, no.

00:02:15   Maybe not quite that bad, but it's just, there is just so much in the app.

00:02:19   You don't realize when you have a decade old app, just how much of an app that is.

00:02:27   Like, how many subsystems there are, how many features there are, how many screens there are.

00:02:32   There is so, so much.

00:02:35   And I don't have to, look, I can kind of part this and I don't have to rewrite every subsystem.

00:02:41   But because of the way I'm modernizing things, I will have to rewrite many subsystems.

00:02:46   And most or all of the UI, which is much of the app.

00:02:50   Like, the only thing I'm not touching is the audio engine.

00:02:52   I'm not rewriting the audio engine.

00:02:54   But I am rewriting some of the things that interact with the audio engine.

00:02:56   So there's even that.

00:02:57   Like, there's so much that I have to rewrite and all these little tiny behaviors that I have to, you know,

00:03:03   rewrite or reconsider and make sure I get right.

00:03:06   So it is going to be, it is still a process.

00:03:12   But I decided since there's no way I'm going to ship it by December 1st,

00:03:17   and assuming I have a similar curve this fall with my adoption of the new OS,

00:03:21   if I can ship iOS 17 plus and use all of the new observable stuff as I'm writing all my Swift UI stuff.

00:03:28   I converted like two views over to the observable stuff today.

00:03:32   Oh my God, it's so much easier.

00:03:34   And I couldn't believe, like, I could get rid of so much crap, so much boilerplate, so much like, you know,

00:03:40   moving values around by using that system.

00:03:42   Oh man, it's so nice.

00:03:44   So I thought, all right, I'm going to get this done.

00:03:46   I'm going to just require iOS 17.

00:03:48   And by the time I, you know, I mean, by the time I ship this rewrite, it might be time for iOS 18.

00:03:54   We'll see, but hopefully not quite that long.

00:03:56   Right.

00:03:57   Well, I'm glad that progress is being made.

00:03:58   You sound like you're in a good spot in so far as you sound chipper about it.

00:04:02   And you, you know, you're not in the doldrums of what have I done?

00:04:05   Why am I doing this?

00:04:06   You know, et cetera.

00:04:07   Oh, that came yesterday when I was working on the widgets.

00:04:09   Ah, fair.

00:04:11   Because I am in the meantime going to ship an iOS 17 update for the old code base that has a new widget for iOS 17.

00:04:17   Because, you know, whenever it's time for that, I'll ship that.

00:04:20   And those are, I think, done.

00:04:22   It was tricky to, back when I naively thought I will just modify my iOS 16 widgets to work on both.

00:04:31   No.

00:04:32   That's like, as I started designing it and started looking into, like, okay, what does interaction mean?

00:04:38   What does it mean when the widgets are in all these different new places?

00:04:40   You got the standby mode.

00:04:41   You got the beaming into the Mac.

00:04:42   You got the iPad lock screen.

00:04:43   You got the iPad desktop.

00:04:44   You know, like, all these different places widgets go.

00:04:46   And, like, there's no way my existing design works well in all these cases.

00:04:51   Like, it just doesn't.

00:04:52   And I started modifying it and had all these, like, giant, you know, conditional logic of, okay, well, if you're on iOS 17, then modify this thing this way.

00:05:00   But also, if you're on iOS 17 but your background is removed, modify this way.

00:05:04   And it got so ridiculous.

00:05:05   And at the end, I'm just like, you know what?

00:05:07   This is impossible to maintain and impossibly complicated.

00:05:11   I'm just going to have a separate set.

00:05:13   So, I literally, like, renamed all of those widgets to have _ios16 on the end.

00:05:19   And just copied them and made entirely new ones for iOS 17.

00:05:24   And just conditionally, you know, render the entire widget from the whole separate class or struct, I guess.

00:05:29   A whole separate, you know, definition of widget.

00:05:31   And that was much better.

00:05:33   Because the thing is, like, making them interactive, first of all, that changes everything.

00:05:37   But you don't want them interactive everywhere because, like, interaction in standby mode is kind of annoying because you have to unlock the phone after you interact with it to do anything.

00:05:48   So, like, there are certain places where you don't want interaction or that you kind of have to be different.

00:05:54   It's a whole thing.

00:05:55   Anyway, all this to say, this fall, listeners, I would expect many of your apps that have widgets are going to completely rewrite them.

00:06:05   And many of them will require iOS 17 to make this job easier.

00:06:08   So, be ready to adopt iOS 17 quickly.

00:06:11   If not for my app, then for all of your other nerdy apps.

00:06:14   Before we move on to follow up, I should mention that if you are currently driving or perhaps walking, if you're mobile at the moment, please do yourself a favor.

00:06:27   Not even me. Do yourself a favor. Pull over. Step to the side. Do whatever you got to do.

00:06:31   And go ahead and go to hypercritical.co/shirt.

00:06:36   Get yourself a Hypercritical t-shirt.

00:06:38   I think clearly, because of the amazing sales job I'm doing right now, I will end up getting easily 25% of the profit.

00:06:45   I think that's the agreement that we've just reached.

00:06:47   So, go to hypercritical.co/shirt.

00:06:50   Get yourself a once every five years Hypercritical t-shirt.

00:06:53   Now is the time. Do not wait.

00:06:54   Do not say, "Oh, I'll remember." You won't remember. Go now.

00:06:58   Hypercritical.co/shirt.

00:06:59   Only one of these episodes left.

00:07:01   Next episode is going to be the final warning, people.

00:07:04   Five years.

00:07:05   Five whole years. Now is the time.

00:07:08   And, Jon, your silence is consent. That's 25% for me. Sounds good.

00:07:12   Moving on. Follow up.

00:07:14   We've got some...

00:07:16   A lot of people wrote in to remind me of something that I am actually actively using, except I almost never use it.

00:07:21   Let me explain.

00:07:22   I was talking in the after show last week about when I had my IP address on my home internet connection change out from under me,

00:07:30   which happens extremely rarely because this is a connection that's always up, but it does happen from time to time.

00:07:37   And it changed out from under me, and I think, Jon, you were talking about dynamic DNS solutions,

00:07:42   and that led us on the rabbit hole of dyndns.org, whatever it used to be.

00:07:46   Anyways, a lot of people pointed out, including a friend of the show, Spencer, and many others,

00:07:51   that Synology has its own dynamic DNS setup thing that I could and should use.

00:07:57   And as it turns out, I do use that.

00:07:59   And what you can do is you can have your Synology phone home to the Synology server's website, what have you,

00:08:04   and it will update the IP address of your Synology, and then you can refer to 123mainstreet.synology.me

00:08:14   or whatever the case may be, and that will get you back to your Synology.

00:08:18   That, of course, would also get me back to my house.

00:08:21   It's not specific to the Synology. It's DNS. It's just resolving to an IP address.

00:08:26   And I should keep that in mind as a backup, as a way to get to the house.

00:08:32   But for whatever reason, I guess because it has Synology in the URL, I think of that as being unique to the Synology.

00:08:38   It isn't unique to the Synology. Again, it comes to the house.

00:08:40   But I think of it that way, and that's why I'm not using it.

00:08:43   However, Alex Mazinoff, who is the author of Swiftbar, which I highly endorse,

00:08:49   he wrote in and said, "Speaking about dynamic DNS, Synology not only has a built-in client,

00:08:53   but also provides a free service." And Alex talked about this. We'll put a link to this in show notes.

00:08:57   But what was interesting was Alex said, "Then you could add a CNAME, such as mainstreet.caseylist.com,

00:09:03   pointing to 123mainstreet.synology.me on hover, and that's it."

00:09:08   So to recap, what Alex is saying, which is a clever idea that I probably wound up doing,

00:09:13   is I have hover. My subdomain on hover just become a CNAME.

00:09:18   You'll refer to whatever.synology.me, and then I've got the best of both worlds.

00:09:23   Because the kind of backing store, if you will, for the IP address is the Synology setup that should always be updated.

00:09:30   But I can still continue referring to it as whatever.caseylist.com. I just thought that was interesting.

00:09:36   I'm also using the free Synology dynamic DNS service, and so I was aware that it existed.

00:09:41   But what I wasn't aware of is that if you go to that same place, it's on your Synology,

00:09:45   it's under Control Panel, and then External Access, and then DDNS.

00:09:49   It also supports third-party services, so it's not just the Synology.me service that I guess they just run for free for Synology owners.

00:09:57   It does a bunch of other ones. It doesn't include the service that I've been freeloading on for 17 years.

00:10:02   So that's not in there, but... Or actually, maybe it was, but hover wasn't in there for whatever reason.

00:10:07   But anyway, a lot of them are supported, and like a lot of these systems, it's probably pluggable,

00:10:11   so you could probably maybe get a plugin for your service or whatever.

00:10:14   But the CNAME thing is interesting. I should probably do what you just described.

00:10:18   Just pick one of my unused domains and map it to the thing.

00:10:22   I'll have to decide whether I'm going to continue freeloading to continue my 17th.

00:10:26   I think I should make it to 20 years, never freeloading for 20 years, and it can...

00:10:30   Right into the company and get a tour of the factory or something.

00:10:33   Shake hands with the CEO. This person has refused to give us money for 20 years. Here's your plaque.

00:10:39   Congratulations.

00:10:40   We'll see what I do, but yeah, I should just make it alias from one of my umpteen domains.

00:10:44   Alright, Marco, I know that you got an overwhelming amount of security camera update,

00:10:50   because Jon and I got an overwhelming amount of security camera updates.

00:10:55   Can you tell me what the executive summary is for all of this, please?

00:10:59   Yes. So, first of all, I am vindicated. Everyone has these problems with Logitech CircleView cameras.

00:11:08   A lot of people wrote in, first of all, thank you. Second of all, wow, we've had a lot of people write in with a lot of content,

00:11:14   and it's all very good and helpful, so thank you very much. Also, I think you can stop now.

00:11:19   Anyway, it's been... And seriously, thank you very much to everyone who's written in.

00:11:23   It's actually been extremely helpful and really quite elaborate.

00:11:26   But anyway, so, Logitech CircleView cameras, the issues I was having with constant Wi-Fi dropouts and connection drops and everything,

00:11:33   everyone has these problems, both with the CircleView and the doorbell version of it.

00:11:37   It seems like some people have had good luck putting Wi-Fi access points extremely close to them, and it seems like that helps.

00:11:46   A few people have said that trying to configure their Wi-Fi system such that they only ever connect to the same AP occasionally helps,

00:11:57   but some people said that didn't help them, as simple as it did.

00:12:00   So it seems like weak and buggy Wi-Fi is their problem, and that if you can somehow make the Wi-Fi to them easier for them to handle,

00:12:09   that seems to improve the error rate. And that actually kind of maps... I mentioned that one of them that I have is pretty reliable, the bite camera one.

00:12:18   And that happens to be about five feet from an AP. So that actually makes a lot of sense that, you know,

00:12:25   why that one would be more reliable than the others, which are a totally reasonable distance from APs, but not quite so close.

00:12:31   Anyway, though, everyone wrote in to say, first of all, there are more HomeKit secure video cameras than I thought.

00:12:39   I linked it in the show notes after the fact, and we'll link again maybe this time to this iMore article that shows every HomeKit secure video camera currently on the market.

00:12:47   And I also want to point out there's multiple forms of HomeKit cameras. There is HomeKit compatible, and then separately from that is HomeKit secure video compatible.

00:12:58   Those are actually two different levels of integration with HomeKit, and a lot of the things people wrote in only were compatible with HomeKit in the sense that you could view them in the Home app,

00:13:07   but not necessarily secure video, which is their own kind of cloud storage and certain other features kind of thing.

00:13:14   Anyway, a lot of people wrote in to recommend the Eufy cameras, the E-U-F-Y. This is Anker's home, like smart home kind of brand.

00:13:23   And I had Eufy cameras first. Listeners may remember, that's the brand that I kept killing the cameras I put in them outside.

00:13:31   And that mucks to John's chagrin. So I had Eufy at first, and they are fine.

00:13:38   They actually have had a couple of little scandals here and there since then with some security badness here or there.

00:13:46   I didn't love them, but they were fine and they are cheap.

00:13:50   They have some options that work with HomeKit and some options that work with HomeKit secure video, some of which are outdoor compatible.

00:13:58   And people say they're okay. But ultimately, everyone said, "Just get Eufy cameras." Everyone.

00:14:07   I had no idea we had so many Ubiquiti fans in the audience.

00:14:11   And everyone basically said, "Yes, the Wi-Fi cameras and everything are nice and cheap and simple.

00:14:19   However, if you want reliable cameras, it has to be PoE cameras." Power over Ethernet, hardwired, hardpowered cameras.

00:14:28   That's how to make reliable home cameras.

00:14:30   You can use any PoE cameras. Like there's this brand Amcrest, some people recommend it and everything.

00:14:36   But everyone basically said, "Yeah, use Ubiquiti stuff. It's really good."

00:14:39   You can also use Synology's surveillance station with other cameras if you want, but everyone basically said,

00:14:45   "Ubiquiti stuff is either as good or better."

00:14:48   And then there are a couple of ways to get that into HomeKit if you also want.

00:14:53   So the recommended setup is to run PoE cameras, probably Ubiquiti's cameras with Ubiquiti's recorder and stuff like that,

00:15:01   using their Protect app. Like Nest, that provides 24/7 recording.

00:15:06   And it's stored on your local hard drive and inside whatever Ubiquiti appliance you're using to record the video.

00:15:12   That's like the 24/7. But then you can also bridge that into HomeKit and possibly HomeKit Secure Video

00:15:20   to get those features on top of it. So that gives you all the Apple integration.

00:15:24   So that way you get the nice notifications from HomeKit. You get the motion detection from HomeKit.

00:15:30   You get the feature that I've actually never used where you can have it pop in a picture on your Apple TV

00:15:36   if someone's at your front door camera and show it right there on your Apple TV as a little video doorbell kind of thing.

00:15:42   So you can do all that with Ubiquiti and other cameras using either HomeBridge or the one thing that everyone said

00:15:51   that you need to try is this app called Scripted. S-C-R-Y-P-T-E-D.

00:15:57   So Scripted with a Y in the middle of it. Scripted apparently bridges those kind of systems to HomeKit Secure Video.

00:16:04   And so this is what I'm going to do. I have stuff on order. It might take a couple of weeks to get it all in here

00:16:10   and set it all up and actually try it. But this is the setup I'm going to do.

00:16:13   I cannot tell you how many people wrote in to say Ubiquiti's cameras are great and use them with Scripted

00:16:21   to bridge them into HomeKit. Everyone wrote in to tell me this. And people gave me sample footage.

00:16:27   People were pointing out people who worked there, people who didn't work there, people who've installed this for many different homes

00:16:32   or for clients that they work with, businesses that use it. Everyone agreed. Ubiquiti cameras and then you Scripted.

00:16:40   I feel like you have a special case here though. I was thinking about this while reading through all the email

00:16:44   with the people recommending the power over Ethernet cameras. I'm not sure if that's the best solution for you

00:16:50   because I just kept thinking of that Ethernet connector out there in the elements and thinking about that USB.

00:16:55   That was USB.

00:16:56   I know, but I'm thinking about the Ethernet connector that will be on your power-resistant phones.

00:17:00   And then I was comparing it to the USB-A connector that you showed that had rusted out.

00:17:04   The advantage that a wireless one has is it can be completely weather sealed with nothing plugged into it at all

00:17:11   except for I suppose power. Or even that, it could be battery powered with one of those magnetic charging base things.

00:17:16   I think the Nest cameras have that where it's hard-wired to a base that inductively charges a magnetically attached thing.

00:17:23   Anyway, you'll find out, but the advantage of wireless for you is less rust surface potentially.

00:17:30   Or it could be no matter what you do, the Salt Air is going to destroy this camera in a year anyway, so it might as well get cheap ones.

00:17:36   But I guess you'll find out.

00:17:37   Well, so on that front, what attracts me to the PoE option here is you can get like 100-foot Ethernet cables and just run them from a safe place.

00:17:48   And so my physical setup here is I have a utility closet where all the networking gear is based, and that is interior condition space.

00:17:56   And there is a small pipe conduit that runs from that down to under the house and to all the utility areas down there.

00:18:05   Is this the water closet or is it a different closet?

00:18:07   Different closet.

00:18:08   Is there water stored in this one too?

00:18:09   Yes, actually.

00:18:11   You get the water out of the closets with your electronics.

00:18:14   Well, the water is in gallon jugs on the floor.

00:18:17   Even though you thought the same thing in the other closet and they started to leak. Do not store water next to your electronics.

00:18:22   It's below the electronics. Unless we had a significant steam situation forming from this water, it would not reach the electronics.

00:18:29   You just cannot stop putting indoor things outdoors and storing water next to your electronics in closets.

00:18:35   Yeah, there's a chest freezer there too. Is it going to beep them to death?

00:18:39   Anyway, so the advantage here with Power Reisement is that I can, and this is how all, I have a couple of access points that are outdoors as well, and this is how I use them.

00:18:49   They're also powered by PoE and so I basically have long cables that run from the inside closet through that conduit to the outside world.

00:19:00   And so all I have to do is seal the end of the cable that plugs into the camera.

00:19:05   And all of these cameras are designed to do exactly that.

00:19:08   And I can enhance it if I want to. There's like additional boxes you can mount them to that are their own kind of sealed little things.

00:19:15   Are they airtight sealed? That's the problem for you.

00:19:17   You have to airtight seal them.

00:19:19   So that's why I'm looking at these boxes too. There are different options.

00:19:22   And somebody recommended, I believe it's called Dialectic Grease. Something like that.

00:19:27   Yeah, I have some of that.

00:19:28   So I bought a tube of that as well to kind of stick on the connector so it kind of seals it up that way.

00:19:33   So I'm going to do all the sealing and everything and see how it goes. I don't know if it's going to work. Out here...

00:19:38   Can you evacuate the air from the chamber? Because even the small amount of air that you trap inside there is probably filled with salt that is going to corrode things.

00:19:45   It is definitely filled with salt. But I can't imagine the static amount of non-moving air in there would really be a problem.

00:19:52   The reason I think about this is because the contacts on an ethernet connector, an RJ45 connector, they're so tiny and delicate compared to the huge contacts on USB-A.

00:20:01   And your weather defeated the USB-A connector. So I'm thinking those little tiny contacts on an ethernet connector don't stand a chance.

00:20:07   Well, the USB-A connector was not just bare in the world. It was inside. You can buy on Amazon these little sealed plastic boxes that are made for if you're running Christmas lights.

00:20:18   And you have a cable outside that you want to join with an extension cable or something.

00:20:23   And so even if you have two outdoor cables, or if you plug them into each other, that's going to be a joint that can rust and have problems.

00:20:29   So you can buy these plastic boxes that are made to put cable connections into and then they seal up from the elements.

00:20:37   That USB-A plug from last week or whenever, that was in one of those boxes. And it still got like this.

00:20:43   I think you need to start shopping, see this is getting you more towards the boat stuff, find things for people who live on boats.

00:20:48   Buy the marine equivalent. Because that's your only chance.

00:20:51   That's what I look for. Whenever I'm looking for anything that goes outside, like a padlock or something.

00:20:56   Like, any of that stuff, I always look for like marine grade. But the thing is, everyone says everything is marine grade and then you get it.

00:21:04   Yeah, yeah. You got to actually go to the place where people who own boats shop and I bet it's just not on Amazon.

00:21:09   I don't think people who own boats have things last forever for them. Like, think about what boat ownership is like.

00:21:14   I know. You know, it lasts pretty long. One of my favorite sailing channels that I watch, I've been watching for many, many years.

00:21:20   You watch a sailing channel? What do you not watch? My goodness.

00:21:24   Yeah, they have a, I think it's like a five cylinder Volvo engine in their sailboat for when there's no wind.

00:21:32   Connected to a transmission and everything. And like, it's in a sailboat and they live at sea.

00:21:36   So it's the worst case scenario. And this thing lasted for years. They just recently replaced some parts and I'm like, how do you have a giant hunk of metal in a sailboat at sea that has lasted you this long?

00:21:47   There must be some way that boat people know how to seal things up so they don't rot. Same thing, they had solar panels so they just replaced the solar panels after several years.

00:21:54   I'm like, how are those solar panels functioning? Marco can't keep a USB-A plug functioning outside his house.

00:21:59   You're literally in the middle of the Pacific Ocean with these solar panels. Anyway, they must know something we don't.

00:22:05   Maybe there's a lot of dielectric grease on things. I guess. I don't know. Because like, you know, I buy stuff that claims to be like, you know, stainless steel, everything.

00:22:12   And then you get it. And it's like, yeah, okay, maybe like the main body of the thing is stainless steel. But somewhere there's two screws that are not and they rust out instantly.

00:22:21   And you can always tell, like, oh, they didn't get that one washer in stainless steel. There's always something. There's some part on everything that is clearly, you know, just crap metal and it rusts instantly out here.

00:22:33   And despite everything claiming to be marine grade or whatever. So I think marine grade is a bunch of horse crap, personally. In my experience, that doesn't actually lend much credibility to the longevity of a product out here.

00:22:45   I don't think there's probably no laws governing the use of that phrase. You can put it on anything.

00:22:49   Yeah, right. It's like natural flavors. Marine grade.

00:22:53   All right. So Marco, when you're buying all this stuff, how are you going about doing that?

00:22:57   Oh, yes, this is one of the things I wanted to cover. So I mentioned last episode about the Ubiquiti router. I was trying to get this router that was out of stock on Ubiquiti site.

00:23:07   And I ended up ordering it from some Amazon scalper for like a $50 premium because I just I kind of needed like the internet connections being installed in like two days. So I needed I need the router.

00:23:17   So I ended up buying it from them. And then about two hours after it shipped from that vendor.

00:23:23   It was pointed out to me by a few people actually, that B&H is a Ubiquiti retailer. And they had it in stock for only a $30 premium instead of a $60 premium.

00:23:35   So now I know and I ended up buying all the surveillance stuff from B&H because I they're they're local to us here in New York. They are a wonderful retailer. I've bought from them forever.

00:23:47   I don't buy everything from them. But I always buy like things from them that Amazon will either treat poorly, or that has a high chance of being counterfeited.

00:23:59   So things like SD cards, or like fancy cameras, that kind of stuff I always buy from B&H. And if you're anywhere anywhere around New York, shipping is extremely fast. Like it's basically free overnight shipping.

00:24:10   So anyway, it's wonderful. I recommend them as a retailer. So when I learned they were Ubiquiti retailer, I'm like, Oh, done. I'm now I'm only buying from them.

00:24:17   So anyway, thanks for pointing that out, everybody. And thank you again. Thank you, everybody for all your feedback on Ubiquiti stuff and on the camera situation.

00:24:24   It's been extremely helpful and hopefully I'll have more to report on that front soon.

00:24:29   We are brought to you this week by Trade Coffee.

00:24:33   If you want to make great coffee at home, you need freshly roasted beans and Trade Coffee is a wonderful service that makes it simple to discover new coffees from over 55 top indie roasters and have them shipped to your house on whatever schedule you want.

00:24:50   So here's how this works. You go to Trade Coffee and then they curate the selection for you based on what you tell them about your taste.

00:24:57   So they have a wonderful, sophisticated matching algorithm that curates coffee perfect for you. And they have all this deliverable to you with flexible subscription plans and a diverse assortment of roasts tailored to whatever your needs and preferences are.

00:25:10   They have over 450 coffees. So no matter what you need, dark roast, light roast, espresso, blends, rare roast, whatever it is, they guarantee you'll find something new to love.

00:25:22   And whether you're a nerd like me or whether you aren't really sure where to start with fancy coffee, they are great because they will guide you through the process and help you be matched to coffees uniquely suited to your taste.

00:25:33   And so this is delivered all fresh to you, roasted within 48 hours and shipped directly to you by their roasters.

00:25:39   So it is a great way to get fresh roasted coffee delivered at home, however you like it, whenever you like it, as much as you like. It is great.

00:25:47   They are just hassle free. They have free shipping, customizable plans. You can cancel or pause whenever you want. So trade makes it super easy to discover better coffee.

00:25:56   Upgrade your morning routine with better coffee. Right now, Trade is offering you a free bag of coffee with any subscription at www.drinktrade.com/atp.

00:26:07   That's www.drinktrade.com/atp for a free bag of coffee with any subscription purchase. Once again, www.drinktrade.com/atp. Thank you so much to Trade for sponsoring our show.

00:26:20   [Music]

00:26:24   All right, Jon, do you want to take us through faraway memory?

00:26:27   Sure, this is a little bit of feedback about a suggestion. It was an Ask ATP question about what do you think about a Mac Pro that uses like a big RAM disk to make swap faster, to make up for the fact that Mac Pro SoCs can't have a lot of RAM on them.

00:26:42   It was a quite elaborate scenario that we discussed in a past episode. And Akshay Narayanan had some information to share about that.

00:26:49   He says, "Your discussion of this topic touched on a research product that I was part of, so I thought I would chime in. Jon was right to describe the technique as an expansion of the memory hierarchy.

00:26:59   And when restricted to low-performance personal/professional computing, which covers everything Apple manufactures, this discussion was correct."

00:27:05   You can tell someone's an academic when they talk about "low-performance computing." Those wimpy little computers you have in your desk that don't fill entire rooms, right?

00:27:12   So Akshay continues, "However, I wouldn't be so quick to dismiss this technique in higher performance settings. A recent trend in both academia and industry has been in resource disaggregation.

00:27:22   In the specific context of memory, this is sometimes called 'far memory,' which refers to the unbundling of hardware resources from physical computers, almost always servers in a data center, due to hardware restrictions referred to as the 'memory capacity wall.'

00:27:34   Basically, the amount of memory that is possible to pack into a single server has an upper bound, and the only way around this is to either store less stuff in memory (this is unacceptably slow for the same reasons regarding page faulting that Jon mentioned)

00:27:47   or to put the memory somewhere else, which is basically the idea the Ask ATP question was considering.

00:27:52   The general rule of thumb is, remote memory is faster than local disk. Like any other level in the cache hierarchy, it works pretty well if there's stuff you need to access all at once, before then moving on to another batch of stuff to access all at once.

00:28:03   If you need to go pointer chasing through gigabytes of memory, on the other hand, this is not likely to play nice.

00:28:08   If you'd like to read more, here's my own paper from 2016, and we'll put a link in the show notes to that, that makes the use of the 'swap device' trick, and there are a couple other papers we'll link.

00:28:17   There's a Google paper that uses far memory in the sense of compressed pages in the same machine.

00:28:23   Mac OS does this, since it was called Mac OS X has done this, I think if you go into Activity Monitor you can look and see which pages are compressed. There's a way in Mac OS to see which memory is compressed, but Mac OS does this because it is faster and cheaper to compress and decompress the memory as it goes into and out of RAM than it would be to not do that and let it spill over into swap.

00:28:47   Because like I said, once you hit swap, you're not reading memory from a memory bus anymore, now you're asking the operating system to run a whole bunch of code that invokes the I/O subsystem that reads from disk that goes through the disk driver and it's just so much slower.

00:29:00   So you would think, isn't that going to be incredibly inefficient to run compression routines when you're reading and writing data from RAM? That turns out to be the most optimal path and that's what Mac OS does for I think pretty much all memory, but like I said, I think there's a way you can tell in the OS which pages are compressed or whatever.

00:29:16   And there's also another paper that tries to figure out how much performance gains there are to be had by using techniques like this.

00:29:23   So the idea of far memory is fun, but it really is not particularly relevant to personal computers because they're talking about a data center with tons and tons of machines in them and you're basically using RAM that is not installed on your computer, it's installed on the computer three racks over, sort of just collecting all that RAM together as one giant pool.

00:29:42   Sounds cool, probably not relevant to the Mac Pro though.

00:29:46   Probably not.

00:29:47   Alright, in the last couple of days as we record this on a Sunday night, which is a little unusual, we got some news that Apple is in the App Store are going to require developers to describe why their apps use certain APIs. This broke just a couple of days ago.

00:30:02   I don't think it was breaking news. I think they said this at WWDC but nobody noticed because it was one of those sessions that's boring and nobody looks at.

00:30:09   It seemed to come out of nowhere.

00:30:10   Yeah, I thought it came out of nowhere.

00:30:11   I vaguely recall, because it's in a WWDC session, so it was there and I think I watched some of that session, I think I recall seeing this but I kind of didn't pay much attention to it.

00:30:21   But because it's been a story on "mainstream Mac websites" now people are noticing again. So it's not actually news news, but I think what has happened is that the thing they talked about at the WWDC session is now a real thing that you can do.

00:30:34   So that's the news. They talked about it at WWDC but I think it didn't ship until the latest version of Xcode 15 that's out now.

00:30:40   Yeah, so we'll put a summary from 9to5Mac in the show notes and I believe this is quoting from there.

00:30:47   "As detailed on the Apple developer website, some APIs are now classified as 'required reason APIs.'

00:30:53   This means that in order to use them in an app, the developer must describe to Apple the purpose of that API in the app.

00:30:58   The company explains that the measure aims to crack down on fingerprinting, a technique for tracking users across different apps and websites."

00:31:05   So if you look at the documentation for this, which will be linked in the show notes as well,

00:31:09   and I started looking through this the other day when this came out, "File timestamp APIs."

00:31:13   Well, I'm not entirely sure how that gets to fingerprinting, but okay, whatever, that's fine.

00:31:18   "System boot time APIs." Okay, well that makes sense.

00:31:21   "Disk space APIs." I can get behind that, yep, sure.

00:31:24   "Active keyboard APIs." You know, what languages are accessible to the user? Yeah, that makes sense.

00:31:29   "User defaults?" What? And so very, very at the very bottom is "user defaults."

00:31:36   Now if you're not an iOS developer, user defaults is the, I would describe it as like the default place to,

00:31:41   that's overusing the word, this is the standard place to store little chunks of information like the user's preferences for things and stuff like that.

00:31:50   Yeah, in fact, on Mac OS, if you look in the library folder and you have a preferences subfolder of that,

00:31:55   and you have all those like, you know, com.domainname.whatever.plist files, that's where user defaults are stored on the Mac.

00:32:02   It's that for iOS, basically, and it's a similar storage mechanism there, you just don't see it,

00:32:08   but it's like those little plist files that have little bits and pieces of preference data usually.

00:32:12   Yeah, and plist meaning property list, it's basically an XML, you know, kind of equivalent of JSON sort of kind of.

00:32:18   And when we say preferences, though, we mean like any app that has any kind of setting, do you want light mode or dark mode?

00:32:24   You know, what do you want your default homepage to be in your web browser? What's the minimum font size?

00:32:29   Like literally any setting, if you go into settings and there's a checkbox or radio on or whatever,

00:32:33   on pretty much any Apple platform, you can store that however you want, but in practice, everybody just uses user defaults

00:32:41   because it is a system provided framework that is tailored to exactly that job.

00:32:45   You're not storing huge amounts of data, it's just settings, just individual settings,

00:32:49   just so you know like which checkbox they checked, which thing they picked from whatever.

00:32:53   Yep, and so basically every iOS app uses this. I mean, I am but a small sample size,

00:32:59   but all of my apps use it for just a handful of little switches and bits and bobs here and there.

00:33:04   It's nothing particularly interesting or exciting, but that's the obvious place to turn.

00:33:09   And so now we need to justify the use of something that basically every damn app on the planet uses.

00:33:15   And I'm not entirely clear, and maybe you two can shed some light on this,

00:33:20   how or why it is that user defaults they feel is privacy risky or maybe privacy leaking,

00:33:27   but it seems at a glance, not having thought too much about it yet,

00:33:32   it seems an odd choice to enforce this upon iOS developers because, again,

00:33:38   pretty much every iOS developer touches user defaults for at least one or two pieces of data.

00:33:43   Yeah, that's why this has become a story because like, okay, so you have to give a reason

00:33:48   why you use a bunch of these APIs that use fingerprinting, and it's an example of bad actors ruining it for everybody

00:33:52   because bad actors use things like how much free disk space you have and, you know,

00:33:56   in the web browser world they used to use what fonts you had installed,

00:33:59   like all sorts of clever ways to track you without using cookies in the web world or like the same thing in iOS.

00:34:04   They need something to uniquely identify you, and so they try to combine a bunch of information

00:34:09   that they think the combination of which will uniquely identify you,

00:34:13   and that's what these APIs are getting restricted.

00:34:15   And that's a bummer, but like, yeah, we understand bad actors ruin it for everybody.

00:34:20   We got to do this thing.

00:34:21   But once they threw user defaults in there, that's basically saying that to a reasonable approximation

00:34:26   every developer will have to create one of these required reason APIs things.

00:34:33   This thing in Xcode, you just create a little document, then you got to enter which APIs you use.

00:34:37   It's all manual. You're just sort of reporting, saying, I use one of these APIs.

00:34:42   Here's the API I use, and here's the reason I use it.

00:34:45   And Apple has reason codes that say, okay, if you use these APIs, here are the valid reason codes for you.

00:34:50   And this is all supported in Xcode.

00:34:52   You make the little p list. You tell which API you're going to use.

00:34:55   You get a little pop-up menu, pick from one of these reasons.

00:34:58   So user defaults, there is but one valid reason.

00:35:02   It's CA 92.1. They all have little codes, right?

00:35:06   CA 92.1, this is what it says.

00:35:09   Declare this reason to access user defaults to read and write information that is only accessible to the app itself.

00:35:15   This reason does not permit reading information that was written by other apps or the system

00:35:20   or writing information that can be accessed from other apps.

00:35:23   That may sound reasonable to you, because it's like, okay, well, you know, I'm starting preferences for my app.

00:35:28   But the thing is, when I read this, I said, the one and only reason that you're allowed to use user defaults

00:35:34   does not cover either one of my two apps that use user defaults,

00:35:39   because my two apps that use user defaults use a feature supported by Apple called App Groups,

00:35:44   where you can -- if you have two apps made by the same developer,

00:35:47   you can say these are both members of the same app group,

00:35:51   and that allows them a shared pool of user defaults that is shared between the two apps.

00:35:56   If you have some setting that's relevant to both of them,

00:35:58   or if you want one app to know about the settings of another app while still, you know,

00:36:02   honoring sandboxing and all that, you can use shared user defaults.

00:36:06   CA 92.1, the one and only reason you're allowed to use user defaults, does not allow this.

00:36:10   It explicitly says, "Read and write information that is only accessible to the app itself," and that's not true.

00:36:15   Both of my apps write to shared user defaults.

00:36:18   They do have their own separate user defaults, but they both write to shared user defaults.

00:36:21   So what do you do if you're in a situation like mine?

00:36:24   Well, Apple has a process that says, hey, if you want to use one of these APIs

00:36:28   and one of our existing valid reasons doesn't cover your thing, you can ask us.

00:36:33   Here's the wording they say. It says, "If you have a use case that directly benefits users

00:36:37   and isn't covered by an existing approved reason for one of the APIs,

00:36:40   complete and submit this form." And here's what the form asks you, and I filled out this form.

00:36:44   It says, "Describe your use case," and that's just a text field.

00:36:47   So I basically said I've got two apps. They have shared user defaults using app groups.

00:36:51   I didn't say, "Which is a feature you offer, Apple?"

00:36:54   Like, I don't know what they're thinking.

00:36:56   I think a lot of things use app groups or whatever.

00:36:58   And then it says, "Does your use case require your app or third-party SDK

00:37:02   to send information derived from this API off the device?"

00:37:04   No, I answered no to that. I'm not sending any information off devices

00:37:07   just for these two apps that share stuff.

00:37:09   "Does your use case directly benefit people using the app on the device?"

00:37:13   This is their kind of way of saying, are you using it for advertising?

00:37:15   Because the answer to that would be no, right?

00:37:17   So I said, yes, it does directly benefit the user because I'm not like --

00:37:21   it's not for advertising. I'm not tracking people.

00:37:24   I'm using this to implement my features.

00:37:25   Next question.

00:37:26   "How does the use case directly benefit the people using this app on the device?"

00:37:30   And that's a free text field.

00:37:32   So I explained at length, here's what I'm storing, here's why I'm storing it.

00:37:37   This is what it does.

00:37:39   There are certain features that I have to use this system to implement.

00:37:42   I didn't say -- and by the way, the reason I have to use this system

00:37:45   is every other avenue of cross-application communication

00:37:48   is closed to me because of sandboxing.

00:37:50   Anyway, next question.

00:37:53   "Can your use case be implemented without using this API category?"

00:37:57   And I had to say, I don't think so.

00:37:59   I tried basically everything that's available to me.

00:38:01   I mean, technically I could use an API that's like ten times slower,

00:38:05   but you feel it.

00:38:07   Like my use case is my apps need to know what the other is doing

00:38:10   so when you click somewhere, so they don't fight with each other

00:38:14   and so they know what each other thing is doing.

00:38:16   Like when you click to change to a different application,

00:38:19   either by clicking on a window, which front and center would notice,

00:38:22   or by clicking on an app icon in the Switch Glass app switcher,

00:38:25   which Switch Glass would notice, it has to happen instantly.

00:38:28   People don't want even like a ten millisecond extra lag

00:38:32   when they click on a window before it switches applications.

00:38:34   It has to be instant.

00:38:36   And so I have to have my applications essentially already know

00:38:38   everything about each other because they share these user defaults.

00:38:41   I don't read the user defaults in response to a click.

00:38:43   My apps already know, they already have in local memory

00:38:46   the information they need to make the decision instantly.

00:38:48   So that's what I wrote for this thing.

00:38:50   So this is, can your use case be implemented without using the API category?

00:38:53   Yes, no. I said no.

00:38:55   And it says, please explain why, and text field, and I explained.

00:38:58   And I did all this and wrote this whole big thing up

00:39:01   and saved it off to the side because these web forms

00:39:03   don't save your information anywhere.

00:39:05   So you better write in a text document first.

00:39:07   I'm like, just like, I can't believe I'm writing to justify

00:39:10   the existence of my dinky little applications that do almost nothing

00:39:13   because I dare to use app groups and share settings.

00:39:17   And then some kind person in one of the slacks that I'm in said,

00:39:19   oh, by the way, you know this doesn't apply to the Mac, right?

00:39:23   Nice.

00:39:25   And I said, no, I didn't know that.

00:39:27   So here's this note from an Apple URL.

00:39:30   It says, you only need to supply the NSPrivacy access to API types,

00:39:34   which is that plist thing, for apps and third-party SDKs on iOS,

00:39:38   iPadOS, tvOS, VisionOS, and watchOS.

00:39:41   So finally, the Mac being ignored pays off because that doesn't list macOS.

00:39:47   And so I guess I don't need to do all that.

00:39:50   But that said, even if I had known this beforehand,

00:39:53   I still would have filled out that form because I am paranoid

00:39:55   they're going to say, oh, yeah, and of course, macOS,

00:39:57   we just forgot to list it.

00:39:59   And I think this is, like, the reasons.

00:40:01   I think shared user defaults in an app group should be a valid use case.

00:40:06   Now, I understand how it can be abused.

00:40:08   Everything can be abused because -- and we'll talk about this

00:40:10   in a little bit, like Steve Trout and Smith wrote in

00:40:12   to give us some examples of how user defaults can be abused.

00:40:15   But shared user defaults using app groups,

00:40:19   that's not as common as just plain user defaults.

00:40:21   But I have to think it's pretty common.

00:40:23   Developers that have more than one app often want to share

00:40:26   small bits of information among the suite of applications

00:40:29   so they can interoperate, and so there's, like, synergy for using them.

00:40:32   That's why I do it, so my apps know about each other,

00:40:35   and if you run both of them so they don't fight with each other,

00:40:38   they synergize to provide -- you know, cooperate with each other

00:40:42   to provide the behavior that you want.

00:40:44   Could that be used to share information?

00:40:46   Oh, this app gets some information and then shares it with the other thing?

00:40:48   Yeah, of course, but, like, there's a million ways to do stuff like that,

00:40:51   especially if your goal is just to exfiltrate information

00:40:53   that you don't need the, you know, millisecond --

00:40:56   you don't want to shave milliseconds off like I do

00:40:58   when I'm trying to provide a responsive experience.

00:41:01   So I think they should add another reason that says, you know,

00:41:05   CA92.2 that says I'm sharing user preferences among apps

00:41:09   in an app group from the same developer.

00:41:11   And I took great pains to explain, like,

00:41:13   this is what I'm sharing.

00:41:14   I'm sharing serialized NSREX,

00:41:16   which is just a series of floating-point numbers,

00:41:18   literally X, Y with height.

00:41:20   That's it, floating-point numbers, which are -- what do they correspond to?

00:41:24   The placement of my own app's user interface on the screen,

00:41:27   and I'm sharing a single integer,

00:41:29   which is the front and center behavior setting,

00:41:32   which is either a one or a two.

00:41:33   That's not personally identifiable information.

00:41:35   I'm not exfiltrating your contacts.

00:41:37   It's a bunch of floating-point numbers and an integer,

00:41:39   and I just want to share them among two of my own applications,

00:41:42   and there's no reason for that.

00:41:44   So I'm glad it doesn't apply to Mac OS,

00:41:46   but I'm also glad that I filled out the form.

00:41:48   Thank you for your service, John.

00:41:50   Yeah, so, you know, it's kind of an interesting policy type

00:41:54   that Apple has here.

00:41:55   So, you know, whenever Apple has reason to tighten security

00:42:00   for privacy reasons or for security reasons, you know,

00:42:03   they're kind of intertwined sometimes,

00:42:05   but whenever they want to tighten security and privacy,

00:42:08   they basically have two ways that they --

00:42:10   two tools at their disposal.

00:42:12   One is they can use technical measures

00:42:14   to just close whatever door is opened.

00:42:17   So in this case, you know, if people are using certain APIs

00:42:20   to try to fingerprint the user, and as I mentioned,

00:42:23   you know, the important distinction here is, like,

00:42:25   what fingerprinting is for is for, you know, say, Facebook

00:42:29   to be able to track your usage of different apps

00:42:32   and different websites at different times

00:42:34   to make sure that you are the same person

00:42:36   going through all these different requests and apps

00:42:38   and usage and everything

00:42:39   so they can tell whether their ads worked.

00:42:40   So they can, like, you know, associate a purchase

00:42:42   down the road with an ad you saw, you know, last week

00:42:44   or whatever.

00:42:45   It's that kind of thing is the most common use

00:42:48   for fingerprinting.

00:42:49   And so what they need is a way for their ad platform

00:42:54   and stuff to identify you are the same person

00:42:57   both when you come from, you know,

00:42:59   when you're using your phone in, you know, app XYZ over here,

00:43:03   and then later on, you go to the Facebook website

00:43:05   using the same phone or use the Facebook app

00:43:07   on the same phone and you buy a product or something.

00:43:10   So they're trying to associate to make sure

00:43:13   that they're talking to the same person in all those places.

00:43:15   And the only ways to do that are super creepy

00:43:18   and privacy invasive, and that's basically

00:43:19   what tracking is based on.

00:43:21   And so people figured out a long time ago,

00:43:24   as John was saying, like, you know,

00:43:25   if you can look at certain unique properties of the device

00:43:29   that tend to narrow it down really, really far

00:43:32   and can pretty much guarantee that, like,

00:43:34   it's one person as opposed to a bunch of people.

00:43:37   So what you do is you combine different data points.

00:43:39   So you say, all right, well, a device that had, you know,

00:43:42   this number of bytes of free space

00:43:45   and this battery percentage at this time,

00:43:48   then a minute later we have on our other app

00:43:51   another device that had that exact same battery percentage

00:43:54   and that exact same number of bytes free

00:43:56   or a very close number of bytes free,

00:43:58   it's probably the same person.

00:43:59   And so Apple can go and say, all right, you know what,

00:44:02   this battery percentage API,

00:44:05   we don't actually need to report the super precise

00:44:08   battery percentage that people have on their phones to apps

00:44:10   'cause apps don't need to know that you have 97.537% battery.

00:44:14   They just need to know that you have a lot of battery.

00:44:16   - They can also do what the web browsers do, which is lie.

00:44:19   Web browsers, this is an old hat in the web browser world,

00:44:21   the web browsers used to have all sorts of APIs

00:44:23   for determining things like, you know, again,

00:44:25   what fonts you have installed or free space

00:44:27   or your ethernet address,

00:44:29   and pretty much every modern web browser,

00:44:31   those APIs exist, but they return either garbage data

00:44:35   or random data.

00:44:37   Like they don't even, like they're no longer useful at all

00:44:40   for the purpose of, they're supposed to be there.

00:44:43   They can't remove the APIs, but this is essentially this

00:44:45   because they would break web pages and stuff.

00:44:47   This is basically like removing them though.

00:44:49   And I think Apple does it with battery percentage too.

00:44:51   Not only is it imprecise, I think--

00:44:52   - They do, that's why I use that example.

00:44:54   - Yeah, I think it fuzzes it.

00:44:55   I think it's like, oh, it's an integer value

00:44:57   and we might plus or minus it by one every once in a while.

00:45:00   But yeah, but web browsers is like, no,

00:45:02   the number we give you has no relation to the battery thing

00:45:04   and it's random every time you pick it.

00:45:06   It's a real war out there for the fingerprinting stuff

00:45:09   because it's a cat and mouse game.

00:45:11   Every time someone, you implement one of these technical things,

00:45:15   like you can't actually remove all the APIs from the system

00:45:18   because people do sometimes need to know things

00:45:20   like how much free disk space there is.

00:45:21   For example, an application that's about to write a file,

00:45:23   this is one of the valid use cases,

00:45:25   it might want to say, hey, you're about to save this file,

00:45:28   but before I save it, I checked if you have enough room

00:45:30   on your disk and you don't.

00:45:32   So you can't save it because you don't have enough disk space,

00:45:34   you should delete some stuff.

00:45:36   That's a good application saying,

00:45:37   I'm not just gonna try to write it

00:45:38   and then fill up your entire disk

00:45:39   and then have an IO error and put up an ugly dialogue.

00:45:42   I'll preflight it and say, you don't have enough space.

00:45:45   So that's a valid reason.

00:45:47   So they can't get rid of the free space API

00:45:50   or make it lie like in a web browser where it's like,

00:45:52   you have a billion bytes free or whatever,

00:45:54   just a random number.

00:45:56   So they need some other solution besides the technical

00:45:59   because the technical is always gonna be cat and mouse.

00:46:01   Every one of those you can actually close,

00:46:03   they'll come up with something else

00:46:04   because they're highly motivated by money

00:46:06   to find a way to fingerprint you.

00:46:08   - And actually, the free disk space is a good example

00:46:12   because I'm gonna have to request that exception for my app

00:46:15   because before Overcast performs a sync

00:46:18   and starts downloading new episodes of a podcast,

00:46:20   it checks, hey, is there at least 100 megs of free space?

00:46:24   Something that I can be reasonably sure,

00:46:26   I'm not gonna fill up the disk by doing this

00:46:28   'cause bad stuff happens when you fill up a disk.

00:46:30   Anyway, so they have methods like this

00:46:33   where they can say, all right,

00:46:34   technically, we can close this hole in some way.

00:46:37   So we can either fuzz the API so that it's still there

00:46:40   but it returns data that's so imprecise

00:46:43   or so generic or so generalized

00:46:46   that many people with a given other set of circumstances

00:46:50   will have the same value responded here.

00:46:52   So that would be like, I know a while ago

00:46:55   with the battery percentage API,

00:46:56   they just rounded it to the nearest 5%.

00:46:59   So you'd have 85% and then you'd have 80% later.

00:47:03   So it was just rounded to the nearest five

00:47:04   and I don't know what they do now,

00:47:05   I haven't looked at it recently, but that's one example.

00:47:08   Other examples are like, a long time ago,

00:47:11   you could get the MAC address

00:47:12   of various network interfaces of the device

00:47:15   and of course, that's a pretty firm unique identifier.

00:47:17   That was like the dream identifier for these people.

00:47:20   And so what they did was they modified the API

00:47:23   to return all zeros for all MAC addresses

00:47:25   that you get in iOS.

00:47:27   But you can start thinking, by looking at this list,

00:47:30   you can see there's other things

00:47:31   that make it hard to fuzz.

00:47:32   Anyway, so method number one is fuzz the data

00:47:36   or make the API return bad or no data

00:47:38   and that closes the hole that way.

00:47:40   Or option two, they make you pinky swear.

00:47:45   (laughing)

00:47:46   So and you see like all of iOS and I mean,

00:47:50   all of Apple's modern platforms

00:47:51   are some combination of these things,

00:47:52   but iOS security is based upon a certain level

00:47:56   of technical security and a certain level of pinky swearing.

00:48:00   The problem is when you put these APIs

00:48:03   on the pinky swearing side,

00:48:05   I think that's where we start to see inconsistent enforcement.

00:48:09   We start to see people having pretty strong reasons

00:48:12   to just kind of, you know, little white lie

00:48:14   and just game the system

00:48:15   and you see the same thing with the privacy nutrition labels

00:48:18   in the app store,

00:48:19   there's a lot of kind of fuzzing required there.

00:48:21   And I remember I was talking to some Apple people

00:48:23   when they announced the privacy label thing

00:48:25   and I was asking like,

00:48:27   what's gonna stop people from just lying?

00:48:30   What's gonna stop people from just not filling in

00:48:32   this correctly or kind of BSing it a little bit?

00:48:35   And they said, well, you're making a legal statement

00:48:39   to Apple with this submission and so that's kind of--

00:48:41   - What?

00:48:42   - Like, you know, when you declare that your app

00:48:45   follows these privacy guidelines and uses this information

00:48:48   but not this information

00:48:49   when you're filling out the privacy thing

00:48:51   on App Store Connect,

00:48:52   you are making like a legal attestation to Apple

00:48:55   saying this is what my app does.

00:48:57   So they're kind of relying on good actors

00:49:00   both wanting to do the right thing

00:49:02   but also companies and responsible individuals

00:49:05   trying to make sure that they're not gonna have problems

00:49:07   with Apple later.

00:49:08   And that's all well and good

00:49:09   and that probably does cover a lot of people

00:49:11   and a lot of companies.

00:49:12   But that's not good enough

00:49:14   if you have a technical option on the table.

00:49:16   If you can close these doors technically,

00:49:18   that's way better.

00:49:20   It's the same principles of like, you know,

00:49:22   that the App Store, you know,

00:49:24   it keeps us safe in some ways

00:49:26   but not quite as safe as Apple likes to promote it as

00:49:30   because App Review is all pinky swear stuff.

00:49:35   It's all, I mean, for the most part,

00:49:37   they can detect certain rule-breaking things technically

00:49:39   but for the most part, all the App Review rules

00:49:42   are very often pinky swear based.

00:49:45   You know, maybe Casey and I, you know,

00:49:47   we won't wanna break the rules.

00:49:48   John will never be in the iOS App Store

00:49:50   so we don't have to worry about that.

00:49:51   (laughs)

00:49:52   So like, we don't wanna make it to the App Store

00:49:54   so we're gonna follow the rules.

00:49:55   But at the really big end,

00:49:57   you have companies like Facebook or Uber

00:49:59   who kind of don't follow the rules a lot of times

00:50:03   or at least try not to follow the rules

00:50:05   because they know like what's Apple gonna do?

00:50:07   Kick them off the App Store?

00:50:09   Probably not.

00:50:10   Like, there are certain companies that are so big,

00:50:12   Apple kinda has to work with them behind the scenes

00:50:15   and be like, "Come on, you gotta do this."

00:50:17   You know, they kinda have to do stuff like that

00:50:18   because they're gonna have a problem with iPhone owners

00:50:21   if like you all of a sudden can't get Facebook on the iPhone.

00:50:24   And then on the very, very small end,

00:50:26   you have developers that either don't know

00:50:29   what these things mean or willfully lie

00:50:31   'cause they don't care.

00:50:32   'Cause what are you gonna do,

00:50:34   kick my developer account at the App Store?

00:50:35   Oh well, I'll make another one with some other random name,

00:50:38   some other random identity or whatever.

00:50:40   So there's like tiny developers and scammers,

00:50:43   outright scammers who don't care at all

00:50:45   about the developer account.

00:50:46   Hence being a scammer, if they can make some money quickly,

00:50:49   they don't care about the longevity of that account.

00:50:51   So you have all these other kinds of actors

00:50:53   that will out of ignorance or willfully ignore

00:50:56   any of these pinky swear kinda rules.

00:50:58   So technical barriers are way better.

00:51:04   So in cases like this, you gotta look and see

00:51:06   why couldn't they make a technical barrier to this?

00:51:09   Why did this thing have to be a pinky swear method

00:51:12   instead of a technical barrier

00:51:13   that would actually be just enforced by the system, period?

00:51:17   And it's interesting, I think, to try to figure out

00:51:20   how could someone use this to fingerprint you?

00:51:23   So if you look through the different APIs,

00:51:26   it's kind of genius how people would use some of these things.

00:51:29   So like file timestamp APIs, creation date, modification date,

00:51:33   I'm guessing, again, I'm not an expert in this area

00:51:37   of how people fingerprint people,

00:51:38   but I'm guessing these were used to check

00:51:41   maybe certain creation dates of system files

00:51:45   that for some reason, their directory entry

00:51:48   had to be accessible to apps, to third-party apps

00:51:51   for some reason through the API.

00:51:52   So maybe you could check the modification date

00:51:55   on some file that's installed when the phone is set up,

00:51:59   and then that would basically stay that way for a year

00:52:02   until the next OS update or whatever,

00:52:03   or the next phone was dropped in the toilet

00:52:05   and they got a new one.

00:52:06   That is probably, the file timestamp hole there,

00:52:08   is probably something like that.

00:52:10   So that's why they have to modify that,

00:52:12   or that's why they have to apply pinky swear things to that.

00:52:15   And they can't really get rid of file timestamps

00:52:18   'cause lots of apps use those for good reasons.

00:52:20   So okay, that makes sense.

00:52:22   System uptime, that's really interesting too

00:52:25   because if you take one of these super precise timestamp things

00:52:29   like mock absolute time, you can say, all right,

00:52:32   at this time, I access this API,

00:52:35   and it was reported that there was this kind of uptimes,

00:52:37   then you can kind of back solve from that

00:52:39   to see what was the boot time of the device.

00:52:41   Many people hardly ever reboot their phones,

00:52:44   unless the battery totally dies,

00:52:47   but most people, the uptime on your phone

00:52:50   is usually pretty long.

00:52:52   It's many days, if not weeks or months for a lot of people,

00:52:55   basically until a software update

00:52:57   or until your battery's totally dead.

00:52:58   So you could actually use that to,

00:53:01   at least within a brief window,

00:53:03   fingerprint somebody really accurately to say,

00:53:05   this person, this device has been up

00:53:07   since exactly like this nanosecond,

00:53:09   and that's a pretty clever way to do it.

00:53:12   So okay, that's why, that makes sense.

00:53:14   You'd have to restrict that.

00:53:15   Disk space, similar thing in terms of like,

00:53:19   it is a very precise number.

00:53:21   In this case though, they could probably fuzz this API.

00:53:25   I don't know why the disk space API needs to be

00:53:29   byte accurate necessarily.

00:53:31   I'm sure there's some use cases I'm not thinking of.

00:53:33   - With APFS it isn't, let's be honest.

00:53:35   - Yeah, that's very true.

00:53:37   - The concept of free disk space

00:53:39   has become about as complicated as the concept

00:53:41   of shared memory is on modern Unix things

00:53:43   because there's so much sharing of pages/blocks

00:53:46   between snapshots and the sealed system volume

00:53:51   and swap being changed.

00:53:53   I'm actually kind of surprised that free disk space

00:53:55   is useful for fingerprinting because it's gotta be changing

00:53:57   all the time in response to just little,

00:54:00   turdy files being written and rewritten

00:54:02   and snapshots being made and stuff like that,

00:54:04   but I guess that's just one ingredient in the giant stew

00:54:07   that's trying to define your unique identity.

00:54:10   - I mean, I'll tell you what, having used,

00:54:13   my app has checked free disk space for years

00:54:16   before syncs and before downloading files

00:54:18   for the reason I mentioned,

00:54:20   and that API is incredibly unreliable.

00:54:22   Oftentimes I will check it, it will return free space,

00:54:26   I'll download the file and all of a sudden,

00:54:28   oh, you're out of space, it's full, I can't do it,

00:54:30   I don't know what you're talking about,

00:54:31   why'd you even try?

00:54:32   Other times it'll say there is no free space,

00:54:35   but there is free space.

00:54:37   So it is, I find that very unreliable

00:54:40   and in fact maybe I'll just stop using it

00:54:42   instead of filling out my reason code here.

00:54:45   Anyway, active keyboard APIs is the other one.

00:54:48   Honestly, I don't know anything about this.

00:54:50   - I think it's because if you have

00:54:53   only English and Italian installed,

00:54:56   then they can know that,

00:54:57   oh, you're probably Federico Fatici.

00:54:59   Or, you know, it's, not literally of course,

00:55:01   but it's one of those components,

00:55:04   like, oh, you only have English and Italian installed

00:55:06   and your uptime started at 2.15 in the morning

00:55:10   six weeks ago, you know, put those two together

00:55:12   and suddenly you're Federico Fatici,

00:55:14   you know what I mean?

00:55:15   It's that sort of a thing.

00:55:16   - Yeah, I feel like it's like rough geolocation,

00:55:18   like because you probably have some combination

00:55:20   of keyboards available and you're gonna have

00:55:23   your native language and then the emoji

00:55:25   and then maybe a swipe keyboard.

00:55:27   It's just another setup about your phone

00:55:29   that might be not unique to you,

00:55:31   but it's one more ingredient, pinpoint,

00:55:33   one more degree of specificity.

00:55:37   - Then that leaves us with user defaults.

00:55:39   And this, as mentioned, this is a core API

00:55:43   for lots of things.

00:55:44   And so you have to wonder,

00:55:46   how are people using user defaults

00:55:49   to do accurate fingerprinting?

00:55:51   Because between different apps from different vendors,

00:55:53   you don't have a shared sandbox.

00:55:55   I don't really have a good idea about this,

00:55:58   but our friend Steve Trout and Smith

00:55:59   actually posted a pretty interesting

00:56:02   bit of information on this.

00:56:04   So Steve says, user defaults has always been

00:56:06   a silent exfiltrator of private data.

00:56:08   Every framework your app can access,

00:56:10   photos, music, safari, telephony, et cetera,

00:56:13   generally needs access to its own user default store,

00:56:16   which left tons of side channels

00:56:18   for any app to pick up things like

00:56:20   phone number, email address, real name,

00:56:21   recent photo searches, et cetera,

00:56:23   without any kind of permissions prompt.

00:56:25   Any library you include in your app,

00:56:27   like analytics packages, can then yoink all of this

00:56:29   without you, the app developer, knowing about it.

00:56:30   And in fact, Steve Trout and Smith

00:56:32   has actually had credit in some of Apple's security,

00:56:36   he linked it to a Apple security note

00:56:38   with one of the updates that closed

00:56:41   a security vulnerability that he found and reported to them

00:56:43   that was related to this.

00:56:44   So basically, I think the way this works,

00:56:47   suppose you have an app that reads

00:56:49   from the music library in some way.

00:56:52   The framework that you're accessing,

00:56:53   unless it's running through an XPC service,

00:56:55   which many of these things aren't,

00:56:57   the framework that you're accessing

00:56:58   has to be able to read its own user defaults stuff.

00:57:03   But it's reading it from your app

00:57:05   if you're using the framework directly, not through XPC.

00:57:08   I think what this would mean is

00:57:10   if that framework is not super careful

00:57:12   about what's stored in that user default store,

00:57:15   then any app can read the music preferences

00:57:19   that are exposed through the music library frameworks

00:57:21   or whatever.

00:57:22   - Or they can find it in memory.

00:57:23   If you're in the same process,

00:57:24   you can do all sorts of sneaky things

00:57:26   to wiggle your way down to some piece of memory

00:57:29   that the music framework, because it's Apple's framework,

00:57:33   but it's in your memory image of your process,

00:57:35   and it just did something and put something in memory,

00:57:38   and your program has access to that memory

00:57:40   because it's your process,

00:57:41   and so you can sneakily find it.

00:57:44   That's actually very difficult to pick up

00:57:45   with static analysis

00:57:47   because it's kind of the halting problem

00:57:48   to detect when someone is worming their way over

00:57:51   to some piece of memory loaded by some framework

00:57:54   at runtime, right?

00:57:55   So this is a thing where technical barriers,

00:57:58   I mean, they would have to put everything in XPC

00:58:00   to sort of make it so it's not in the same process,

00:58:02   but that's difficult to do,

00:58:03   and sometimes there's efficiency things

00:58:05   that make that inadvisable,

00:58:08   so they need to go pinky swear here

00:58:10   because there is no other way to stop,

00:58:12   no other way to check if an app is doing this.

00:58:16   - I think it makes sense why they added user defaults

00:58:22   to this list,

00:58:23   but I also think that's gonna be a mess

00:58:26   because everything uses user defaults.

00:58:29   - Yeah, I mean, basically, it just means every app.

00:58:31   I almost feel like they should have, in Xcode,

00:58:33   should have just defaulted every single application

00:58:36   to say I use user defaults

00:58:37   and I use it for the one valid reason code.

00:58:40   - There's even like built in,

00:58:41   like there's an app storage property wrapper

00:58:45   in Swift UI that's used all over,

00:58:46   that uses user defaults.

00:58:47   So many things use user defaults.

00:58:50   So much of Apple's guidance,

00:58:52   so much of their sample projects,

00:58:53   so many commonly used features and tasks

00:58:56   are backed by user defaults

00:58:58   even if you don't even realize you're using it.

00:59:00   So it's gonna be almost every app

00:59:02   that does pretty much anything.

00:59:04   - Although I think, speaking of app storage and stuff,

00:59:07   I think what they mean by this little list

00:59:09   is you have to actually type the word user defaults

00:59:12   in your code.

00:59:13   So even though app storage uses it,

00:59:14   I don't think that would count as you using user defaults.

00:59:17   I think you actually have to have the code yourself.

00:59:19   So like you don't get dinged

00:59:20   because the music framework uses it or whatever.

00:59:22   I think it has to be directly in your code.

00:59:24   But like I said,

00:59:25   that's like any app that has any settings

00:59:28   uses user defaults.

00:59:29   Aside from some weird cross-platform electron type things,

00:59:33   Marco, even when you had the magazine

00:59:34   and the app had no settings,

00:59:35   I bet you still use user defaults.

00:59:36   - Of course I did

00:59:37   'cause it isn't just settings, it's state.

00:59:39   That's a common place to store little bits of state.

00:59:42   Does the user have this panel expanded

00:59:44   and then next time you launch the app,

00:59:45   you wanna re-show it with the panel expanded?

00:59:48   It's every little bit.

00:59:50   - That's what I'm saying,

00:59:51   that every single iOS developer

00:59:53   is going to have to create this little file

00:59:55   and put this reason code into the user defaults.

00:59:57   They may need to do additional things

00:59:58   but pretty much everyone needs to do this.

01:00:00   And it's not that big a deal to do this

01:00:03   but it's what happens when,

01:00:05   let's say bad actors ruin everything for everybody.

01:00:07   Oh, now the entire process of app development

01:00:09   has one more little annoying thing.

01:00:11   Why?

01:00:12   Because of bad people.

01:00:13   Because of people abusing these APIs

01:00:14   and we all have to pay the price for it

01:00:16   by dutifully filling out one more form

01:00:19   that says yes, we are allowed to have an app.

01:00:22   - In the user defaults case,

01:00:23   I think Apple needs to work harder

01:00:25   to make this not necessary for us to do.

01:00:27   By modifying the systems, by modifying the APIs,

01:00:30   by maybe only requiring it for certain types of edge cases

01:00:33   like shared group containers.

01:00:35   There are certain,

01:00:36   you could only require it for certain parts of the API

01:00:40   that most legitimate use wouldn't even go near.

01:00:43   So there's ways to do this that,

01:00:46   'cause what they're doing right now

01:00:47   is they're gonna make a mockery

01:00:49   of the user default example here

01:00:50   because as you said, everyone's going to add this,

01:00:54   add that little permission code.

01:00:56   It says yes, I swear.

01:00:57   It's just like, suppose when you were a 17 year old

01:01:02   trying to look at pictures of things on the internet

01:01:06   you weren't supposed to be looking at

01:01:07   and there'd be a link that says

01:01:09   click this link if you're over 18.

01:01:11   I mean, come on.

01:01:12   That doesn't do anything, right?

01:01:14   These attestations for user defaults

01:01:17   are gonna do nothing because every single developer,

01:01:21   they're gonna run into a problem

01:01:23   where maybe if you upload the binary to App Store Connect

01:01:25   and it detects user defaults,

01:01:28   you don't have this in, it'll reject it.

01:01:30   So whatever phrase it says on that rejection,

01:01:32   people are gonna paste that into Google or Stack Overflow

01:01:35   and they're gonna find,

01:01:36   oh, you gotta add this one P-list entry with this,

01:01:39   the P-list entry is CA 92.1.

01:01:42   This doesn't mean anything.

01:01:44   They're gonna see this and they're gonna just copy and paste,

01:01:47   okay, I gotta do this to submit it, then it works.

01:01:49   That's it.

01:01:50   No one's gonna understand what this means.

01:01:51   - I think their plan is not to reject

01:01:53   based on this initially.

01:01:54   I think there's some sort of period of either six months

01:01:56   or a year where they're just going to yell at you about it,

01:01:59   but then they're gonna start rejecting

01:02:00   if you don't do the correct pinky swearing.

01:02:03   So they have a phased program to try to get people used to it.

01:02:07   So you're not gonna immediately be rejected by this,

01:02:09   but you're just gonna get scolded,

01:02:10   and hopefully that will get you to Google it

01:02:13   and enter it or whatever.

01:02:14   But that's why I'm saying Xcode projects,

01:02:16   like the sample project,

01:02:17   when you start a new project and you pick the API,

01:02:19   it should just include this by default

01:02:21   'cause you're gonna use user defaults, right?

01:02:23   And so just declare the reason

01:02:25   'cause the reason is so limiting.

01:02:27   Like I said, they need to add another reason

01:02:28   for shared app groups 'cause that is a supported feature.

01:02:31   But yeah, I mean, if they're really looking for this,

01:02:35   it's so weird to be how it described as like,

01:02:38   well, now we kind of quote-unquote have it in writing

01:02:41   that you said you were doing X,

01:02:42   but really we found out you're doing Y.

01:02:44   Why, Apple?

01:02:45   You can reject any app for any reason, and you do.

01:02:48   - And fingerprinting is already against the rules.

01:02:51   - Yeah, but the whole point is like, in case we get sued,

01:02:55   like good luck suing Apple for rejecting your app.

01:02:58   I think a couple companies have tried that

01:02:59   and it hasn't worked out well for them.

01:03:01   Thus far, the courts have said,

01:03:03   yeah, Apple can do whatever it wants with its own app store.

01:03:06   So it seems weird to me that they were like,

01:03:08   oh, we wanna have some legal cover here

01:03:10   'cause we can say, well,

01:03:12   you said you were only using your defaults for this,

01:03:14   but actually you were sneakily doing that.

01:03:16   So we're allowed to reject you.

01:03:17   You can reject them for whatever reason you want.

01:03:20   You can reject them 'cause you don't like their face.

01:03:22   Like it's, you know, so it's so weird that they want this,

01:03:26   but I kind of understand, like it's kind of like the rules

01:03:29   for the developer kit for Vision Pro or whatever.

01:03:32   You just wanna say, hey, you said that you agreed to this

01:03:36   and you said you were gonna do these things.

01:03:37   So basically if we decide to bring the hammer down,

01:03:41   it's so easy to find a violation.

01:03:43   And I feel like lots of good actors

01:03:45   are gonna not properly fill out the pinky-swear form

01:03:48   and their apps are gonna technically be in violation

01:03:51   because, oh, they forgot this reason code doesn't cover.

01:03:55   Like for my example, if you just read this quickly

01:03:57   and didn't think about it, you'd be like,

01:03:59   oh, yeah, I'm using the user defaults for the usual reason.

01:04:01   I'll put this reason code in.

01:04:02   My app would be in violation

01:04:04   because I'm actually using a shared, you know,

01:04:06   an app group in a shared container.

01:04:07   And if, you know, maybe you just didn't notice that.

01:04:09   You're not doing anything, you know,

01:04:11   nefarious with user defaults.

01:04:12   You just didn't realize your use case

01:04:14   isn't covered by the thing

01:04:15   and you didn't fill out that big form to get a new use code

01:04:18   or whatever.

01:04:19   So, I mean, this is kind of like all of the entitlement things

01:04:21   where there's a list of entitlements

01:04:23   for doing stuff that you want,

01:04:24   but you can also ask for temporary,

01:04:26   quote-unquote, temporary exceptions.

01:04:27   Some apps have had temporary exceptions for,

01:04:29   it's gotta be close to a decade now, right?

01:04:31   Quote-unquote, temporary,

01:04:32   because they're like an important app

01:04:34   and Apple wants them to exist.

01:04:35   And so here your app can have this temporary exception.

01:04:38   But Apple always says, but you know,

01:04:39   we're not saying every app can do this,

01:04:41   just you can 'cause you submitted a request for it

01:04:44   and we like you and we gave you a temporary exception,

01:04:46   so now you're allowed to send Apple events.

01:04:48   Good for you, but no one else is.

01:04:50   Don't use Apple events.

01:04:52   This feels a little bit like that, so.

01:04:54   I don't know what'll come with it.

01:04:56   Presumably this will be useful for Apple.

01:04:58   It's one more little thing that we have to deal with.

01:05:00   It's not that big a deal.

01:05:01   Again, most of the blame for this is on the bad actors,

01:05:03   not on Apple.

01:05:04   They're just trying to,

01:05:06   they're trying to find a way to make a system

01:05:08   that is less bad.

01:05:09   So I, you know, I feel for Apple in doing this.

01:05:12   It's all the people who have found ways to abuse the system

01:05:16   that are ruining it for everybody.

01:05:18   - Yeah, I feel like any time Apple has some sort of thing

01:05:21   like this come out, we can just ask ourselves,

01:05:24   how did Facebook screw us all this time?

01:05:27   (laughing)

01:05:28   From everything I've understood and can discern,

01:05:31   it seems like at least half the time

01:05:34   this is Facebook doing something shiesty.

01:05:36   (upbeat music)

01:05:37   - We are brought to you this week by Collide.

01:05:40   If you work in security or IT and your company has Okta,

01:05:44   this message is for you.

01:05:46   Have you noticed that for the past few years,

01:05:48   the majority of data breaches and hacks you read about

01:05:51   have something in common?

01:05:52   It's employees.

01:05:53   Hackers absolutely love exploiting

01:05:55   vulnerable employee devices and credentials,

01:05:58   but it doesn't have to be this way.

01:06:00   Imagine a world where only secure devices

01:06:03   can access your cloud apps.

01:06:05   In this world, phished credentials are useless to hackers

01:06:09   and you can manage every OS, even Linux,

01:06:11   from a single dashboard.

01:06:13   Best of all, you can get employees

01:06:15   to fix their own device security issues

01:06:17   without creating more work for IT.

01:06:20   The good news is you don't have to imagine this world.

01:06:23   You can just start using Collide.

01:06:25   Collide is a device trust solution for companies with Okta

01:06:30   and it ensures that if a device isn't trusted and secure,

01:06:33   it can't log into your cloud apps.

01:06:35   Visit collide.com/ATP to watch a demo and see how it works.

01:06:40   That's Collide spelled K-O-L-I-D-E dot com slash ATP.

01:06:46   Thank you so much to Collide for sponsoring our show.

01:06:49   [music]

01:06:52   John, I don't think you need Marco and I

01:06:56   for at least the next 20, 30 minutes

01:06:58   because I hear you're using Photos a lot

01:07:00   and it's time for our annual topic,

01:07:02   the John uses Photos a lot topic.

01:07:04   So what grievances would you like to air today, John?

01:07:07   Yeah, this is the time of year

01:07:09   when I'm back from my beach vacation

01:07:11   and I have literally thousands of photos

01:07:13   to deal with and process

01:07:15   and put out into little albums for people to see

01:07:18   and make my photo book and do all those things that I do

01:07:21   and it is the time of year

01:07:23   when I use the Photos application the most.

01:07:25   Any contact with the Photos application on the Mac

01:07:29   drives me into a rage

01:07:31   and I usually talk about some of it on this podcast.

01:07:34   So here this year I have limited myself to just two things.

01:07:37   There's so much about the Mac Photos application

01:07:40   that I would love to change.

01:07:42   In fact, just this evening

01:07:44   I was ranting to somebody who works at Apple

01:07:47   about the Photos application

01:07:49   and they were giving me some pushback and they said,

01:07:51   "Oh, you mean the Photos application on the Mac?"

01:07:53   I'm like, "Yeah, the real Photos application."

01:07:56   Oh, shots fired.

01:07:58   You can do all the things like add keywords and identify faces.

01:08:01   The application that hasn't been updated in like seven years.

01:08:04   That one. That's the one I'm using.

01:08:06   Because we had this disconnect.

01:08:09   I was like, "But we changed the Photos application all the time."

01:08:12   I'm like, "No, the Mac Photos application."

01:08:14   They'd forgotten it even existed and it feels that way.

01:08:17   So here for this year, 2023,

01:08:19   I have but two things to say to the Photos team

01:08:22   if they're listening.

01:08:24   Honestly, I don't think there is a Mac Photos team.

01:08:26   I don't know if they exist.

01:08:28   I love the server side of people who did share an iCloud photo library.

01:08:31   Awesome job. That's mostly the server side of people.

01:08:33   I guess there must have been some client side people

01:08:35   to do the integration, so fine. That works good too.

01:08:37   The rest of the application is just like untouched.

01:08:40   It boggles my mind that it is untouched.

01:08:42   That's why I'm really targeting this year at two specific things.

01:08:45   One, really, really easy

01:08:48   and one a little bit more difficult.

01:08:50   And I'm setting aside all the other things that I can point out.

01:08:53   First one, I finally broke down and filed this as a feedback this year,

01:08:57   mostly because I thought of the maximally snarky way

01:09:01   to file this feedback, but it's been driving me crazy

01:09:04   for the entire eight years that the Mac Photos application exists.

01:09:07   It was iPhoto before that and it was a little bit different

01:09:09   and I don't remember what it was like back then,

01:09:11   but Photos, when it was called Photos on the Mac,

01:09:13   it has had this problem.

01:09:15   When I edit my photos, pretty much the first thing I do

01:09:19   in any photo that I'm editing is crop it to reframe it,

01:09:23   to, you know, if I didn't get the framing exactly right,

01:09:26   even if I'm just trying to rotate the horizon to be level

01:09:28   because I'm really bad at holding the camera level,

01:09:30   I'm getting better, but, and yes, I do use the thing in the viewfinder

01:09:33   that shows the level, but that's not that accurate

01:09:35   and it's laggy and it's hard to see. Anyway, cropping.

01:09:39   That's move number one before I start adjusting anything.

01:09:43   I don't edit every photo, but I edit a lot of them.

01:09:46   When I crop the photo, what I want to happen is

01:09:50   for the photo to be a some subset of the size that it is.

01:09:54   So here's the entire frame of the photo and cropping means

01:09:56   taking some smaller portion of it and saying,

01:09:58   "No, this is the photo now. Discard everything that's outside there."

01:10:02   When I do that, I don't want the aspect ratio of the photo to change.

01:10:07   So if the aspect ratio is 4x6 or 3x2, when I crop it,

01:10:12   I want to end up with a photo that is still 4x6 or 3x2 or 5x7.

01:10:17   I don't want to change it to some weird aspect ratio for multiple reasons.

01:10:21   One, consistency. I don't want to have photos with all sorts of weird aspect ratios.

01:10:26   Two, if you're going to do prints, they come in standard aspect ratios.

01:10:30   If you try to make a print of this weird long skinny photo or a tall thin one,

01:10:33   like you want them to be print size three.

01:10:36   When you're making books, the book pages come in standard-ish aspect ratios.

01:10:40   You can lay out photos on a page and each of those little rectangles

01:10:42   is usually one of the several different standard aspect ratios for your photos.

01:10:46   I have to think this is common. When you're cropping a photo,

01:10:49   you want it to maintain its aspect ratio.

01:10:52   On photos for the Mac, when you hit the C on the keyboard to crop,

01:10:56   because you're using the keyboard commands because you don't want to keep clicking things,

01:11:00   you have to then say, "Oh, and by the way, when I crop this,

01:11:03   I want it to maintain the original aspect ratio."

01:11:06   And you have to click the word "original" in the sidebar.

01:11:09   And the bug I filed, as FB 127 44158 is titled,

01:11:14   I have clicked original aspect ratio 16,171 times.

01:11:19   Do you really know that?

01:11:21   I counted it using the SQLite database that's in photos.

01:11:24   How many photos do I have that are A, cropped, and B, cropped with the original aspect ratio?

01:11:31   And the answer is 16,171.

01:11:34   Like I heard what you said about the SQLite database,

01:11:36   but they actually have columns for these things?

01:11:39   It's a little bit tricky to find, but you can combine it.

01:11:41   You can do a smart album, and then you can combine it with the data from SQLite to get this answer.

01:11:46   That's a minimum estimate, because sometimes you crop more than once and change your mind.

01:11:51   Sometimes you make it portrait, then landscape, and you decide you want to change the aspect ratio and change it back.

01:11:55   But at minimum, this is what it is.

01:11:57   But this is how many are currently cropped to original aspect ratio.

01:12:01   And every single time I cropped one of those, I had to click original.

01:12:05   Because you know what the default is in photos?

01:12:08   Freeform, which is whatever.

01:12:11   Make it in the aspect ratio you want.

01:12:13   Just grab the corner of the thing and move it.

01:12:15   Now, there are ways around this for trackpad users, PowerBook, laptop users that have trackpads, or Mac users who have trackpads.

01:12:24   You can go to crop and then pinch and zoom.

01:12:27   Then you don't have to click original, because if you pinch and zoom, it will maintain the aspect ratio,

01:12:32   because it'll just zoom the picture from within that.

01:12:34   But that is much less precise, pinching and zooming, much less precise than grabbing one of the corners of the little crop thingy or whatever.

01:12:42   And practically speaking, I don't have a trackpad and I don't like trackpads.

01:12:46   So I'm setting that aside.

01:12:47   So when I did this, because I don't have a trackpad and don't use a trackpad to do my editing,

01:12:52   I clicked original 16,171 times.

01:12:56   That's about a little over 5.2, 5.3 times per day for the past 8 years.

01:13:02   Obviously it's not really like that.

01:13:04   What it's really like is I don't use photos for a long period of time, and then over the course of 3 days,

01:13:09   I click crop aspect original, crop aspect original, crop aspect original thousands of times.

01:13:15   What I would like is for the photos application to declare in their privacy manifest thing or whatever

01:13:22   that they're going to use the user defaults API.

01:13:24   There it is.

01:13:25   And in the user defaults API, they're going to store an integer value that indicates the last aspect ratio

01:13:32   I clicked on when cropping a photo.

01:13:35   And you know how many more times I would have to click original?

01:13:37   Once.

01:13:39   And then every other time I crop, I would hit crop, original would already be selected

01:13:44   because the photos application would have remembered for the past 8 years this person has clicked this 16,000 times.

01:13:50   Maybe they want to crop to the original aspect ratio.

01:13:53   Maybe they can use machine learning to figure it out.

01:13:56   It seems that over the past 16,171 photos this person has cropped, they have chosen original 16,171 times.

01:14:03   What should we select as the default aspect ratio?

01:14:07   I don't know. Send it through the model, see what answer we get.

01:14:10   I just want this one setting to be saved.

01:14:13   How much power can we apply towards solving this one problem?

01:14:16   We can either store an integer.

01:14:18   I'm so tired of clicking this.

01:14:20   Remember that I want it to be original.

01:14:23   Who doesn't want it to be original?

01:14:25   But I don't care. I don't care if I'm literally the only person on the planet who wants the original.

01:14:29   I don't care what you want your default to be.

01:14:31   You could have your default be square. I don't care.

01:14:33   Just remember it.

01:14:35   Remember the default aspect ratio that I have selected somewhere.

01:14:39   Put it as a value and use your defaults.

01:14:41   I'm begging you.

01:14:43   8 years. I haven't complained about this.

01:14:45   I think it mentioned this program.

01:14:47   Does anyone use this application to edit photos?

01:14:51   Do people crop photos?

01:14:53   I don't...

01:14:55   So I found that it's a snarky bug.

01:14:57   I don't apologize for the snark.

01:14:59   It's been 8 years. I want them to remember this setting.

01:15:02   I really hope there's some kind of secret plist that someone's going to tell me.

01:15:05   They just say default's right.

01:15:07   com.apple.photos. Default aspect ratio.

01:15:11   Integer value 5 and it'll just remember original.

01:15:14   But it boggles me. It makes me think that no one uses this program.

01:15:17   Because you can't use it in earnest.

01:15:20   You can't use it to edit a thousand photos without noticing that it does not remember your aspect ratio.

01:15:24   So that is complaint number 1.

01:15:26   I would like, sometime in the next decade, someone to make it remember that I am always going to click original.

01:15:33   Now before you move on to complaint number 2.

01:15:37   Because I'm sure people are going to write it and ask you this.

01:15:40   So I might as well save them the time.

01:15:42   Have you ever considered using some other photo ingesting app to do your initial first pass and basic cropping and everything.

01:15:50   And then dump it into photos to save you some of the steps.

01:15:53   No. Because here's why I'm kind of "trapped" / "happy to be trapped" in photos.

01:15:59   Everything I do in photos is non-destructive.

01:16:01   So when I do that cropping, it's not throwing away the rest of the picture.

01:16:05   Every single thing you do in photos is non-destructive.

01:16:08   I value that a lot because I re-crop. I go back.

01:16:12   Sometimes I do summary books of the past 5 years at the beach or something.

01:16:16   And I will re-edit and re-crop with the wisdom of age.

01:16:19   Or a different taste or whatever.

01:16:22   Everything you do in photos is non-destructive.

01:16:25   Even when you edit an external editor, you can preserve edits or whatever and be able to revert to the original.

01:16:31   So if I use some other program to do the cropping.

01:16:33   I don't know of a way to do that in a way that when I feed it into photos it continues to be non-destructive.

01:16:39   So, complaint #2. This is more complicated.

01:16:43   The other one, by the way, reminds me of the story of the...

01:16:47   I don't know, it's probably apocryphal or whatever it was on Twitter ages ago.

01:16:49   Where someone applied for a job and in their first two weeks on the job they went into the repo for the code.

01:16:56   They fixed some bug that had been bothering them and then they gave the two weeks notice.

01:16:59   Yes!

01:17:01   I think that you just basically... because this is the type of thing where...

01:17:03   I mean, granted, it's kind of a fantasy to think that you're going to spend two weeks fixing this.

01:17:07   Because even if you were a new employee at Apple, it would probably take you six months to get this through the bureaucratic process to be in the thing.

01:17:14   But implementation-wise, it's literally saving a user to fault.

01:17:18   I could implement this in Mac photos if you sent me the source code.

01:17:22   I 100% could do it. I am confident I could do it.

01:17:26   And then you'd have to herd it through the release process and it would come out in Mac OS, you know...

01:17:32   Whatever it is going to be after Sonoma.

01:17:34   If you're lucky, if it isn't already too late to get it into that release, you have to justify it to some high up person.

01:17:39   Like, "Why are we changing Mac photos? We haven't changed that app in eight years.

01:17:42   Is this a strategic thing? Someone wants to add a user to fault? We have too many settings already."

01:17:46   No, no, no. Understand the difficulty.

01:17:48   I understand what it's like in big companies. It's hard to do this.

01:17:51   But technically speaking, I could implement it.

01:17:54   So I should get a job at Apple, fix this, and then quit.

01:17:57   But that seems like a lot of effort. It would be great if someone could just pick up this feedback and just do it.

01:18:02   Second one. Second one is kind of a meta-point that we've talked about before.

01:18:07   But it was really bothering me in this year's run through photos.

01:18:13   For whatever reason, I think it's probably because something was being wonky and I did the thing where you hold down command and option when you launch photos on the Mac.

01:18:21   And it says, "Do you want me to rebuild your photos library?"

01:18:24   I think I did that recently-ish. I'm not sure why.

01:18:28   If that's not the cause, then maybe it's something else.

01:18:31   But every once in a while, the people detection in photos on the Mac loses its way and kind of forgets what you think it once knew.

01:18:42   I know more recently Apple has been sinking the faces you affirmatively identify.

01:18:49   You say, "Yes, this is my wife."

01:18:52   It will remember that you said that and sink it across all your devices so you don't have to say it again elsewhere.

01:18:57   That didn't used to be the case.

01:18:59   So I think it's probably retaining my affirmative answers.

01:19:03   But what it seems to lose is, okay, based on your affirmative answers of who your son is, who your daughter is, who your wife, all these people are,

01:19:10   I'll figure out using facial recognition all the other pictures of them.

01:19:14   You didn't affirmatively identify it as them, but based on the ones you did identify, I can figure out this is also your son.

01:19:20   Sometimes it seems to forget some of that.

01:19:23   And certainly if you import thousands of new photos, it has to go over those photos and say, "Based on what you've told me, let me go through these photos and

01:19:31   A) Find all the faces in them, which is task number one, and B) Of all the faces that I found, do any of those faces belong to people that you've previously identified so I can group them in?"

01:19:42   And when I gather my thousands of photos from vacation and edit them and favorite them and keyword them and do all that stuff,

01:19:50   one of the things I also want to do is have sub-smart albums like "Long Island 2023 Favorites of My Daughter"

01:19:58   because I'm arranging a page in a photo book or something.

01:20:01   That's a smart album that you can make using the power of photos.

01:20:04   For that to work, photos on the Mac has to have done those two things.

01:20:08   I found all the faces in my new photos and identified which ones are my daughter.

01:20:12   And when I'm editing photos, I'm loading them on my laptop at the beach, and then when I come home, I start up my Mac and they all sync there and everything gets loaded up.

01:20:24   And probably a day or two after I'm back, I'm like, "Okay, now it's time for me to start doing my photo editing. Make my albums, make my book."

01:20:32   And I was thwarted this year because my little smart albums that I would make to help me arrange things for the book had no idea who was in any of the photos.

01:20:41   And I'm like, "Why does Favorites of My Daughter from Long Island 2023 have zero photos in it?"

01:20:47   And I went and looked through my photos from Long Island and I'm like, "Nah, you can turn on a thing in Mac Photos that will put circles around people's faces. You can view where it found the faces."

01:20:55   And it hadn't found faces in any of my photos.

01:20:58   And I'm faced with that situation that we're all kind of faced with in Mac OS and Mac apps and many apps that Apple makes, which is, "Alright, what do I do now?"

01:21:10   Like, what I wanted to say was, "Apple Photos, find faces. Do that now because I can't do the thing that I want to do until you find faces."

01:21:25   And lots of things like this are sort of like, "You don't have to worry about that. There's no button to find faces. It will just find them for you. Don't worry about when it will find them. Don't worry about how it will find them.

01:21:36   In fact, we'll find them at a low priority, only when you're plugged into battery and this, like, there's all sorts of conditions and you don't have to worry about it."

01:21:44   Well, I do have to worry about it if I have thousands of photos where you haven't found the faces, let alone identified who's in them, and it's blocking my work.

01:21:51   So what I would like to say is, right now, on my plugged-in desktop computer, use every single resource in the system to find faces and identify.

01:21:59   Use all the cores. Use all the GPU. Use everything. I'm literally not going to be doing anything else on my computer.

01:22:05   You have the full power of this mighty Intel Mac Pro to right now identify all the faces on these thousands of photos. Do it now.

01:22:13   Excuse me, excuse me. Once mighty Intel Mac Pro. It's still mighty because it still has the highest potential GPU capability of any Mac. Potential.

01:22:22   And it can hold the most RAM. Just do it now. But there is no do it now button.

01:22:29   And so you end up on Google, and what you will find on Google are tons and tons of results for how do I make Mac photos identify my faces right now, right now, right now.

01:22:39   And there's all sorts of, you know, witchcraft and superstition about how to do it. I will link to one of the pages and it's like, you can, you know, okay, so restart your computer because that's always step number one.

01:22:54   Log in, launch photos to get the photos demons to run, launch activity monitors and search for photos so you can see them.

01:23:01   So you want photo, you want to see photo cloud library, the photo library, the photo analysis D, but then quit photos because photos can't be running when identifies faces photos will say something like we will identify faces when you're not using the application.

01:23:14   But that language makes people debate on the Internet. Does that mean photos can be running, but I'm not using it or should photos should photos be quit or photo will only run if photos is the app is running, but I'm not using it or will also run and photos is quit people like, okay, well, the photo analysis.

01:23:29   The demon won't launch until you launch photos once, but then quit photos and some people like you got to remove all login items, right?

01:23:36   There's just all all sorts of just like reckons people have about what is the precise second is. Oh, make sure photos isn't open on your iPad or your phone either with the same Apple ID.

01:23:46   Make sure multiple accounts aren't logged in. And I was doing all these things. I'm like, please, because I'm like everyone else. I'm an activity monitor and I'm trying to say photo analysis.

01:23:56   Why are you using 0% CPU? Am I looking at the wrong demon? Is it really photo library D that I should be looking out? But I would search for photo or cloud and they'd all be using 0% CPU.

01:24:06   There's nothing going on in my system. Everything is logged out. The only time I logged into a single account with nothing else running. And I'm just like, please, please analyze faces.

01:24:16   Please analyze for days. I'm trying to get this thing to analyze. And then sometimes I'll come back to them like photo analysis is using 60% CPU. Oh, it's down to zero again. Was that a fluke?

01:24:27   And you'll come back to the people library and it will say, oh, sometimes it'll say you have, you know, 10,000 more photos to analyze. Come back later and they'll probably be done.

01:24:37   But I'm like, please. Like it took me like three days of just delicately trying to arrange the world so that my Mac felt like it was safe for it to analyze faces in my photos, as opposed to having a button somewhere in settings that says, analyze the faces right now.

01:24:56   That's what I want. And this is, this is not a good user experience because if you aren't willing to Google the world and figure out how you have to get everything just so, so it feels comfortable enough to analyze faces, you would never know.

01:25:09   Like you, you would think this feature doesn't even exist. And for this, during this time, that's literally the only thing I wanted to do in my computer. I wanted to make my photo book.

01:25:19   I wanted to make these smart albums. I wanted to do this thing and I couldn't do it because my computer, which was otherwise idle, refused to do the thing I wanted to do all in service of having this magical, don't worry about it behind the scenes.

01:25:32   I'll do this whenever you want. Like, I won't drain your battery. Don't worry. I'll do it when I feel safe. I just wanted to do it right now.

01:25:39   So that's complaint number two. And it's a meta complaint because it's true across tons of Apple's applications where they want it to be a magical user experience where you don't have to worry your pretty little head about it.

01:25:48   But sometimes I just want a button to do it. That's why we always talk about the sync button in messages as this amazing thing. I mean, it doesn't work all the time or whatever, but just to have some kind of button that says, do the thing now.

01:25:59   The thing that you're afraid to do because you think it's going to drain my battery or make my system slow, whatever, do it now. And then maybe a button to cancel it, you know, or whatever. Like, call me crazy.

01:26:09   Like, I feel like we've gone backwards in technology with this whole magical, I'll do it behind the scenes and you don't have to worry about it. Sometimes it needs to be done right now.

01:26:18   So that's number two. So number one, remember the aspect ratio I want. That's a single user setting. And number two, some way for me to tell photos to do this and all the many other things that photos claims to do for you in the background transparently so you don't have to worry about it.

01:26:35   Just that, Jon. Two things, just two things this year. Not even going to talk about the info window and how it is incredibly hostile to all forms of user input. How kind of you.

01:26:45   Yeah. I'm sorry. I'm sorry for your troubles. And I don't know. I don't do a lot of these editing things that you do in photos, which probably makes my pictures not as great as yours. But nevertheless, I can see how that would be incredibly, incredibly frustrating. And I am deeply amused that you went spelunking through the SQLite database in order to answer this question for yourself.

01:27:10   That's just to make a snarkier feedback. You know, that wasn't really part of the process. I did eventually analyze all my photos, by the way, for I think it was three days of trying to arrange the world. It's kind of like, you know, I'm trying to think of an analogy of like just, you know, the stereotypical thing where there's a bunch of guys in a movie are trying to pee, but they can't pee if someone's watching them or they need to have water running or whatever like that whole.

01:27:31   It almost is like my computer. It's like, I can't do it if you're watching me leave the room and don't have any other apps running. And then I'll think about analyzing face up. No, you scared it away again.

01:27:41   We are sponsored this week by ATP Membership. Please consider becoming a member today. You know, the ad market has its ups and downs. And this is a down, if I'm honest, this is a big down this year. And membership is always there for us. Membership is a constant for us. And we are massively appreciative of our members.

01:28:02   Please consider joining as a member and you really will support the show in an even better way. Now, if you can't do it, that's cool. Keep listening. You have the ad version and that supports us too. If you can join as a member, we strongly encourage it.

01:28:13   So here's what you get. First of all, you get an ad free version of the show, which, you know, just like this, same feed, same production and everything, but ad free. You also get the bootleg version, which a lot of people enjoy.

01:28:24   The bootleg comes out right after we finish recording. So about usually about 12 hours or so, maybe a little more before the regular release version. So you get an early release. It's totally raw and unedited. So it doesn't have like chapters and stuff, but it does have Casey swearing.

01:28:38   And everyone loves that, right? It has our title selection process. Any like, you know, bits and bits and bobs that we cut out for the final version. That's all in the bootleg. A lot of people love that. Occasionally, there's other benefits as well.

01:28:47   So a couple times a year when we do the big merch sales, we'll give a merch discount to members and stuff like that. But really what you're paying for, for the most part is the bootleg feed, the ad free feed and supporting the show.

01:28:57   So if that interests you, ATP.fm/join. It's eight bucks a month or a couple other currency options, a couple other plans, but it's basically eight bucks a month. ATP.fm/join.

01:29:09   We would love it if you supported us as a member. And hey, if not, we're still cool. Again, keep listening. We love that too. But if you can join us as a member, we'd really appreciate it. Thank you so much. And back to the show.

01:29:19   [Music]

01:29:43   For me, I'm pretty sure I'm not even using this anymore. But the one place that I can think of off the top, or I think it's the only place I'm using UIKit is speaking of spelunking.

01:29:55   The Internet's favorite spelunker, Guy Rambo, helped me figure out a way to determine if the search field is focused or not.

01:30:03   But as I think Marco and I talked about just a couple of weeks ago, that is coming in Iowa 17. It's just not there in 16. And I'm pretty sure that's the only place I'm using UIKit in CallSheet.

01:30:13   But Marco, what are you doing in Overcast? I know you've said that there's been some times in the new rewrite that you've considered dropping down to UIKit. Are you actually doing that at all? Or did you just think about it in an abandoned ship?

01:30:27   Well actually, Casey is the only one who can actually answer this question because neither Marco nor I have quote-unquote "Swift UI apps."

01:30:35   He has UIKit apps, and I have AppKit apps, and we use Swift UI, but only Casey, if I'm correct here, has the actual Swift UI app lifecycle thing. That's what you have, right, Casey?

01:30:47   That's right. That's right. That's definitely right for CallSheet.

01:30:49   Actually, Jon, that's not correct for me. I have a Swift UI app. Really? You went full-fledged to the Swift UI app lifecycle thing? No wonder it's taking you forever.

01:30:59   No, it's not Overcast. Oh, that's right. What is it, the Tide thing? I have my Fire Island driving app. Yeah, that is all Swift UI, except since I wrote it last year, it had to be compatible with iOS 15 and 16.

01:31:13   Wait, why? I thought you were installing it for like three people.

01:31:17   Yeah, and two of them had iOS 15. That's why, because it's not all tech nerds. It's like real people. Users ruin everything.

01:31:25   Yeah. Anyway, so that is almost all Swift UI, except I have to wrap all the MapKit stuff, because I think Swift UI just got MapKit now with iOS 17, or at least maybe 16. But anyway, so I had to wrap all that stuff.

01:31:39   So I had to drop down to UIKit for tons and tons and tons of the map stuff, and that honestly really sucked. But if I were writing that app from scratch today, I wouldn't need UIKit probably for anything anymore.

01:31:52   And I think that's where I am with my rewrite, which you didn't ask, but I'm going to tell you anyway. I am actually using entirely Swift UI, I think, for pretty much everything.

01:32:03   There's been occasionally a time where I'll run into some issue like, how do I style the, you know, how do I apply my font, which is not the system default font, it has a few tweaks.

01:32:14   I use sf-rounded, and I use the alternative 4, 6, and 9 glyphs. So I need, like, for part of my interface to look correct, I have to be able to customize the font.

01:32:25   Sometimes I'll have an issue with Swift UI, like, alright, well, how do I customize the font of this navigation bar title, or something like that. Occasionally I've had to dip into UIKit to style certain appearance attributes like that.

01:32:38   But then, like, a month or two later, I'll find some way to do it where I don't need that anymore, and then I'll take it out.

01:32:44   So right now, I have, I think, either almost nothing or nothing that's UIKit in the current build of the app.

01:32:49   But, you know, it peaks in here and there, but I'm trying very hard to not need it. That being said, you know, for the questioner here, it depends a lot on what your app is doing.

01:33:00   Like, you know, last year when I had to make an app that uses MapKit, well, I didn't really have much of a choice. I kind of had to use UIKit there.

01:33:07   And so, I think, you know, obviously it depends what your app is doing, but if your app is doing something that can be done in 100% Swift UI, it's generally recommended, I think, these days that you do it in Swift UI.

01:33:20   If the rest of your app is obviously in Swift UI, you know, mindset.

01:33:24   Even though I'm not using UIKit, I'll answer this from the AppKit perspective. My app is an AppKit app. My main UI is Swift UI. But in some cases where I could have used one or the other, for example, the context menus, I have right-click menus on my little things.

01:33:39   You can do that in Swift UI, and I did it in Swift UI using the Swift UI native, like, context menu pop-up thingy, and it looked and behaved terribly on the Mac.

01:33:49   And so I just used AppKit for it, because AppKit menus work and they look and work exactly how you would think they would.

01:33:56   If you use the Mac, have you used the menu bar, you know those menus, I want those menus.

01:34:00   And the things Swift UI was giving me was not those. So I chose to use AppKit for that context menu, even though I could have used Swift UI.

01:34:07   There's tons of lifecycle stuff. When we talk about lifecycle, I mean, like, what is the top level of your code? How do you define, this is my app, and these are the parts of my app, and here's where execution begins in the code that I wrote.

01:34:18   This is the first line of the code that I wrote that runs in the second and the third, like, that's what we're talking about is the lifecycle, like, the top level structure.

01:34:25   There's lots of things you can do in an AppKit app that currently don't have an equivalent place in the quote-unquote native Swift UI, like, from top to bottom thing.

01:34:36   All sorts of callbacks and delegates and stuff like that that I use to implement functionality in my app that don't exist in the Swift UI top level thing on the Mac.

01:34:45   Another example is my apps have menu bar icons. You can do that in Swift UI, but it's so much easier for me to do stuff like, oh, but what about when someone option clicks on it?

01:34:55   What about when they, you know, like, I have access to exactly what's happening at, like, the individual click level and all the modifiers and what's focused, and it's just so much easier to do that from AppKit,

01:35:07   because in Swift UI, since it's all declarative, someone has to have thought about wanting that information at this point to make it accessible.

01:35:15   Whereas AppKit, it's all imperative, and I can just go get that information wherever I want it.

01:35:19   And in fact, there's tons of callbacks for everything you can possibly imagine in AppKit, because it's like a 40-year-old API or whatever the hell it is.

01:35:25   So I continue to use AppKit for all those things that haven't made it into Swift UI yet, and for all the, like, the obscure, I mean, not that obscure,

01:35:36   but they're kind of obscure because my apps are not, like, my apps are not normal apps that just have, like, it's not a document-based app with a bunch of windows and saving things.

01:35:42   It's weird. And for weird apps like that, falling down to AppKit makes a lot of sense.

01:35:48   And I imagine it's similar on UIKit. If you're doing something out of the ordinary, Swift UI probably hasn't gotten around to implanting your thing,

01:35:55   but UIKit probably has some kind of hook or callback or delegate method or completion handler or something that does what you want.

01:36:02   Indeed. David Campbell writes, "What does Jon think about the Sony A6700? I set out the last upgrade opportunity, and I'm about to click by on an A6700.

01:36:13   Well, sorry, David, this probably took way too long, but nevertheless, to replace my A6300. Just curious about his thoughts.

01:36:20   I'll be using it much like Jon does, family vacations and outings. I have a few Sony lenses, so I'm feeling locked into the ecosystem.

01:36:25   Is it still a good camera when I feel like pulling out the "big camera," or should I jump to Canon?"

01:36:30   It's actually kind of timely. The A6700 just came out. The A-6-something-something-something-thousand line of cameras are Sony's APS-C cameras.

01:36:42   The sensor is smaller than full frame, and the cameras are also smaller. It was the first Sony that I really got into.

01:36:48   I had a series of them. I had the A6300, then I upgraded to the 6600, and the 6700 is the new one.

01:36:54   That's what they're asking about. All these cameras still just have APS-C sensors. The reason I used these APS-C ones is because when I want my long lens for the beach,

01:37:08   if I want an equivalent zoom distance on a full frame camera, the lenses are huge. Just massive, and so heavy, and so big, and so expensive.

01:37:20   Whereas on a smaller sensor, you get a double whammy. One, the lenses are smaller. They're just physically smaller.

01:37:28   Their diameter is smaller. They weigh less. They're not as long. They're smaller lenses.

01:37:32   And two, when you get a lens that says like mine, "350mm maximum zoom," that's 350mm at full frame with an APS-C sensor, like a 1.5x multiplier.

01:37:45   It's more zoomed in than that. It's more zoomed in than even that. So when I want to shoot people in the ocean waves and they are far out from the shore,

01:37:56   APS-C cameras are really great because I wouldn't want to buy a high quality, what is the equivalent of, 350x 1.6? Can't do the math in my head.

01:38:09   Try to find a full frame zoom lens like that, that's good quality, that's a huge amount of money, and then try carrying that in the hot sun for a long period of time.

01:38:19   It's too big. It's just too big. Maybe I'll eventually get to there. I look at them all the time and then I look at how much they weigh, how big they are, and I'm like, "No."

01:38:29   So, I think the APS-C camera size and this line of cameras is still worth having. I do wish that they would make the sensors a little bit better.

01:38:39   They increased the megapixels a little bit, they made the sensor a little bit better. It's the same sensor they've used in a lot of their video cameras.

01:38:45   So what have they done from the 6600 to the 6700? The 6600 was the previous top of the line, and it's got in-body stabilization, and it's got the best motion tracking stuff,

01:38:56   and the most features, and it uses the big battery, which I think is the most important feature. It uses the big battery from the full frame camera, so the battery lasts forever,

01:39:05   because this is a smaller camera, but with the battery from the big camera, it's kind of like the 15-inch MacBook Air. So the 6600 is great.

01:39:13   The 6700, to me, for my purposes, is not a pure win, because they made it thicker, like the body is thicker, which kind of cuts into the, "Oh, this is a small camera."

01:39:25   It doesn't weigh that much more, but it is visibly substantially thicker. They also made the handle bigger, so I guess that's good if you want to put your grip on it,

01:39:32   but they made it thicker. The sensor is a little bit better, but a lot of the features they added are for video. I don't care about video.

01:39:41   If you don't care about video with your camera, I feel like the 6700 is, I'm not going to say it's not a good deal,

01:39:51   but I would think hard about whether you should get the 6700 over the 6600 if you don't care about video,

01:39:58   because you're getting a thicker camera that takes slightly better pictures, but in exchange for, like, it costs more money, it's bigger.

01:40:07   I don't know, it's tough. The one thing that I pushed the 6700 over is they further improved the autofocus system and the tracking and all that,

01:40:15   and the 6700 has their, I don't know, everybody brands everything with AI, but their AI subject detection, which is better than the 6600.

01:40:24   It can find birds and insects and people and animals, and it's really good about following them, and it'll follow people even when their heads are turned,

01:40:31   their backs turn to you, and they turn back, like it'll keep focus on them the whole time. That is better on the 6700,

01:40:37   but it's not compelling me to upgrade, and if I was buying a camera straight out now, I would think a lot about getting a 6600 instead of 67,

01:40:46   just because all the features they added to this thing that have to do with video, I do not care about,

01:40:52   and I don't know, I guess I would probably go with it just for the AI motion tracking thing, but I say this not having actually held it in my hand.

01:41:00   I might be disappointed in the extra thickness, so think about the 6600, hold the 6700, if you can handle the extra size and weight,

01:41:09   even if you don't care about video, just get it for the better tracking, I guess.

01:41:13   Ben Gunzberger writes, "Every time you talk about your use of platforms like Twitter or Mastodon or Threads, I'm sorry, X, or Mastodon or Threads,

01:41:23   it feels like I'm using a totally different service. I've tried multiple times to get value out of them, but every time it's the same cycle.

01:41:30   I log on and mostly see a lot of very low quality comments from people with nothing interesting to say.

01:41:34   Then I manage to find a few people I respect and try to join interesting conversations but get no responses or feedback, including from ATP.

01:41:41   Then I give up and go back to one-way communication, such as podcasts, newsletters, RSS Flipboard, etc.

01:41:48   Maybe I just haven't persevered enough, but I hear people talking about the great discussions and friendships they've experienced on these platforms,

01:41:54   and I can't work out why my experience is so different."

01:41:58   I totally sympathize with what Ben is saying, although it certainly sounds like you're not coming to this with a terribly open mind.

01:42:07   It's hard to discern that from what you're saying, but that's kind of the vibe I got.

01:42:10   I can probably speak for the three of us. We get a surprising amount of mentions on Mastodon and previously on Twitter.

01:42:20   I mean X.

01:42:21   When we were there, it was called Twitter, dammit.

01:42:25   Fair enough.

01:42:26   I have not used X.

01:42:27   In the same way that we get probably 100 emails a day or something like that,

01:42:35   when you're getting 100 mentions a day, you're just not going to respond to all of them.

01:42:39   It doesn't mean that something that you tweeted, tweeted, X'd at us wasn't good or interesting or useful.

01:42:47   It just means that we don't have time to reply to everything.

01:42:49   I can only speak for the three of us in that regard.

01:42:51   But generally, the way I've made inroads into clicks or social circles, even in these social networks,

01:43:01   is by just participating in the conversations.

01:43:03   Even if you are perhaps jumping in on a conversation between the three of us hosts,

01:43:10   perhaps somebody else makes an interesting point to one of us that you happen to see, and then you comment to them.

01:43:16   "Oh, that was a really good point," and so on and so forth.

01:43:18   Over time, you start to realize, "Oh, I spoke to that guy or that girl or that person, whatever.

01:43:25   I spoke to them three weeks ago, and we shared that one witty story," or whatever the case may be.

01:43:30   It's not that dissimilar from real life.

01:43:32   I think, to some degree, yeah, you might have to persevere more, and to some degree, you might have to open your mind a little more.

01:43:37   But that's just my two cents.

01:43:39   Jon was just talking a lot, so let's start with Marco.

01:43:42   Hi, this is Marco.

01:43:44   I think the key to getting into a social network and getting into communities is to not expect the world immediately, but to be persistent.

01:43:57   In a community, people who show up and who are consistently putting out interesting or good or kind thoughts tend to get found

01:44:09   and tend to get integrated into the community over time, but it might take a little while.

01:44:14   It might take some persistence. It might take making some posts here and there that not a lot of people see for a while, and you just kind of keep at it.

01:44:22   Good people, good content tends to be found, but it just might take a while.

01:44:28   It's a little bit harder now in the fragmented world of the random Twitter spin-offs, basically.

01:44:37   All these different communities that have broken off of Twitter or communities that have been previously Twitter, like Macedon, but have been invaded by Twitter refugees

01:44:44   and are now effectively Twitter break-off communities.

01:44:48   It was much easier on Twitter when that was the big game in town when "everybody" was just in one place. It was just Twitter.

01:44:58   That's one of the greatest powers that Twitter had back before the doofus bought it and ruined it, is that it was the one place where so many people were.

01:45:08   You could assume, if you wanted to have a conversation with any media personality, any celebrity, any famous person, any content creator, any company,

01:45:20   you could be reasonably sure they were probably on Twitter, and you'd go look and you'd probably find them.

01:45:25   That is gone now, and it's fragmented now, and it's going to remain fragmented for the foreseeable future, as we've talked about.

01:45:32   It's harder now in the sense that now you might need to go to multiple places to try to develop communities or audiences or whatever.

01:45:41   It would probably help most to specialize to one. Rather than bouncing between a bunch of different places, I would say stick on one and try to establish yourself there.

01:45:53   The problem is there, it's kind of hard to know which one right now, and there's been so much turbulence in the last 10, 12 months in terms of all the different services.

01:46:05   Twitter's ruined, and now where are we going to go? Let's try Mastodon, and now, oh hey look, there's Blue Sky, oh now look, there's Threads, oh my god.

01:46:12   There's all these things going on everywhere, and there's no clear winner yet, and there might never be one, or it might be a very long time.

01:46:20   Twitter is still around, even though now it's renamed, and it's progressively getting worse, but it's still there, there's still a bunch of people there.

01:46:27   Mastodon is still very much around and still doing great, and that's where I spend most of my time.

01:46:32   Threads is still booming like crazy, and everyone's using it now, but there's also still Mastodon.

01:46:38   Blue Sky, I think, probably doesn't have a great future ahead of it, but it's still there, and there's still a community there.

01:46:45   So now there's a whole bunch of places, and it's kind of hard to know which one to invest in, so it can be a little tricky.

01:46:51   But I can tell you from somebody who has the privilege of having the audience on these platforms, you're seeking the experience that I have to some degree.

01:47:00   And I can tell you, first of all, that was built up over time by doing exactly this.

01:47:04   It was built up over the last 15 years or whatever it's been, putting out good stuff on a regular basis, or at least putting out stuff on a regular basis.

01:47:12   It wasn't all good, but putting out stuff on a regular basis, and over time, that develops communities and audiences.

01:47:19   When I look through the mentions for an account, or when I look through emails, I don't respond to most of them, because, as Casey was saying, sometimes we get a lot.

01:47:27   Like, an example, this Ubiquity camera topic, or the home security camera topic, we've gotten so much feedback.

01:47:35   There are so many emails that have been incredibly detailed, helpful things, and I've responded to some, but it's been a lot.

01:47:43   And so there's a lot that I'm not responding to. However, when I see the same name pop up every few weeks, I'll see somebody write an email with the same name, I'll start to remember some of those names.

01:47:56   Or on Twitter or Mastodon or whatever Twitter-like service I'm on this semester, I'll recognize people's usernames, and I'll start recognizing, "Oh, hey, it's them again. I remember them, and I remember their stuff."

01:48:09   When you are persistent, not like overbearing, not responding to every single thing, but when you are consistently having good feedback or good interaction in some way, or posting good stuff yourself,

01:48:23   that does tend to pick up traction eventually. It might take a little while, but it does pick up traction eventually.

01:48:29   And I would actually say, on one level, because we haven't really settled on where necessarily we're going to be long-term in a lot of cases yet, on one level it's hard to know where to invest your time, and that makes this kind of thing more difficult.

01:48:41   On the other level, every time one of these new services launches, all of us who go try it out go find new people to follow, because that's not only an opportunity to do that, because it's all brand new, and it's a kind of fresh, unclaimed ground, and freshly formed audiences that haven't collected into stars and galaxies yet, and everyone's kind of floating around after the Big Bang.

01:49:06   So there's a lot of opportunity when services change to get new audiences and new communities formed.

01:49:14   So even though it's a little hard to know where to focus your energy, which one of these communities to invest in right now, or which multiple of these communities to invest in right now, it is also a huge opportunity to establish yourself.

01:49:28   It's like changing schools. You're establishing yourself with new people, new environment, so there's a lot of opportunity there, but ultimately this boils down to put good stuff out there, and eventually it does tend to be found.

01:49:42   So Ben mentions a couple different things here. One is just seeing random comments from people. That's one of the reasons the chronological timeline is not the best for most people, because if you show up on a service and you're like, "Uh, and it's chronological timeline, who should I follow?"

01:50:00   Sometimes they'll suggest somebody you should follow, or maybe you try to find some of your friends who you follow them, but it's a pretty meager experience because you're like, "Okay, I thought of three people to follow, and either one of them seem to be either awake right now or using the service at all, so my timeline has nothing in it? Should I follow a famous person now?"

01:50:20   That seals empty, and so Ben says they find a few people they respect and try joining those conversations and don't get any response. I've followed the person who is the reason that I get into podcasting. I've followed that person for 16 years on Twitter.

01:50:36   I read all of their tweets because I'm a timeline completionist. I would respond when I thought I had something interesting to say. I've never gotten a response from that person. Never. 16 years. So that's the problem with finding important or famous people and saying, "I'm going to follow them and participate in their conversations."

01:50:57   Because of the volume, it's just impossible for those people to guarantee that you're going to get any kind of response. The amount of email we get, if you look at the total amount in our mailboxes, it's like, "Oh, that's not that much."

01:51:11   But if we responded to every single one of those emails, all we would do all day from when we woke up and went to sleep is respond to listener email. That would be our whole day.

01:51:20   That's nothing else. You stop for meals and go to the bathroom, but you'd just be answering email. Because giving a good answer to an email, a good thoughtful answer to a very long, well thought out email, requires that. Never mind follow-up emails and responses or whatever.

01:51:34   So talk to Merlin about it. It's important to manage your time and perhaps think about which emails require response, what do you have time to respond. That's why the person I followed for 16 years never replied to me. They don't hate me. They don't even know who I am. They get lots of replies.

01:51:51   Famous people, like real famous people, like celebrities or whatever, I forget about our little nerd circles, but like famous people, get too much stuff. So if you're going to go on a service and find people who are either little F famous or big F famous and think you're going to reply with something witty to them and suddenly you'll be involved in the conversation, that's probably not going to happen.

01:52:14   It doesn't reflect anything on you and it doesn't reflect anything on them. It's just a numbers game. They can't possibly, real celebrities, can't even look at all their replies. No matter what service they're on. Even if you're like, the first day that Blue Sky is here and a famous sci-fi author is on Blue Sky, maybe you'll get one response because there's five people on the service, but that's it.

01:52:34   So don't pin your hopes on becoming buddy-buddy with someone famous. It has nothing to do with you. It has nothing to do with them. It's just about volume. So how do you go about finding people? First of all, this is what algorithmic timelines are for.

01:52:48   For services that offer them, especially services that offer ones that work in some reasonable way, and I think Threads does kind of work in a reasonable way, use the algorithmic timeline to discover subgroups that you might be interested in, hopefully that do not involve celebrities or anybody with tons of followers.

01:53:05   There is going to be some period of time where you're either mostly listening or trying to find the groups where you fit in, and the way you sort of become part of that group is by having something to offer.

01:53:25   Whatever it is that you are interested in, that you know about, that is a thing that you--everyone's got something that they're--whatever it is, it's like, I know everything about this particular reality show on TV.

01:53:38   You might think it's dumb, but there will become a time when someone in some group is having a conversation about that and you'll be like, you know what? I've seen every episode of that show and I've rewatched the seasons that I like 17 times, and now it's my time to shine.

01:53:52   And I can be helpful, useful, provide information that people didn't know, have an informed opinion, you know, like whatever thing you're good at.

01:54:01   You want to be able to do the thing that you're good at and offer the things that you have to offer, and that's how you'll stand out in a conversation.

01:54:11   And you don't know when that's going to be. You may be super interested, like I'm super interested in cars, but if someone's talking about Formula 1, I don't have anything to offer in that conversation. I like cars, I just am not into Formula 1.

01:54:23   And so if the famous people that I respect are talking about Formula 1, I can't provide any value to that conversation. And if I tried to, they're not going to remember me because I'm not providing anything that is memorable.

01:54:35   So part of this process of finding, you know, of making the services valuable is finding the group where you are a valued and valuable member.

01:54:45   And there's a million different ways to do that. It can be about hobbies, it can be about, you know, where you live, it can be about the fact that you just got married and you're involved with a group of other people who just got married.

01:54:55   Like, there's so many ways you can bin yourself, that's the magic of the internet. And in those subgroups where you have something to offer, you will become an important, notable, valued member of that by what you offer to the group.

01:55:10   Don't enter a subgroup about Formula 1 if you've never seen Formula 1. You will not become a valued member of that group unless you want to get into Formula 1, in which case, read that group for a year, and on year 2, you're going to be like, you know what?

01:55:22   I know a lot about Formula 1 now, and I can participate in these conversations, you know? So it takes time, but I feel like that's the thing that people miss.

01:55:30   And I think about the people who have become people that we know in our nerd subgroups, all of us at one point were not in this nerd subgroup that we're in.

01:55:40   We, you know, we were not in it at all, and we entered into it somehow by offering something that was found to be valuable.

01:55:48   Here's an example, _DavidSmith that we talk about on the program a lot. He came into this nerd circle kind of around the same time that we were entering into it as well.

01:55:59   The first time I remember seeing him was in the IRC chat room for my Hypercritical podcast. He was _DavidSmith in the chat room.

01:56:08   And the reason I recognize his name, even though it's probably like one of the most common names in the English language, David Smith, there's a lot of them in the world, I think.

01:56:16   Was because he was always in the chat room, and he always used _DavidSmith, and the things he said in the chat room were smart and interesting.

01:56:25   Because he turns out he knows stuff about, you know, the stuff we were talking about, Apple and technology stuff.

01:56:32   When I first started seeing his name, I didn't know he was an app developer. I didn't know he made iOS apps, right? I didn't know him from anybody.

01:56:40   I think he was in the chat room of Marco's podcast as well, Build and Analyze on 5x5. Where else was he?

01:56:47   If you were involved in the tech podcast world and they had a chat room, chances are you'd see someone named _DavidSmith in there.

01:56:55   Eventually we learned that he did make Mac apps, and he had a website, and he would tweet things, and he would blog about it, and he would talk about his apps, and eventually we met him in person and became friends with him.

01:57:03   First he was nobody, and then he was a name you saw, and then he was a name you remembered, and then he was somebody who was offering things.

01:57:11   In fact, a lot of people would, I bet if you listen to ADP, you know there's some people, not just Steve Stratton Smith, but some people you've heard who've offered feedback in the follow-up section.

01:57:20   You've heard their names over many years in ADP, and we know their names because we know they listen to the show, and they send us tons of feedback.

01:57:27   They send us 500 things as feedback, but they get three on the show, but that's three spread across three years, and you hear that same name once a year for three years.

01:57:35   You're like, "Hmm, this person, I recognize their name."

01:57:38   Maybe if you were at WWDC and you were talking about ADP, you'd be like, "Oh, I recognize your name because they said it in the feedback section, or when they were talking about follow-up, or you know, Ask ATP."

01:57:48   And then you have something to talk to them about.

01:57:50   And why are they in Ask ATP? Why are they in follow-up? Because they're offering answers to questions that we asked on the show, things we didn't know, or asking interesting questions that we think are things that other people might want to hear about.

01:58:03   That will happen in social media as much as it does on podcasts, as much as it does in chat rooms.

01:58:09   It's just that it's not going to happen instantly, and you have to know where and who you should be talking with, and where you are interested in participating, and where you have something to offer.

01:58:21   And if you don't have something to offer today, like I said, you can lurk there, which used to be a thing in the news, and you would lurk in the news group for several months before you even put your first post in, to get up to speed.

01:58:32   Because if you're interested in something, you eventually will become knowledgeable about it, and be able to participate in the conversation in a way you couldn't in the beginning.

01:58:40   So, I know it's frustrating to not just instantly be like, "Oh, here's a circle of people, and they welcome me, and we're all having fun together."

01:58:47   But that's tough to do. And the final thing I'll say is, almost all these little circles that we're talking about are a little apple nerd circle, and the sub-circles, or whatever.

01:58:55   Most of these, the way these tend to form, is not by looking in existing circles of famous people and joining it.

01:59:02   If that was true, I'd be in a circle with David Pogue and John Dvorak. I am not in a circle with those people.

01:59:07   Not because they're bad people or anything, but my dream reading Mac magazines is like, "I'm going to talk to those visionary people who are right on the back page of these Mac magazines."

01:59:16   Reality? I was never going to be in circles with them. Instead, I formed circles with a bunch of people who were "nobodies" who became somebodies over the course of 15 years of hanging out with each other.

01:59:27   There's this thing of like, "Oh, I see the people who are currently popular or famous, and I want to join them."

01:59:33   When in reality, you should be finding other people who are not popular and famous, just like you, and make your own circles with them, because you will be the next popular and famous people.

01:59:42   That's how it works. Everyone wants to look towards the famous people. Find the other people who are your current peers in experience or knowledge or whatever.

01:59:51   Join with them. It's like, "Oh, but I'd much rather be talking with these famous people." Yeah, but that's not going to happen.

01:59:59   John Dvorak never answered any of my letters, and he's actually kind of a jerk. David Pogue's cool, though.

02:00:05   Very rarely do you meet your heroes and become incorporated into little circles with them. What actually happens is you form your circles with your own people.

02:00:14   I would suggest, apply less value to the current fame of people and believe that you and your "non-famous" regular people friends have just as much value, because you do.

02:00:26   And make your own circles. That's the way to be happy on the internet, I feel like.

02:00:32   Thanks to our sponsors this week, Trade Coffee and Collide, and thanks to our members who support us directly. You can join us at atp.fm/join, and we will talk to you next week.

02:00:45   Now the show is over, they didn't even mean to begin, 'cause it was accidental. (Accidental) Oh, it was accidental. (Accidental)

02:00:57   John didn't do any research, Margo and Casey wouldn't let him, 'cause it was accidental. (Accidental) Oh, it was accidental. (Accidental)

02:01:08   And you can find the show notes at atp.fm, and if you're into Twitter, you can follow them at C-A-S-E-Y-L-I-S-S, so that's Casey, Liszt, M-A-R-C-O-A-R-M, A-N-T, Margo, R-M-N, S-I-R-A-C, U-S-A, Syracuse.

02:01:34   It's accidental. (Accidental) They didn't mean to, accidental. (Accidental) Tech podcast, so long.

02:01:47   So, you know, a week or two ago, was it last week? I don't know, time is a blur right now. Last week I was at the beach, and I did something very, well, maybe unusual, I don't know.

02:01:57   So, late last year, I think it was, I was watching a video that a friend of the show, Quinn Nelson, did on YouTube about, I think it was like really good gift ideas for the holidays or something like that, I'll dig it up and put it in the show notes.

02:02:11   And Quinn had suggested, among many other things, that he really likes this one travel router. It has a really god-awful name, because of course, it's a little teeny tiny travel router, and the idea is, you know, you can bring that and you can perhaps, if you're at, say, a beach house, you can plug that either into their router or even replace the beach house's router, and use that instead.

02:02:40   And then it's a known quantity, and that works out really nicely, because then all of your devices, they don't need to, you know, you don't need to input some new SSID and some new password.

02:02:52   You know, you can either use literally the exact same SSID and password as you have at your house, or you can use, you know, some other known thing that all of your devices are familiar with and so on and so forth.

02:03:02   What if the beach house router is locked in a shed, Casey?

02:03:05   Yeah, well, that is, well, it might actually,

02:03:09   because one of the things, because this is specifically a travel router, one of the things that it does is it will, I forget the technical term for it, but it will basically re-

02:03:20   like, I don't want to say repost, that's not the word I'm looking for, I'm sorry, I'm very tired, but it will take like captive Wi-Fi, and you can spoof a MAC address of the router if you want to,

02:03:31   but it will take like a Wi-Fi connection and rebroadcast that as, you know, a different SSID and so on and so forth. There's a term for this, which I'm failing to think of.

02:03:41   You know, you can log in to the captive thingy through it, and then it rebroadcasts from that? How does that work?

02:03:47   Well, no, so what you would do is you would log in on your MAC, figure out your MAC's MAC address, that's a lot of MACs all in one spot.

02:03:54   Oh.

02:03:55   You would figure out your Macintosh computer's media access control address.

02:03:59   What processor might that Macintosh computer have in it? It might be the-

02:04:02   [laughter]

02:04:04   It might be a M1 maximum, but anyways, so the point is, it will then rebroadcast Wi-Fi and whatnot.

02:04:14   And one of the neat things that this particular travel router does is that it will also, if you so choose, it can, at the router level, connect to a WireGuard access point.

02:04:26   So what I did at the beach was I brought this router, and then I plugged it in so it was double-natted, but it doesn't matter because there was nothing coming into this router, I just needed to get out.

02:04:38   So I plugged this router into their router because it was not locked away, and then I turned on the WireGuard client, and so that meant that not only is it extremely unlikely that the owner of the house,

02:04:54   I mean not that they would, but the owner of the house could snoop any of the stuff that I was doing, but even more importantly, I have my piehole, hi Marco, I have my piehole available to me.

02:05:04   It's still funny, all these, it's like-

02:05:05   I know, I know.

02:05:06   It's like how like, you know, like butt jokes are always funny no matter how old you are, no matter how mature you are, like butts are funny.

02:05:12   Similarly, the piehole, that's just always a funny name.

02:05:15   I know, I know.

02:05:16   So anyway, so I had that already all available on the travel router and so on and so forth, or on the network when we were at the beach house,

02:05:26   but one of the very interesting things that I was quite proud of myself for coming up with this idea, which is probably not that unique, but I was excited that I thought of it.

02:05:35   I am, and I think we've talked about this plenty of times in the past, I am one of those people that is kind of a nut job about always having some sort of music playing.

02:05:45   I really don't like exceedingly quiet places.

02:05:49   It's not that I can't do it, I just don't like it.

02:05:52   So basically, anytime I'm conscious, I'm either listening to a podcast, usually in headphones, or music oftentimes from our Sonos system that we have in the house.

02:06:01   Well, it occurred to me, I have two portable Sonos speakers.

02:06:06   I have a Move and a Roam.

02:06:07   The Roam is like sort of kind of small like a Jambox and the Move is quite bigger, quite a bit bigger.

02:06:12   Well, if I set the travel router up to use the same SSID and password as I have at home, hypothetically, I should be able to take my two portable speakers and put one on each floor of this two-story beach house, and they should just think they're at home.

02:06:29   And so I plugged in my travel router, I plugged in the, or I put the two travel speakers, roaming speakers, whatever, on their little charging bases, started them up, and just like that, I got a two-speaker Sonos system with pretty much no configuration at the beach house.

02:06:47   And I was very excited about it and it made me very happy.

02:06:49   I'm surprised that that works as well, especially, you know, something like, like I know the Sonos speakers, that's, you know, they have Wi-Fi and some of them support Bluetooth, but usually they kind of need to be on their Wi-Fi network, at least for setup, and even sometimes after that, like it's a whole thing.

02:07:06   So that's actually, that's pretty impressive that it works.

02:07:09   Yeah, and it worked really, really well.

02:07:11   Okay, so I can't find Quinn's video, I'm going to have to try to find it for the Sonos after I'm done recording, but the travel router is the gl.inet, gl-mt-1300 barrel VPN wireless little travel router, connect to a hotel Wi-Fi and captive portal, USB 3.0 3 gigabit ports, range extender, assess point, not access, but assess point, pocket-sized microSD slot ready to set up.

02:07:34   Asses point?

02:07:35   A-S-S-E-S-S, assess point.

02:07:37   Oh, assess point.

02:07:38   People aren't familiar with this bit, he was just reading the product name.

02:07:40   Yes, that is the product name on Amazon.

02:07:42   So anyway, but this thing, this is super cool, I really like it.

02:07:46   And then we actually had brought this to Disney when we went in January, and it just so happened we won the hotel room lottery in Disney World, because in our hotel room in Disney World, surprisingly not in the ceiling or on the ceiling or anything like that, in the hotel room at Disney World, I can dig up a photo because I took a photo of it because I was so happy about it.

02:08:08   There was the wireless access point for that block of rooms near us, and not only that, but it had a live Ethernet port.

02:08:19   Whoa.

02:08:20   Right?

02:08:21   It was amazing.

02:08:24   So here it was, I could just plug this router via Ethernet directly into a hotel access point, because if you know anything about any hotel, but particularly Disney hotels, the Wi-Fi is often trash.

02:08:37   Because it is way overloaded.

02:08:39   But I didn't need to worry about that, because I had Ethernet baby, because we won the hotel room lottery.

02:08:44   And I was very excited about that.

02:08:46   But anyway, this little travel router, I'll put a link in the show notes to the Amazon link.

02:08:51   Now this GL.iNet company has many different flavors of this same router, you know, there's lots and lots and lots of different configurations that you can get.

02:09:00   This is just the one I happened on.

02:09:02   I honestly don't remember how I landed on this particular one.

02:09:05   But yeah, if you're going places with any sort of regular, not even regularity, but if you're going places for an extended length of time, like a week plus, I really really enjoyed having this.

02:09:15   It's a super nerdy, super dorky, super kind of ridiculous, over the top thing to have.

02:09:20   But I'm really glad I had it.

02:09:21   It worked out nicely.

02:09:22   So your story makes me think of secret weird things in the spirit of reconcilable differences.

02:09:28   Yeah.

02:09:29   I'm thinking in my head, if I did a poll, like what's your reckon about how many people are like Casey and want like music playing or audio playing?

02:09:39   And how many people don't?

02:09:41   How do you think that would break down?

02:09:42   I guess for the US, let's say.

02:09:44   Well, I mean, so two things.

02:09:46   Number one, similar question, but TV, I think you get a lot of different results.

02:09:50   Oh, that's true.

02:09:51   I'm saying like, regardless of source, regardless of the source of the sound, it's like sound, like something other than just, you know,

02:09:58   a sound playing from something or not sound playing because Casey is very strongly in the sound playing camp.

02:10:03   And I, for example, I'm very strongly in the not sound playing camp.

02:10:06   And I and everyone kind of feel I can bend themselves, even if they're not strongly at one point or the other.

02:10:11   Like, I don't think a lot of people are kind of in the middle.

02:10:13   You kind of you know, so I would in my first instinct, of course, me being, you know, everyone thinks like, oh, whatever I do is normal.

02:10:20   That's the whole point of the whole secret weird things that, you know, so I'm thinking surely Casey is an outlier.

02:10:25   But then I think, but if you did that poll, would he be in the majority and how big a majority would it be?

02:10:31   Well, because, you know, part one is like what what kind of noise do you want to have?

02:10:35   Many people consider it no big deal at all and nothing out of the ordinary.

02:10:41   As soon as they arrive home, they flip the TV on and the TV is playing, just playing, you know, ambiently, constantly.

02:10:48   That's a very common thing.

02:10:49   And back in the day when I was a kid, people had radios, kitchen radios, right?

02:10:53   You'd have a radio in your kitchen and it would just be on when you're home.

02:10:56   Right. So a lot of people love having some kind of ambient media playback somewhere in their house all the time whenever they're there.

02:11:03   I personally, I don't give a crap about TV for the most part, but I love music and podcasts.

02:11:10   And so whenever I'm, if I'm like around the house and especially like it's interesting, like when I am alone in the house, I always want something playing.

02:11:18   When my family is home, we often have silence.

02:11:23   And part of that is because I don't want the pressure of choosing the music.

02:11:27   You can't agree on what they are.

02:11:29   But anyway, but yeah, like if I'm like, if I'm alone and I'm like, you know, going to make lunch for myself or have some coffee, I will definitely play either music or a podcast.

02:11:40   That being said, though.

02:11:41   You're in the Casey thing, but I feel like they would bring you into the Casey camp.

02:11:45   So now we're at 66 percent of the U.S. is like Casey and 33 percent is like me judging by ATP.

02:11:51   Well, and John, and as you know, ATP does not just represent the U.S., we represent the entire world as the world always lets us know whenever we state anything and they accuse us of being U.S. centric.

02:12:02   Well, no, we will represent the whole world now. Everyone.

02:12:05   We are 66 percent of everyone.

02:12:07   Anyway, to answer your another part of this, though, Casey, is that this was one of the great surprises that I learned when developing Overcast.

02:12:15   At some point, when I put analytics about output devices, a lot of people are fine to just listen to their phone speaker for both podcasts and also for music.

02:12:25   And that was a surprise.

02:12:26   And by the way, that destroys your battery.

02:12:29   If you listen to a lot of podcasts and music out loud on your phone's built in speakers and you get terrible battery life, that's why.

02:12:36   It murders the battery more than having the screen on.

02:12:39   Like it's if you're playing music loud, it'll it destroys it.

02:12:42   Anyway, I found in a lot of cases like that's fine.

02:12:45   Like, you know, especially like if I'm in a hotel, I never turn on the hotel TV ever.

02:12:51   Like I just I don't I sometimes if I can move out of the way, I'll move out of the way.

02:12:56   Like I just I don't I never use such the hotel TV.

02:12:58   Yeah, I know. I know the Merlin man's assumption.

02:13:01   It certainly comes into play.

02:13:02   This is about the remote, but I'm thinking about the TV itself.

02:13:04   They always look kind of icky. Well, yeah.

02:13:06   But it's certainly their most probably touched more than the TV itself anyway.

02:13:10   And, you know, the TV can fit in fewer places.

02:13:13   But wow.

02:13:15   It's a lie.

02:13:18   But a lot of times I will just I'll use my phone to play like, you know, music as I'm getting dressed or something like it's not our phones are surprisingly less crappy than we would think.

02:13:30   Actually, just for also in this department last night, for the first time, I think ever, I watched a TV show in bed on my phone with AirPods in.

02:13:44   This is something that's extremely common for many people to do.

02:13:47   And for whatever reason, it is extremely.

02:13:49   Yeah. I know, John, you do this, right?

02:13:51   I mean, I use my iPad most of the time, but I will watch a YouTube video on my phone sometimes.

02:13:54   Here's the thing. I do it for such a weird reason.

02:13:57   Me being me, my phone has an OLED screen. It has way better blacks than my iPad.

02:14:01   That's what I was going to say.

02:14:03   So this is the first time I've ever watched a show like on my phone in bed with AirPods.

02:14:08   We have those stupid Samsung frame TVs, which are terrible TVs.

02:14:14   Like they're OK as visual objects in the room.

02:14:17   As TVs, like image quality wise, they're horrific.

02:14:20   They're just really basic and not very good LCD TVs.

02:14:26   They don't have any even fancy dynamic backlighting, at least the one I have from a couple of years ago.

02:14:31   It's just it's a very basic LCD TV.

02:14:33   So like the black levels are terrible and it's nothing like an OLED.

02:14:38   And every time I see an OLED, I'm like, oh, God, it's so much better.

02:14:41   Why do we have these stupid Samsung frames?

02:14:45   And of course, the answer is, you know, OLEDs would have ridiculous burn in if they tried to do what the frames do with their static idle image.

02:14:52   Anyway, by the way, LG's OLEDs do that.

02:14:55   They have a just like the frame where it shows artwork and stuff.

02:14:58   The LG OLEDs actually do that.

02:14:59   So, I mean, you're right about burn in, but it doesn't stop manufacturers from offering that.

02:15:03   Do they just like shift the picture around?

02:15:05   They do, but it doesn't, you know, it doesn't it doesn't help that much.

02:15:09   Like how much are they shifting it?

02:15:10   They do have pixel shift.

02:15:11   They do have pixel refresh.

02:15:12   The LGs are somewhat resilient to burn in.

02:15:14   But, you know, you can't fight City Hall.

02:15:17   You're going to leave it up all the time.

02:15:18   It's going to burn in.

02:15:20   Anyway, so I was watching some stupid show, like some, you know, some bad Apple TV plus show.

02:15:24   And by the way, usually Apple TV plus shows are good, which is why it stuck out.

02:15:29   This one was bad.

02:15:30   So I was watching the show and it blew me away.

02:15:33   First of all, how much better it looked on my little phone screen than on my giant Samsung frame TV because it's an OLED.

02:15:41   OLED iPads coming soon.

02:15:43   You know, I'm going to scoop one of those up.

02:15:44   Oh, yeah. Right.

02:15:46   And then second of all, I was blown away how good it sounded with my AirPods Pro.

02:15:53   It had a full surround mix.

02:15:55   And this is not like an action.

02:15:57   It's like a dialogue based show.

02:15:58   But I could tell it was a surround mix.

02:15:59   It sounded incredible.

02:16:02   You got to turn that stuff off, Mark.

02:16:04   No, not even the positional thing.

02:16:06   I wasn't doing the thing where like it comes from the phone.

02:16:09   See, every single, you have to turn off in every single app.

02:16:12   And every single app that you use with your AirPods on your phone, you have to go to the spatial audio thing and pick, I turn it off.

02:16:18   You can do fixed or position or off and you might want to think about turning it off.

02:16:23   Honestly, for TV shows, I'm going to leave it on.

02:16:26   It's incredible.

02:16:27   And it kind of got me thinking like maybe I should probably like, you know, think about surround sound setups again.

02:16:34   But it really did sound really good.

02:16:37   You're pushing way off of the topic that I wanted to get the answer to, which is what's your guess?

02:16:41   U.S. population, percentage, KC or non-KC?

02:16:44   Oh, so are we including TV?

02:16:48   Yes, anything that makes noise.

02:16:49   Phones, TVs, radios, anything.

02:16:52   Sonos, literally anything.

02:16:54   Do they need to have sound playing or not?

02:16:57   I'm going to say if we're talking, you know, if we rule out like, you know, kids, which is like U.S. adults.

02:17:02   Yep.

02:17:03   I'm going to say probably 60, 70 percent.

02:17:06   It's probably a lot.

02:17:07   KC, what do you think?

02:17:09   It's really tough.

02:17:11   It's tough for me for a couple of reasons.

02:17:14   One, I think I'm the way I am, as with everyone else, because of my upbringing, right?

02:17:18   Like my dad always had music playing, always, always, always.

02:17:21   And my mom tended to, if dad wasn't playing music, like maybe he was at work or whatever,

02:17:26   mom tended to have the TV on that she was casually watching.

02:17:30   Like it's not the sort of thing where she would just have it on as noise.

02:17:33   But she tended to have the TV on whenever there was something going on.

02:17:38   I'm sorry, there was nothing going on.

02:17:40   And so one way or another, both parents, constant noise.

02:17:44   Well, I mean, that's a little pejorative, but constant.

02:17:47   That's how I would describe it.

02:17:48   Oh, yeah, yeah, yeah.

02:17:49   Constant noise going on in the background.

02:17:51   And so I'm the way I am, presumably, right?

02:17:53   Because that's what I grew up with.

02:17:55   Erin, very, very much not that way.

02:17:58   And I think the reason that, part of the reason we are a music all the time family

02:18:02   is because Erin doesn't typically care what I play.

02:18:05   She'll listen to basically anything.

02:18:07   Don't just play one band over and over and over and over and over again, Marco.

02:18:11   Hey, it's now two.

02:18:13   Oh, all right. We're making progress.

02:18:15   So anyway, so yeah, so for me, like it's all I've ever known.

02:18:20   And so to me, having a house that's silent is just unusual and weird.

02:18:25   But that being said, to actually answer your question,

02:18:29   I would guess somewhere in the 30 to 40% range have either a TV or music playing.

02:18:35   That low?

02:18:36   I think so.

02:18:37   But because I feel like an oddball.

02:18:39   I feel like an oddball that I always have to have something on.

02:18:43   I think you just always feel like an oddball.

02:18:45   Well, there is that as well.

02:18:47   I think you're in the majority.

02:18:49   My personal experience is when you go to someone else's house,

02:18:52   and I notice it because it is, I'm not going to say it's offensive to me,

02:18:57   but like I don't like it, so I notice it.

02:19:00   I notice it when it's there.

02:19:02   It's like if you went in someone's house and you were ankle deep in jello,

02:19:06   you would notice the houses where you're ankle deep in jello

02:19:08   and the houses where you're not.

02:19:10   Other people would be like, they don't even notice, it's just there,

02:19:12   but you're like, oh, ankle deep in jello again.

02:19:14   So I think you are safely in the majority.

02:19:17   I was going to say 75/25.

02:19:20   Really? Huh?

02:19:21   Yeah, because one thing I've learned from my secret weird thing surveys

02:19:24   is whatever is like, is that A, I'm almost never in the majority,

02:19:28   and B, your personal experience of just meeting people in life

02:19:32   tends to be borne out by the percentages.

02:19:36   Like in the thing with the cup in the bathroom,

02:19:39   a little survey of the group of people,

02:19:41   we were in a room with like five or ten people,

02:19:44   that ended up being basically the percentage

02:19:46   of the thousands of people in the poll.

02:19:50   So my experience of being in people's houses is, yeah, they have the TV on,

02:19:53   they have the radio on, I've seen people playing things on their phone.

02:19:57   It's modified by what Marco said,

02:19:59   it's like if you have a multi-person household,

02:20:02   there is less of that because people can't agree on what they want to play,

02:20:06   so sometimes you default to nothing,

02:20:08   and there's just ambient noise from the people there.

02:20:10   But I think Marco's example is great, and if I had to poll it,

02:20:12   I would say like, if you're in the house yourself,

02:20:14   do you put on some audio, radio, television, phone, Sonos, whatever?

02:20:20   I think that would be like 75/25,

02:20:23   which is yet another case where I have to realize that just--

02:20:26   - How weird you are.

02:20:27   - That I am the oddball, and that I need to stay away from people.

02:20:30   - Well also, I think some strong driving factors to that also,

02:20:34   like if that's true, that this is like the predominant American choice,

02:20:40   keep in mind also, a lot of Americans live alone compared to other places.

02:20:45   Like in a lot of other countries and cultures,

02:20:49   it's more common for single people to live with their parents still,

02:20:55   or for like if you are a parent and your spouse passes away,

02:21:02   like you move in with your kids.

02:21:04   There's a lot more, I think there's larger families in a lot of other places,

02:21:07   culturally, as like a norm,

02:21:09   and in America, you have a lot more people who live alone,

02:21:11   and Americans are largely like a little bit paranoid

02:21:15   and a little bit scared of being alone,

02:21:17   and so I think that combines to constant audio,

02:21:21   or whether it's TV or music, makes people feel comfort,

02:21:25   that like, oh, there's other people around, I'm not alone.

02:21:27   - It's like when you leave the radio on for your dog when they're home alone.

02:21:30   - Right.

02:21:31   - Do people do that?

02:21:32   - Yes.

02:21:33   - Yeah, you know the thing, like people used to say,

02:21:35   I have no idea if there's any value in this,

02:21:37   but I'm just telling you what people used to say when I was a kid,

02:21:39   and they still do, oh, if you're leaving the house

02:21:41   and your dog is anxious when you're gone,

02:21:43   put on something with human voices, radio, television,

02:21:45   or something like that,

02:21:46   'cause that'll comfort the dog in your absence.

02:21:48   Does it actually comfort the dog?

02:21:49   I have no friggin' idea.

02:21:50   - It's just a thing people said.

02:21:52   I'm surprised you haven't heard that as a dog lover.

02:21:53   - Oh, I absolutely have, yep.

02:21:54   - 'Cause you would think, you know, like dog owners

02:21:56   and like parents, you'll hear advice from everybody,

02:21:58   but that's a thing people would say,

02:22:00   and every time you're talking about,

02:22:01   oh, I like to have audio playing,

02:22:02   I think, oh, you're like a dog who's home alone.

02:22:04   (laughing)

02:22:06   - I mean, that's really cute.

02:22:07   It doesn't sound like it would actually help or work.

02:22:10   - I have no idea if there's any basis to this,

02:22:12   but I know people have, A, said it,

02:22:14   and B, I know people do it.

02:22:16   (beeping)