PodSearch

ATP

366: There’s Nothing You Can Fix in a Day

 

00:00:00 ◼   ► How do you feel? That good? A lot of coughing is happening. Delightful. I have known Jon

00:00:11 ◼   ► for almost 10 years and I have known Marco for what, 20-ish? Maybe a little more? Something

00:00:17 ◼   ► like that. This is the first time I think the two of you have really and truly wronged me,

00:00:23 ◼   ► because you allowed me to install Catalina on my iMac Pro and I have regretted it every

00:00:29 ◼   ► moment of everyday since. You allowed me to install it on mine! It's time for you to take

00:00:33 ◼   ► responsibility for yourself, Kazeem. I was just about to say, ultimately, it was my own fault,

00:00:39 ◼   ► but I'm gonna blame the two of you because I'm so angry at myself for having installed this broke-ass

00:00:47 ◼   ► OS on my computer. I'm so, so angry at myself. So remember when I bought a new computer because my

00:00:57 ◼   ► old one was having this ridiculous issue with its peripherals where it had like that machine-gun

00:01:01 ◼   ► trackpad which was like, you know, there would be a whole bunch of latency and then it would all

00:01:06 ◼   ► catch up and all the haptics would fire all at once. Guess what's happening within a day of

00:01:12 ◼   ► putting on Catalina? All of a sudden the machine-gun trackpad that had not once happened on Mojave,

00:01:17 ◼   ► it's happening a lot on Catalina and I'm so angry. On the plus side, I just ordered a Mac Pro.

00:01:23 ◼   ► Crickets. I'm kidding. Yeah. There's no way. There's no possibility of that. Are you sure

00:01:30 ◼   ► it's not the trackpad? Did we cover this before? How could it be the trackpad? It didn't happen

00:01:34 ◼   ► once in Mojave. Not once. Right, well, so obviously there's something wonky with the OS,

00:01:38 ◼   ► but like maybe there's something wonky with the trackpad that this OS deals with less well than

00:01:43 ◼   ► the previous one. I mean, I am using the iMac Pro trackpad that I bought off of Underscore two years

00:01:50 ◼   ► ago, whatever it was. So I do have the other trackpad, you know, the new trackpad in a box in

00:01:56 ◼   ► the attic. So I could hypothetically go get it. But I knew that Catalina was just paper cuts

00:02:05 ◼   ► everywhere. I knew it. But I wanted that sweet, sweet Swift UI action. And I wanted that sweet,

00:02:11 ◼   ► sweet automatic dark mode action. And I'm going to continue to blame you two just because I'm really

00:02:16 ◼   ► upset at myself and I can't handle it because I'm an immature child. But you let me, the two of you

00:02:21 ◼   ► let me, and Marco, I heard you say earlier as I was talking over you, I let you install Catalina.

00:02:27 ◼   ► We have all failed each other. We have failed each other. You're both fired and I quit. Yeah. I mean,

00:02:33 ◼   ► in my defense, I didn't know how, like, how many little paper cuts there were because like I,

00:02:39 ◼   ► I had only ever used it on my laptop so far and I don't use my laptop full time. I use it only when

00:02:43 ◼   ► traveling. And so, and there's, you know, just using a laptop in general, as much as I love the 16

00:02:47 ◼   ► inch, using a laptop in general is full of tiny paper cuts pretty often. And so I was just kind of

00:02:52 ◼   ► assuming, oh, this is just laptop life, you know, but when, when you use it full time on your

00:02:56 ◼   ► desktop, you really get to know like what's going on here. And like there's, I use way more apps on

00:03:02 ◼   ► my desktop. I do much more consistent and harder and more diverse work on my desktop. I'm doing,

00:03:07 ◼   ► my desktop has just has like more stuff on it. It has more files. It has more apps, you know, so

00:03:13 ◼   ► and, and it's not a clean install. Like the laptops always begin clean as clean installs for me,

00:03:17 ◼   ► usually. And, or at least most of the time, whereas my desktop, I'm, you know, I'm carrying the same

00:03:21 ◼   ► install for usually multiple years at a time. So there's more opportunity, I think, for the paper

00:03:27 ◼   ► cuts to become tangible, I guess, on, on, on desktops or like on, on that, when you upgrade

00:03:34 ◼   ► your primary computer, whatever that is. And so, yeah, so I, I, I did that last week, um, hours

00:03:40 ◼   ► before the show because the new Xcode betas required it. And so therefore my job basically

00:03:45 ◼   ► required it. And I stand by that that was a pretty good reason to upgrade and I'm able to do my work.

00:03:52 ◼   ► But man, there sure are paper cuts here. Like there, it's just little stuff is just broken or

00:03:58 ◼   ► slower than it used to be or fails seemingly silently and like weird stuff breaks. I can't

00:04:05 ◼   ► use sketch anymore to draw arrows on images. And there's like, yeah, you can, you totally can.

00:04:10 ◼   ► I thought it broke. No. Oh, is it, is it like the new crappy one? Like I think I was holding

00:04:14 ◼   ► onto an old one cause they ruined it. Oh yeah. It's definitely got Evernote just plastered all

00:04:19 ◼   ► over the place. It's it's bad. Yeah. I was holding onto like the old pre Evernote one cause Evernote

00:04:22 ◼   ► bought it and ruined it. Okay. Gotcha. Gotcha. Gotcha. So like, and, and, and like I, I, I am,

00:04:26 ◼   ► I have like a carbon copy cloner script that is dying every time I reboot that have to figure out

00:04:30 ◼   ► like, okay, how do I update whatever the heck that is? And, and I like, it's just like upgrading has

00:04:35 ◼   ► had a cost and I still have yet to find any benefit other than it runs the new X code beta.

00:04:41 ◼   ► Like that's, that's it so far. And so I just, I just kind of makes me sad. I, I,

00:04:47 ◼   ► these are the kind of issues that you kind of expect for like the dotto release,

00:04:53 ◼   ► but we're currently on, we're on the dot three release and it's mid February and we're still

00:05:00 ◼   ► having these issues. It, that feels, it feels like this is kind of a dud version. So I just hope that

00:05:08 ◼   ► this is like an anomaly that maybe after this we'll have a few years of better quality software,

00:05:14 ◼   ► you know, between iOS 13 and Catalina. Like this is a bad year, but I hope Apple can show us that

00:05:21 ◼   ► they can have good years again cause I'm starting to have some doubts. Yeah. I don't think I'm quite

00:05:26 ◼   ► to that point. Even as furious as I am, I don't think I'm quite to that point, but I am really

00:05:32 ◼   ► upset. And ultimately as much as I snark and as much as I joke, I didn't have to upgrade. Like

00:05:37 ◼   ► I didn't personally have any need for the X code beta quite yet. And so I could have just stayed on

00:05:42 ◼   ► Mojave and I've been really tempted to downgrade and either do a fresh install again, or use a

00:05:49 ◼   ► super duper backup that I have, which I've, I've never actually restored a super duper backup. So

00:05:53 ◼   ► it's a little scary. I'm not, not because of super duper, just because I've never done it. Yeah,

00:05:58 ◼   ► exactly. But, but anyway, it was ultimately my own doing and I joke and I snark, but it was my

00:06:04 ◼   ► own fault, but it's just bums me out because, you know, it used to be that the new OS and there was

00:06:10 ◼   ► a Twitter thread, I think going around about this. I actually, I think you had commented on it,

00:06:13 ◼   ► Marco, that, you know, it used to be very different that, you know, it used to be so,

00:06:17 ◼   ► so something you got excited for, like I vividly remember it for all its, its warts and issues. I

00:06:23 ◼   ► remember just being overjoyed at doing the Windows 95 install for the very first time and my, my mind

00:06:28 ◼   ► being blown by how different it was. And this isn't, that's a terrible analogy because this is

00:06:33 ◼   ► just another version of the same OS we've had for over a decade. But it's still, I used to get

00:06:37 ◼   ► excited about macOS releases. They used to be mostly okay from day one and now they're just not.

00:06:43 ◼   ► It makes me sad. But if you happen to be an Apple employee who happens to want to make me happy

00:06:49 ◼   ► again, the feedback number 7585056, we will put a link in the show notes unless Marco cuts all this.

00:06:55 ◼   ► Again, feedback 7585056. I have, I have a tailspin logs. I have SIS diagnosis coming out my ears.

00:07:04 ◼   ► I don't want to hear about a project to reproduce it. It's not that kind of bug. Don't even joke.

00:07:08 ◼   ► But yeah, I am, I am trying to, I've even filed a radar. That's how desperate I am to fix this.

00:07:14 ◼   ► That's pretty bad. Please, please radar gods and Apple gods and Apple people and Apple employees,

00:07:20 ◼   ► smile down upon me and fix my problems. Please. Pretty please.

00:07:24 ◼   ► **Matt Stauffer** Yeah. The interesting thing about these small problems is that since there are,

00:07:29 ◼   ► since most of them aren't like deal breakers or showstoppers, until you hear somebody else

00:07:34 ◼   ► describe the same one, it's very easy to think that it's just you. And I had that experience

00:07:38 ◼   ► when Marco was talking about the things that he was having in Catalina. Most of them I didn't have.

00:07:43 ◼   ► So it's like, well, I don't know, maybe Marco's computer is different than mine, but one of them

00:07:46 ◼   ► had overlap. I was like, I never would have thought that that was a Catalina issue, but it's,

00:07:51 ◼   ► you know, hearing Marco do it and I'd never mentioned it to either one of you makes me think

00:07:56 ◼   ► it is. And it was the one where, when you're in the finder and you do something that like examples,

00:08:03 ◼   ► I, you know, I have two folders that are on my internal SSD and I drag a file from one of those

00:08:09 ◼   ► folders to another. It takes so long that a progress bar comes up that says moving item,

00:08:15 ◼   ► dialogue appears, it says moving item. There's a progress bar, the bar, this bar fills,

00:08:20 ◼   ► and then it completes. I'm like, really? I moved the file from one folder to another in my SSD in,

00:08:27 ◼   ► in the finder. And I got a progress bar and it wasn't a fast progress bar. And then Marco

00:08:33 ◼   ► mentioned the same thing, doing stuff in the finder, being slow, like locally weird, very

00:08:39 ◼   ► weird. And I have the same question. Marco always has like, what, what could possibly have changed

00:08:43 ◼   ► to make this happen? I don't know. I don't, I don't. And it's not just like, Oh, I saw that once

00:08:49 ◼   ► there was, you know, that my computer was busy and I just saw it that one time very consistently,

00:08:53 ◼   ► you know, again, it doesn't break anything. The file does move. It happens in a second or two.

00:08:58 ◼   ► So it's not like I'm waiting a long time, but that should not be the type of thing that shows

00:09:03 ◼   ► a progress dialogue ever. Yeah. I mean, you're moving files locally on the internal SSD of the

00:09:10 ◼   ► best computer Apple makes huge amounts of resources and it's not doing anything else. Nothing else is

00:09:15 ◼   ► running. I'm not rendering or compiling X code isn't even running. I'm just in the finder,

00:09:20 ◼   ► basically idle. Yeah. And this is, it's easy for us to look at something like the finder and say

00:09:26 ◼   ► like, what could they possibly have changed? Like it's, it still pretty much works the same.

00:09:31 ◼   ► Why would they need to have messed with anything? And I'm sure it's one of those things where

00:09:34 ◼   ► it's more complicated than we think. And there's more going on. And it's not just the app. It's,

00:09:38 ◼   ► you know, it's the whole OS. Maybe it's not the finder's fault at all. Right. And so I'm sure

00:09:42 ◼   ► there's all sorts of APIs under the hood that maybe they had to change for 32 bit. Maybe they

00:09:46 ◼   ► had to change cause they integrated all the iTunes stuff into the finder now for like device

00:09:50 ◼   ► management, who knows? Like they had, I'm sure they had reasons why they were messing around in

00:09:53 ◼   ► there. But the result is like, this is not how computers should be from the world's best computer

00:10:02 ◼   ► company who shines in particular, at least historically in their attention to detail and,

00:10:09 ◼   ► you know, and their, their amazing OSS and, and how their OS respects the users, you know,

00:10:14 ◼   ► for attention and, and speed and everything. And we're just, we're just seeing that breakdown so

00:10:19 ◼   ► often these days. And it's, and, and, you know, I, there's lots of stuff that's made me mad about

00:10:25 ◼   ► this. Like I, I got real mad about the, you know, news enabling itself notifications and starting

00:10:31 ◼   ► to alert me while I'm doing my pro work in my pro app. Alert me about some BS in the news I don't

00:10:36 ◼   ► care about at all. Cause I don't care about the news at all. And like, this is, this is my

00:10:40 ◼   ► computer. What are you doing? What you're interrupting my work to give me like a breaking

00:10:45 ◼   ► news headline from CNN? I don't care. What, what? I never agreed to that. That's not what this thing

00:10:51 ◼   ► is for. This is a tool for my work. Like, you know, like when a carpenter is, you know, using

00:10:56 ◼   ► a circular saw, does it stop in the middle of what it's doing? Because some politicians said

00:11:01 ◼   ► something stupid. Don't ask questions you don't want answers to for all you know, there are smart

00:11:05 ◼   ► circular saws out there that are doing exactly that. Yeah. Breaking news. Every five boards you

00:11:12 ◼   ► saw, you have to listen to an ad. Yeah, right. Exactly. Have you heard about work chat? Oh God.

00:11:15 ◼   ► Yeah. So like there, there's just, there's so many paper cuts, so many. And the, the number of paper

00:11:25 ◼   ► cuts should be going down with time for a mature platform. That's what the Mac is. It's a mature

00:11:30 ◼   ► platform. Honestly. So is iOS these days. Like when, when platforms are new and they're young

00:11:35 ◼   ► and they're moving fast and they're there, you know, they break more stuff because they're,

00:11:38 ◼   ► they're changing a lot more under the hood and they're moving really fast and, and, and they're

00:11:41 ◼   ► still young and they, they still have to like get their stability into them. Mac OS is not that

00:11:46 ◼   ► neither is iOS frankly. And we shouldn't be having such fluctuations in quality so far into these

00:11:58 ◼   ► product lines, life spans. And that's, that's why I'm just, I'm concerned that like there are,

00:12:03 ◼   ► there are significant problems that who knows, you know, again, we're talking about a giant company

00:12:09 ◼   ► doing things with giant software. Like we don't know the full complexity of what's good, of what

00:12:13 ◼   ► goes on. And they don't talk about it really, but there must be some kind of process issue or some

00:12:18 ◼   ► kind of incentive issue or something that is like systemically causing the quality of a lot of the

00:12:25 ◼   ► software to be declining. And I don't know how to fix that. I don't know how to run a giant software

00:12:30 ◼   ► company. I don't even know how to work with other people. So I'm, I'm the wrong person to tell you

00:12:35 ◼   ► how to fix this, but it sure seems like there is some kind of like systemic issue or structural

00:12:42 ◼   ► issue that a big company is suffering that like big company people need to know how to fix. And

00:12:48 ◼   ► I can't tell you what that is, but surely it's their job to figure that out. All right, let's

00:12:53 ◼   ► try to turn all these frowns upside down, especially my own and let's do some followup. And

00:12:58 ◼   ► we start with Jeff Hobbs. We had said, one of us had said, probably John, there's no Swift

00:13:04 ◼   ► playgrounds for JavaScript. And apparently they're kind of sort of is, and it's called Grasshopper.

00:13:08 ◼   ► And that's about all I know about it. Yeah. There are a lot of these, uh, you know, learn to program

00:13:12 ◼   ► type things that I've seen. Most of them aren't that great because Grasshopper one looks pretty

00:13:16 ◼   ► darn good. It's there's a web version and an Android version and an iOS version. And they're

00:13:20 ◼   ► all, you know, you were programmers. So we kind of know the job that they have to teach people,

00:13:24 ◼   ► like they're going to teach people about loops and conditionals and variables and functions. And,

00:13:28 ◼   ► you know, and then just go from there, like just the basics of programming, but you want to do it

00:13:32 ◼   ► in a way that doesn't turn people off. Doesn't feel like academic, like, oh, you know, math

00:13:38 ◼   ► variables, algorithms, so boring. You want to see something like that. That's the great thing about

00:13:43 ◼   ► Swift playgrounds. Oh, there's a, you know, it's a 3d rendered thing with a friendly little cartoon

00:13:49 ◼   ► robot and you get to make the move and they hop. And, you know, that's not part of the programming,

00:13:53 ◼   ► but it's your kind of reward. And in my day, we had a thing called a turtle and it was on your

00:13:57 ◼   ► screen and you use logo to make it move around. And it was not as graphically rich, but it was

00:14:01 ◼   ► still way cooler than, you know, input a dollar sign, whatever, like 10 print, you know, well,

00:14:07 ◼   ► 10 print go to 20 was pretty still pretty good. But anyway, having some kind of visual reward

00:14:13 ◼   ► when you're doing things. So all these have some sort of, you know, the web based ones are great

00:14:18 ◼   ► because you get to use the web technologies to throw something up on the screen immediately,

00:14:21 ◼   ► whether it's drawing boxes or lines or changing things to be different colors or responding to

00:14:26 ◼   ► clicks, all of which is not the point of what they're teaching you. They're just trying to

00:14:29 ◼   ► teach you the basics of programming, but having sort of cool stuff hooked up to it is key to

00:14:35 ◼   ► keeping it interesting and keeping the person engaged because then they feel like,

00:14:39 ◼   ► you know, that's always the barrier. It's like, OK, so I understand variables, conditionals and

00:14:44 ◼   ► loops. What can I do with that? And the answer is, oh, learn this incredibly complicated API and all

00:14:50 ◼   ► the nuances of this language that you don't even know yet. And then you can get a button on the

00:14:54 ◼   ► screen. That's no fun. But if it's like in the course of learning the very, very basics, you're

00:14:58 ◼   ► already making things happen on a screen. That's great. That's why people love to learn HTML and

00:15:04 ◼   ► JavaScript, because even at the most basic level, things go on the screen. You know, you put text

00:15:09 ◼   ► on the screen, you make it bold. It's really easy to make a button. It's really easy to make

00:15:13 ◼   ► paragraphs of text. Right. And then making that button do something when you click it is not

00:15:16 ◼   ► that hard and you're off to the races. Grasshopper app, check it out. And there are lots of other

00:15:21 ◼   ► similar things out there. You don't need an expensive iPad or a Mac and Swift playgrounds

00:15:27 ◼   ► to learn programming. All right. Moving on. Maciej Zalarczyk. I hope I got that somewhat close to

00:15:33 ◼   ► right. I looked it up beforehand and I did my best. So we'll go with that. When it comes to

00:15:38 ◼   ► butterfly keyboard, the combination of extremely low travel and minuscule spacing between keys

00:15:42 ◼   ► means that I am either activating two keys at once, like A and S or G and H and so on,

00:15:46 ◼   ► or I bottom out on each key press, putting strain on my theanar, theanar? T-H-E-N-A-R. I have no

00:15:51 ◼   ► idea how to pronounce that. I should have looked that one up too. Anyway, it is like repetitively

00:15:55 ◼   ► pressing on a hard glass surface. My hands start to hurt after an hour or two of usage. Then there's

00:16:00 ◼   ► a sharp edge on the touch bar MacBooks, which can cut off blood flow to my hands if I'm not careful.

00:16:05 ◼   ► This sounds like a really enjoyable setup for you. My goodness, that's not fun. This is in response

00:16:10 ◼   ► to me saying that the bad keyboards on Apple laptops are not responsible for RSI because,

00:16:15 ◼   ► you know, a key that you have to press less hard is better for RSI and worse. But this bit of

00:16:21 ◼   ► feedback is important because regardless of what keyboard is put in front of you, things that you

00:16:27 ◼   ► do can drastically change how your body reacts to it. So starting from the back end of this thing,

00:16:33 ◼   ► the sharp edges of the, of the, uh, also the sharp edge of the tuck bar, touch bar, which can cut off

00:16:39 ◼   ► blood flow to my hands. I don't think he means the touch bar. I don't know. Trackpad maybe? Yeah,

00:16:43 ◼   ► yeah, yeah. I suppose so. Anyway, uh, that the first point is it's very bad for your hands to

00:16:49 ◼   ► rest your wrists on anything while you type. Like you don't want any pressure on the, that,

00:16:54 ◼   ► that area that all of your muscles and tendons are sliding through. If you squish that stuff together,

00:16:59 ◼   ► even just by the weight of itself, that's bad. You put it on something sharp, that's even worse.

00:17:03 ◼   ► So in general, ergonomically speaking, when you're typing, your wrists should not be resting

00:17:07 ◼   ► anything. Yes. I know they sell wrist rest with these foamy things. Yes. People do rest their

00:17:12 ◼   ► wrists on things. What people do and what is ideal for avoiding RSI are two very different things.

00:17:17 ◼   ► So that's one thing. The second thing is how hard you type. I, you know, had the Apple extended

00:17:23 ◼   ► keyboard too for years and years and years. And because it's a big mechanical keyboard,

00:17:28 ◼   ► it does require more force to press each key. There's more travel and you actually have to

00:17:32 ◼   ► press harder. Uh, but one of the things I found in my, you know, experience with RSI is, uh, at

00:17:38 ◼   ► times when you're under stress under a deadline programming, or even just under stress playing

00:17:43 ◼   ► games, a competitive game or something, um, you will find yourself, your whole body tensing up and

00:17:49 ◼   ► pressing harder on the keyboard. And in general, the harder you press on the keyboard, the worse

00:17:54 ◼   ► it is for your RSI. Uh, so getting a keyboard that requires less effort is generally a good idea

00:18:00 ◼   ► because in theory, Oh, I don't have to press as hard as anymore. The problem is if you still press

00:18:05 ◼   ► justice hard, you're not helping yourself. Like the only, the only way you get the benefit of

00:18:09 ◼   ► a keyboard that requires less pressure to press is if you use less pressure, if you use the same

00:18:14 ◼   ► amount of pressure, you're not getting any benefit. Um, and it may feel even worse because you're

00:18:19 ◼   ► using the same amount of pressure and you don't have any sort of travel to cushion the blow of

00:18:23 ◼   ► your mighty fingers as you, as you press really, really hard. Um, so yeah, I mean, we've talked

00:18:29 ◼   ► about RSI before, but in general, be aware of your body, be aware of what you're doing. And, uh, if

00:18:35 ◼   ► you can move your, your habits in a couple of different directions, one is try to rest your

00:18:41 ◼   ► wrists less on things, try to do it less, try to, you know, not rest them at all, ideally, but if

00:18:46 ◼   ► you're going to rest and do it less. And the second is press less hard when you type, obviously you

00:18:50 ◼   ► have to press hard enough to make the key activate. So if you have to get a keyboard that has a lighter

00:18:54 ◼   ► effort, then do that. But in general, be aware of how hard you're pressing. Be aware that when

00:18:59 ◼   ► you're under deadline that you end up pressing harder, that's bad for you. Don't do that. Chill

00:19:03 ◼   ► out. All right. We do have some good news coming from bad news. Your finder toolbar bug has been

00:19:12 ◼   ► defeated question mark? Maybe, uh, this, uh, this makes me feel bad about this bug because I

00:19:20 ◼   ► suffered under under it for such a long time. And other people reported it to us. I'm like,

00:19:24 ◼   ► oh, it's not just me. Other people have this, you know, most people don't care about the final

00:19:27 ◼   ► toolbar, but I heard from enough people. I'm like, oh, it's not just me. Other people have this

00:19:31 ◼   ► deal as well. Then somebody suggested I should have saved the name. I just, I saw it in passing.

00:19:35 ◼   ► I'm like, oh, well, whatever. Um, someone suggested a solution that I should have tried ages ago,

00:19:40 ◼   ► but didn't just because it seemed so unlikely to help with such a weird bug, which is the usual

00:19:46 ◼   ► thing. Nuke your preferences, just delete your preferences. Like I hadn't changed my preferences.

00:19:50 ◼   ► There's nothing in preferences related to this. My preferences were not borked or corrupt. Every

00:19:55 ◼   ► other setting that I expected to be there was there. So preferences seem fine, but I'm like,

00:20:00 ◼   ► well, I'll try anything once I nuke my preferences. Haven't seen the bug since.

00:20:05 ◼   ► Now the thing is all of my preferences are gone and I had to set them back. And also it seemed to

00:20:13 ◼   ► reset the state of my windows, which makes no sense because there's nothing in anyway,

00:20:19 ◼   ► I'm glad that it worked. I deleted my preferences. And by the way, if you do this and it doesn't

00:20:23 ◼   ► change anything for you, keep in mind that preferences are not as simple as they, I don't

00:20:27 ◼   ► know if they ever were, maybe they were at one point early in Mac OS X history where there is

00:20:32 ◼   ► a property list file. And if you delete it, your settings are gone. There's more to the system that

00:20:36 ◼   ► of settings than that property list file. There's a daemon process running that helps

00:20:42 ◼   ► corral changes to that file. Um, so if you just delete it and don't relaunch the finder,

00:20:49 ◼   ► even if you delete it and do relaunch the finder, it may just write back your old preferences just

00:20:52 ◼   ► the way they were. So it's a little bit tricky. You got to, you know, kill the CF preferences,

00:20:57 ◼   ► daemon or CF pref to see or whatever the hell it's called, you know, delete the file, kill the daemon,

00:21:01 ◼   ► restart the finder. You'll know when you've done it because all your settings will be gone and

00:21:06 ◼   ► everything in the finder will be not the way you like it. That's that shows that you succeeded.

00:21:09 ◼   ► But I think it is pretty much cured my magical reappearing toolbars. I'm still wandering through

00:21:16 ◼   ► my windows, resetting all the toolbars, but I'm pretty sure every time I do it once for a window,

00:21:21 ◼   ► they don't come back. So let me switch to finder here for a moment. Yeah, I'm looking at my finder

00:21:25 ◼   ► windows and none of them have toolbars. That's the way it should be. So I'm sorry, what was the

00:21:30 ◼   ► mechanism for nuking your preferences? What, what did you actually do? I was just saying that you

00:21:34 ◼   ► can't just delete the file. So first you have to know where the preferences are. They're like

00:21:37 ◼   ► library preferences, you know, and then com.apple.finder or whatever you got to know where

00:21:40 ◼   ► that stuff is. Second is if you just delete that file, it would just get rewritten by the

00:21:44 ◼   ► preferences demon, which I think is called CF pref, C F P R E F S D something like that. So I always

00:21:51 ◼   ► just delete the file and immediately kill that demon process. And then I also relaunch the finder

00:21:57 ◼   ► for good measure. And I usually do it all in a single command line with statements separated

00:22:01 ◼   ► by semi-colons or whatever. Like there's no convenient, easy way to do that. You can also do

00:22:06 ◼   ► like defaults, delete com.apple.finder. There's lots of different ways to do it. I'm just warning

00:22:11 ◼   ► people that if you just think deleting the file is enough to do it and it doesn't help you,

00:22:15 ◼   ► that's insufficient. You have to do more. Um, it's not the type of process that I recommend

00:22:19 ◼   ► people do cause you can really hose yourself by accidentally deleting stuff. And you know,

00:22:23 ◼   ► I made a backup copy of my preferences first and yada yada. I can generally don't recommend this.

00:22:27 ◼   ► If you don't have this problem with your toolbars, don't mess with your preferences. You can really

00:22:32 ◼   ► screw things up, but I'm just wanting to pass on that. Uh, this actually did as far as I can tell

00:22:37 ◼   ► work for me and I'm very happy. And speaking of Catalina with the paper cuts, I have the paper

00:22:42 ◼   ► cuts too. You know, we just talked about them, but I continue to be mostly okay in terms of,

00:22:49 ◼   ► you know, so it's like, it's all just paper cuts. There's nothing. I don't have the machine

00:22:54 ◼   ► gun track pad. It's not crashing. It's not hanging, you know, so I'm, I mean, I'm, I'm doing okay with

00:23:01 ◼   ► it. I, I prefer something that performed better and didn't have all those paper cuts, but it's not

00:23:07 ◼   ► catastrophic from my perspective. So I think I'm just lucking out.

00:23:10 ◼   ► Well, it's all coming up Milhouse this time, I guess. Maybe I need a $15,000 computer and my OS

00:23:17 ◼   ► will work properly. Maybe you didn't spend enough money on your computer. You ever think of that?

00:23:20 ◼   ► Yeah, maybe that's what Apple would say. Apple would say, Hmm, Casey, I see your problem.

00:23:24 ◼   ► You're using a used track pad from somebody else's computer.

00:23:27 ◼   ► That's gotta be it. Uh, is Mac malware getting worse or no? What's going on there?

00:23:33 ◼   ► It was, I didn't follow too much of the, there was some company that had put out a big thing about how

00:23:39 ◼   ► Mac malware is getting worse and it's twice as bad as PCs and whatever. There's a very sort of

00:23:43 ◼   ► sensational headline about how terrible Mac malware was. Jason Snell had a good response to it. We'll

00:23:48 ◼   ► link to in the show so you can read it. Um, it was, this was related to our previous discussion.

00:23:53 ◼   ► I think it was an ask ATP. Someone said, you know, all my windows friends use antivirus stuff, but

00:24:00 ◼   ► my Mac using friends don't. What's the deal with that? Uh, and I came down on the side of saying,

00:24:05 ◼   ► you know, max are not invulnerable. They can get viruses and malware and edware and all

00:24:09 ◼   ► sorts of bad things. But in general, my experience with antivirus software for the Mac has

00:24:15 ◼   ► led me to continue to recommend that regular users not install it. We've got some feedback

00:24:20 ◼   ► that people are like, Oh, people who don't use antivirus recommending against it. I've had

00:24:24 ◼   ► mandatory antivirus software on my computer at work for over a decade. Like I have vast experience

00:24:30 ◼   ► with antivirus software, eight hours a day, many different brands, many different operating systems,

00:24:35 ◼   ► many different pieces of hardware, all max. Right. So I do not lack experience in this area.

00:24:40 ◼   ► It is a trade off though. Like there, you know, you, people are vulnerable to getting crap

00:24:47 ◼   ► on their Macs, but I feel like still net net the crap that is most antivirus software is worse.

00:24:55 ◼   ► And not because they're bad quality. Some of them are bad quality. Some of them are shady,

00:24:58 ◼   ► but even the best ones with the best intentions, the thing they're trying to do to insert

00:25:03 ◼   ► themselves between what's happening on your computer. Like before each thing that happens,

00:25:09 ◼   ► that could potentially be dangerous, insert themselves and mediate that and see whether it's

00:25:13 ◼   ► safe inherently is potentially buggy and potentially slow. And then the other things

00:25:19 ◼   ► where routinely they will, you know, wander over your entire computer and do something for

00:25:23 ◼   ► everything on your computer that is also inherently slow and burns battery and makes everything slower

00:25:27 ◼   ► or whatever. So I still recommend that Mac users shouldn't install any shouldn't buy and install

00:25:35 ◼   ► any antivirus software. Like reflexively like, Oh, you got a Mac, you got to get antivirus software.

00:25:40 ◼   ► You want to install a clipboard, clipboard history thing reflexively fine. You want to install a

00:25:45 ◼   ► launcher like launch bar reflexively fine, but I still think that is not the right move to say,

00:25:49 ◼   ► Oh, you got a Mac you've got to have in search antivirus program. You don't. I think you don't.

00:25:54 ◼   ► That said though, Marco mentioned like Catalina and we've talked to this before,

00:25:59 ◼   ► lots of paper cuts, lots of annoying things, but what's the benefit other than like, okay,

00:26:03 ◼   ► now I can run the latest X code or what, what benefit I'm getting. And one thing we heard from

00:26:07 ◼   ► a lot of the feedback from people who are sort of in the field and coming down the side that,

00:26:11 ◼   ► you know, Mac malware is worse than you think, not in terms of viruses, but just in terms of

00:26:15 ◼   ► crap that tricks people into installing it on their computer and then just throws ads in their

00:26:21 ◼   ► faces or does other annoying things or changes their homepage, or is very difficult to install.

00:26:25 ◼   ► That has definitely gotten worse over the years on the Mac. And it's, you know, antivirus can kind

00:26:33 ◼   ► of help, but in general, these are programs that users are technically quote unquote,

00:26:38 ◼   ► choosing to install, you know what I mean? So there's only so much an antivirus anti-malware

00:26:43 ◼   ► thing can do if it doesn't recognize this particular variant of this thing,

00:26:47 ◼   ► or some of them are semi-legitimate. Well, it's like, well, it's not malware. It's just

00:26:52 ◼   ► a program of dubious utility that shows a lot of ads and is hard to uninstall and

00:26:59 ◼   ► again, this is a wishy washy area, but anyway, like zoom, but Catalina, according to a lot of

00:27:06 ◼   ► people who wrote into us has really helped in this regard, all of that crap that annoys us

00:27:11 ◼   ► about constantly asking permission for things and refusing to run unless given 25 okay.

00:27:17 ◼   ► Is it all that stuff actually makes it much more difficult for people to basically willingly,

00:27:24 ◼   ► you know, like, Oh, well you installed this piece of adware, right? You have to click through

00:27:29 ◼   ► more things to make that happen. Now there are fewer things that programs can do without asking

00:27:34 ◼   ► for permission and that adds friction to the experience. And the upside is the people who

00:27:39 ◼   ► are on the front lines of supporting people with Mac say the people who have Catalina have far

00:27:44 ◼   ► fewer cases of they come in and their computer is just festooned with adware and other sort of

00:27:50 ◼   ► junk software, just because it's harder for the junk software to get a foothold in Catalina,

00:27:55 ◼   ► because it requires so much more tedious interaction from users. If you're a developer,

00:28:00 ◼   ► it's annoying. I know lots of Mac developers are annoyed, like, Oh, my perfectly legitimate program

00:28:04 ◼   ► now has to walk people through this process of open system preferences, go to security and privacy,

00:28:12 ◼   ► go to this tab, press the little plus button, navigate to find my app, select the app,

00:28:17 ◼   ► go click, you know, because before you do that, my app can't do anything. And previously you didn't

00:28:21 ◼   ► have to do any of that. That's annoying and that's difficult, but that's exactly the stuff that makes

00:28:25 ◼   ► it more difficult for these borderline malware adware junk stuff to get a toehold. So I think,

00:28:34 ◼   ► to be fair, for all of the pain and inconvenience that it's causing all of us,

00:28:39 ◼   ► there is actually an upside to that. Mostly that doesn't benefit us because we're not

00:28:44 ◼   ► installing malware. Well, except I did install this logic drivers, but that's unfair. So far,

00:28:51 ◼   ► they've been fine, but I do occasionally install things against my better judgment.

00:28:55 ◼   ► But for other people who are not as, you know, into computers as a hobby, it is a safer environment

00:29:03 ◼   ► for them just because it is harder for them to do something that screws up their system.

00:29:08 ◼   ► We are brought to you this week by Squarespace. Start building your website today at

00:29:13 ◼   ► squarespace.com/ATP. Enter offer code ATP at checkout to get 10% off. Make your next move

00:29:20 ◼   ► with a beautiful website from Squarespace. I know a lot of you are programmers. I'm a programmer.

00:29:24 ◼   ► I can write my own CMS. I have. Many of you probably have too, but the reality is it's not

00:29:30 ◼   ► really worth writing your own CMS for most websites anymore. It isn't even worth installing one of the

00:29:35 ◼   ► pre-made ones on your own server anymore. Really, Squarespace is such an incredibly pragmatic option,

00:29:41 ◼   ► even if you know how to make websites, because with Squarespace, you can make amazing looking

00:29:46 ◼   ► websites with incredible rich functionality with almost no effort at all, and they will look

00:29:52 ◼   ► amazing. They will look better than anything that I know I could ever make, let alone, I don't know

00:29:56 ◼   ► what your skills are, but they look way better than anything I could ever make. And they have

00:29:59 ◼   ► functionality I would never want to write myself, like storefronts or analytics, stuff like that.

00:30:04 ◼   ► They have all that built in, galleries, they have splash pages, all this amazing stuff that I didn't

00:30:09 ◼   ► have to build myself. And then once your site's up and running, they keep it up for you. So you

00:30:14 ◼   ► don't have to support it. You don't have to run software updates on your servers. You don't have

00:30:18 ◼   ► to worry about your servers going down and have monitoring services and stuff. You don't need any

00:30:22 ◼   ► of that with Squarespace because they take care of all that for you. So the reality is, no matter

00:30:26 ◼   ► what your skill level is, whether you're a total novice or whether you are a programmer who can

00:30:30 ◼   ► make your own CMS from scratch if you really want to, Squarespace is the best option most of the

00:30:35 ◼   ► time for most sites. So check it out today, no matter what your skill level is. No coding is

00:30:39 ◼   ► required, no updates, none of that. Super great support, easy to use. See for yourself at

00:30:43 ◼   ► squarespace.com/ATP where you can start a free trial site. You can build the whole site there

00:30:48 ◼   ► before you pay anything. When you decide to sign up for Squarespace, make sure to head back there

00:30:51 ◼   ► squarespace.com/ATP. Use offer code ATP to get 10% off your first purchase. That's squarespace.com/ATP,

00:30:59 ◼   ► code ATP. Make your next move with a beautiful website from Squarespace.

00:31:03 ◼   ► I wanted to ask you guys a question that I saw fly by on Twitter a while ago, and it was not directed

00:31:12 ◼   ► at Austin in any way, shape, or form, but I thought it was interesting. This is Contra on Twitter who

00:31:17 ◼   ► has a Twitter handle @counternotions, and they write, "Which is in the most dire need of a

00:31:22 ◼   ► competitive product by Apple? A, an internet Wi-Fi/router with non-tracking VPN; B, a digital

00:31:30 ◼   ► media player/microconsole; C, a home automation orchestration center; or D, server-side Swift and

00:31:38 ◼   ► cloud computing platform?" Are you getting it yet, Casey? These are not four separate

00:31:42 ◼   ► products. This is one product, and we're calling it i-Thing.

00:31:46 ◼   ► - i-Thing, yep, I need a thing. I need an i-Thing in my life. I don't know, I saw this and I just

00:31:53 ◼   ► thought it was interesting, and in classic Casey fashion, I'm hard-pressed to pick one that I think

00:31:59 ◼   ► is absolutely the winner. I think if I had to pick sitting here right now, and ask me again in 10

00:32:05 ◼   ► minutes, I'll change my mind, but I think I would really love to see Apple really and truly embrace

00:32:11 ◼   ► server-side Swift and have some sort of cloud computing thing. I don't know if that would end

00:32:16 ◼   ► well, and this is where all the people start firing off emails to me about how Apple does

00:32:19 ◼   ► support server-side Swift. No, I mean like really support server-side Swift. I think that would be

00:32:24 ◼   ► the most fascinating to me and most interesting, but Marco, what do you think between internet

00:32:29 ◼   ► Wi-Fi/router, non-tracking VPN, digital media player or microconsole, a home automation or

00:32:34 ◼   ► orchestration center or server-side Swift, which I know how much you just really are looking for

00:32:39 ◼   ► different server-side language to use. I know you're just so sick of using PHP, so I would

00:32:44 ◼   ► assume you agree with me here. Yeah, of course. No, of course not. He's not going to pick one

00:32:50 ◼   ► from this list because in true top four fashion, he would suggest a letter E, so go ahead, Marco.

00:32:55 ◼   ► I've predicted. First of all, digital media player/microconsole, what does that even mean?

00:33:02 ◼   ► As far as I can tell, that's like the iPhone, right? It's like a console, but smaller. Like the

00:33:06 ◼   ► iPhone that's also a digital media player, right? Almost everything Apple makes is a digital media

00:33:11 ◼   ► player/microconsole these days, so I don't think that's a particular need. I think they already

00:33:16 ◼   ► serve that need. I think microconsole is, I think he's describing Apple TV, like a small thing that

00:33:23 ◼   ► connects to your television. They mean game console? I don't know. Let's just cross out B.

00:33:27 ◼   ► No one knows what it is. Yeah, what's a digital media player? Is it a phone? Because it used to

00:33:31 ◼   ► be like an iPod or something, but we don't have those anymore. I would assume this is

00:33:35 ◼   ► either like a console video game player, something more switch-esque, or alternatively, something

00:33:44 ◼   ► more like a Fire Stick, a Fire TV Stick. That's not a console. So it's the Apple TV.

00:33:48 ◼   ► Apple TV is basically a microconsole. Imagine Apple TV, but it came with a controller.

00:33:54 ◼   ► I don't know. Yeah, imagine Apple TV, but the games thing actually worked out, basically.

00:33:57 ◼   ► So yeah, I mean, fine, I guess. That's not really a thing. Or at least it isn't a thing that Apple

00:34:04 ◼   ► seems capable or willing to make. Home Automation Orchestration Center. Isn't that a home GitHub,

00:34:11 ◼   ► which Apple TVs and HomePods already are? I think that when I look at that, I think they mean

00:34:17 ◼   ► something like the home devices that have screens, like the Amazon thing. It's basically like a Home

00:34:24 ◼   ► Pod with a screen on it. Okay, so I guess Orchestration Center, I guess if it's interactive

00:34:30 ◼   ► by the owner instead of just like-- Yeah, it's always on, it's got a screen, you can control

00:34:34 ◼   ► all your HomeKit stuff from it. It's also a speaker. Like Google's got one, Amazon's got one.

00:34:38 ◼   ► Right. But see, that would require Apple to have a useful-- First of all, it would require HomeKit

00:34:45 ◼   ► to be way more solid than I think it is, and it would require them to have much better care and

00:34:52 ◼   ► skill towards designing the home interface, which they don't seem to care about. So I don't see that

00:34:59 ◼   ► really being a thing. The Wi-Fi router/non-tracking VPN, that is interesting. They already did in the

00:35:10 ◼   ► past make Wi-Fi routers that were very good for a long time. As Wi-Fi routers got more complicated

00:35:16 ◼   ► and started integrating more like service-y stock components, Apple built out of the market.

00:35:20 ◼   ► I think they could do a really good job with that if they really wanted to.

00:35:25 ◼   ► That seems like a big if though, it seems like they have no interest, but that wasn't the

00:35:28 ◼   ► question, so admittedly. But that I think would be interesting because there are very, very few

00:35:34 ◼   ► companies now making routers that aren't either owned by the ISPs and just put whatever the ISPs

00:35:43 ◼   ► want on it, which is probably what most people use, or all the aftermarket ones are from a

00:35:47 ◼   ► decreasingly small number of networking equipment companies and more consumer-facing brands like

00:35:54 ◼   ► Eero and stuff like that. They keep integrating more and more service stuff and some of them get

00:36:00 ◼   ► bought by bigger companies. I feel a little uncomfortable about that market, to be honest.

00:36:05 ◼   ► I'm perfectly happy with my regular home nerd setup by Ubiquiti, but what if somebody big buys

00:36:11 ◼   ► Ubiquiti? Then I've got to figure something else out. Or what if Ubiquiti turns bad? What if they

00:36:14 ◼   ► start wanting more analytics because they're not making any money off of existing installations?

00:36:19 ◼   ► Who knows? That kind of stuff can happen to any company. Maybe that would be my pick here.

00:36:25 ◼   ► The other option, server-side Swift and cloud computing platform,

00:36:30 ◼   ► I think I'm going to be one of those people that Casey just said, "Please don't email him."

00:36:33 ◼   ► As much as I would love for Apple to really put a successful amount of effort into

00:36:43 ◼   ► making server-side Swift really awesome and really a thing, and also to have a cloud computing platform,

00:36:49 ◼   ► I don't know what that means. Is that like Amazon Web Services kind of thing, or App Engine,

00:36:54 ◼   ► or that kind of thing? Yeah, it means like Google Cloud and AWS.

00:36:58 ◼   ► Azure, yeah. If it's one of those kind of things, frankly, I don't love those things. That's why I

00:37:02 ◼   ► keep using Linode for all my servers because I like having more direct control over my servers.

00:37:08 ◼   ► I don't like more abstracted hosting concepts because typically the more abstracted ones

00:37:14 ◼   ► have harder to determine performance characteristics under certain loads until you just try it.

00:37:20 ◼   ► And typically the cost control is very difficult. The more abstract or high-level

00:37:28 ◼   ► computing platforms tend to be more expensive by a significant margin for the amount of computing

00:37:32 ◼   ► power I tend to need with my server stuff than the more basic do-it-yourself, either dedicated

00:37:39 ◼   ► or VPS hosts, like what I tend to use. So I personally don't have any need for that. I think

00:37:44 ◼   ► it could be interesting. But server-side Swift as a separate thing, I would love that because,

00:37:49 ◼   ► as I mentioned, you said, you joked that I do love PHP, and that's true. But if I have to learn

00:37:54 ◼   ► Swift anyway, and if my career is going to require mastering Swift in this other area of iOS

00:38:00 ◼   ► development, it would be nice if I could use the same language and master the same language and

00:38:04 ◼   ► build all those same skills once instead of continuing to have two completely different

00:38:09 ◼   ► languages that I use for the two different halves of my app's functionality, basically,

00:38:13 ◼   ► like the web half and the app half. So that would be great. But I don't know how realistic that is.

00:38:20 ◼   ► But again, that wasn't the question. So I guess I'm talking myself into the server-side Swift

00:38:25 ◼   ► or the internet router. But OK, because back to the router problem, the problem with the router

00:38:30 ◼   ► is how much impact can you really have there? Because again, most people in the US at least,

00:38:36 ◼   ► I don't know how it is in other places, but the market in the US is almost everyone just uses the

00:38:40 ◼   ► router that their internet provider provides or forces them to rent every month. And so

00:38:46 ◼   ► there's that. The Steve Jobs, there's no go-to-market strategy here. There's a reason why

00:38:53 ◼   ► there's a lot of consolidation in the router business. It's a hard business because most

00:38:58 ◼   ► customers in the US of broadband internet, which is most people, just have one for free or for

00:39:03 ◼   ► quote "free" that they don't need. They don't buy an aftermarket one at all. And then Apple surely

00:39:08 ◼   ► would not be competing on price with any of the other aftermarket ones. They'd be a premium entry.

00:39:12 ◼   ► And you can look and you can see, OK, there are other premium entries in the Wi-Fi business,

00:39:16 ◼   ► like Eero is past sponsor of the show, possibly future sponsor. I don't know. They're a great

00:39:20 ◼   ► example. They are not cheap. They're good. They went for the high end and they succeeded, I think.

00:39:27 ◼   ► But Apple would have to then compete with other people who are doing, who are in the same business.

00:39:32 ◼   ► Like when Apple was making $300 Wi-Fi routers and everyone else is paying 80 bucks for theirs,

00:39:36 ◼   ► not everyone else was, like there was nobody else competing for the high end. Apple was

00:39:41 ◼   ► almost the only high end option that wasn't like an enterprise solution.

00:39:45 ◼   ► Here they would have more competition in that high end market and they would have to move faster.

00:39:51 ◼   ► They would have to do things like mesh networking and they would have to do things like add on

00:39:56 ◼   ► services, like ad blocking VPNs and stuff like that. That allows the other companies are offering now.

00:40:00 ◼   ► And so do I really think Apple has that in them? I don't think so. I think even at the peak of their

00:40:08 ◼   ► router business, when they were making solid products that were well regarded and were pretty

00:40:13 ◼   ► competitive on everything but price, which is what we can expect from Apple, even then, they weren't

00:40:19 ◼   ► moving quickly. They weren't like, you know, really, like they weren't putting a lot of effort into

00:40:23 ◼   ► their Wi-Fi router. Like they were fine. They were good for a while and then they went away.

00:40:26 ◼   ► So I can't imagine. I think part of the reason why they built out of the market is that the market

00:40:31 ◼   ► was starting to require them to move quickly and to put more effort into that and they just didn't

00:40:36 ◼   ► care enough. And so I think if they were to reenter that market, that same fate would probably occur

00:40:43 ◼   ► again. So therefore, I'm going to reluctantly, with a heavy heart, vote for D, server-side Swift

00:40:51 ◼   ► and cloud computing platform, with the caveat that I like this option a lot better if those are two

00:40:56 ◼   ► separate things. If the server-side Swift is able to be run on any server platform and they happen

00:41:03 ◼   ► to also offer a cloud computing platform that nobody except them will ever use.

00:41:06 ◼   ► - I did not see that ending coming.

00:41:08 ◼   ► - Well, look at the, look, the other options are all terrible.

00:41:11 ◼   ► - All right, Jon, what do you got?

00:41:13 ◼   ► - We talked about cloud computing platform, I think, a while back. I think where I came down

00:41:18 ◼   ► that is that it's basically unavoidable. Apple either needs to do what Amazon and Google and

00:41:28 ◼   ► Microsoft have done or resign itself to forever paying one or all three of those companies huge

00:41:34 ◼   ► amounts of money. That is a core part of their business, own and control the key technologies,

00:41:40 ◼   ► blah, blah, blah. Increasingly, that is a core part of their business, has been for a long time,

00:41:45 ◼   ► and it's not going the other direction, it's just increasing. So by not doing that, Apple is

00:41:52 ◼   ► not fulfilling its vision to own and control the most important technologies, and therefore,

00:41:59 ◼   ► it is dependent on its competitors to a degree that it might not like, and less of a concern now,

00:42:06 ◼   ► but maybe more of a concern in the future. It is potentially losing a lot of money for that.

00:42:13 ◼   ► The thing about cloud computing, as Marco pointed out, is it's very convenient and it makes lots of

00:42:18 ◼   ► sense when you're looking at having to pay people to run all your stuff, right? If that's the

00:42:25 ◼   ► alternative, like we have to hire a bunch of employees and run our own data centers or

00:42:29 ◼   ► whatever, that's no good, so let's pay someone else to do it. But once you're signed up to that

00:42:33 ◼   ► thing, it's a big moneymaker. I think I saw a story fly by that Azure is set to become the

00:42:38 ◼   ► largest source of income for Microsoft if trends continue, or maybe it already is, but like,

00:42:43 ◼   ► anyone who's ever used AWS knows your AWS bills can get big. There's a profit margin on all that

00:42:49 ◼   ► stuff. It's easy to accidentally use a lot of money, and you have to very carefully control

00:42:56 ◼   ► your resource usage to try to keep costs where you expect them to be. A lot simpler with something

00:43:02 ◼   ► like Linode, but somehow Linode is not a solution for something at Apple's scale, right? So

00:43:08 ◼   ► Apple pays those other companies to run its stuff, and that is money that it's giving away.

00:43:14 ◼   ► That said, I don't think Apple would be particularly good at that, but it's the type of

00:43:18 ◼   ► thing where it's like, well, a certain point you may have waited too long, or it's no time to...

00:43:25 ◼   ► The best time to plant a tree is 30 years ago, the second best time is right now, that whole thing.

00:43:29 ◼   ► So I don't know. I'm not going to pick that item, but I still have that same itch about cloud

00:43:35 ◼   ► computing. It's not a need that's going away, and if Apple doesn't do it itself at all,

00:43:41 ◼   ► it's going to be a disadvantage in the long run. Server side Swift, I think Apple is not the type

00:43:50 ◼   ► of company that... I don't know. It's not a good fit. To make something take off on the server side,

00:43:57 ◼   ► to make it actually be a viable thing, because Apple doesn't really make servers,

00:44:03 ◼   ► and it doesn't have a server OS, and it's not invested in the server ecosystem beyond running

00:44:07 ◼   ► its own stuff, it's very difficult to get over the hurdle to the point that popular server side

00:44:13 ◼   ► languages have. PHP, Java, even JavaScript. There are communities built up around that,

00:44:19 ◼   ► of developers all over the world whose job is to write server side software, and they rally around

00:44:27 ◼   ► IDEs, frameworks, libraries, the whole Java ecosystem of web applications,

00:44:34 ◼   ► all the different frameworks for doing that, all the Node.js stuff, and that whole infrastructure.

00:44:39 ◼   ► If you look at any of those successful efforts, or PHP for that matter, or Perl, CGI, any of the

00:44:45 ◼   ► things that have been big in the server side world in the past or currently, and you look at the

00:44:51 ◼   ► shape of that community, it tends to be either a community not focused around a single company,

00:44:58 ◼   ► or a community focused around the product of a single company, and that single company

00:45:02 ◼   ► is all about server side stuff, or becomes all about server side stuff. Java with Sun,

00:45:07 ◼   ► although that getting bigger than them at various points, but everything else is kind of like,

00:45:11 ◼   ► it is a bigger than one company thing. It has to be for the community to take off and thrive.

00:45:17 ◼   ► You don't see scenarios where there is a language made by a single company, mostly for a single

00:45:23 ◼   ► purpose on their platforms, with aspirations to get bigger, because Apple is never going to do

00:45:27 ◼   ► what it takes, nor should they, I think, to become all things to all people server side across the

00:45:35 ◼   ► world. And if you're not going to do that, if you're not going to become the next Java,

00:45:39 ◼   ► or the next PHP, or the next Node, then I'm not going to say what's the point, because it is

00:45:47 ◼   ► a useful thing to do, but I just don't feel like they can fulfill the destiny of this item

00:45:54 ◼   ► on server side languages. I wouldn't want them to. I don't want Apple to become a company that

00:45:59 ◼   ► is known for defining server side development for the next two decades.

00:46:03 ◼   ► That's just not what Apple's about. And if they did that, it would take their eye off of what they

00:46:07 ◼   ► should be doing, which is making hardware, software integrated experiences, blah, blah,

00:46:12 ◼   ► blah, like the things we know and love from Apple. So all this is a long way of saying,

00:46:16 ◼   ► I'm crossing that one off the list, despite the fact that I think cloud computing

00:46:19 ◼   ► should be an inevitability, and I hope Apple is making moves in that direction.

00:46:24 ◼   ► Maybe possibly more important than trying to figure out how to make a car, just saying.

00:46:28 ◼   ► The one I'm going to pick is easy. I'm crossing off the middle ones, because I don't know what

00:46:33 ◼   ► they are. I don't care about them, the whole automation, blah. Wi-Fi router, that's my easy

00:46:38 ◼   ► pick, and I'll tell you why. It's the same reason I liked their stuff before. It's the same reason

00:46:44 ◼   ► I wanted a monitor from them. Apple's never going to make a monitor that people are going to buy.

00:46:48 ◼   ► They're probably not even going to make that much money on these monitors, but I wanted Apple to

00:46:51 ◼   ► make a monitor because I wanted a fancy monitor that matches my computer. Apple for a long time

00:46:55 ◼   ► made fancy Wi-Fi systems that match their computers that were really expensive and most people didn't

00:46:58 ◼   ► buy them. It's not a great business, but I think that market is in need of competition. The question

00:47:06 ◼   ► is in dire need of a competitive product from Apple, because Apple of all the companies that

00:47:09 ◼   ► we've named is the only company that still has its incentives aligned around privacy and security.

00:47:15 ◼   ► Despite Apple's big service push, in general, Apple is not using your information to figure

00:47:21 ◼   ► out how to serve you more relevant ads or sell you generic products or whatever.

00:47:27 ◼   ► So Eero being brought my Amazon, I haven't seen any ill effects of that, but it's always out there

00:47:32 ◼   ► of people wondering, "Well, what's going to happen? Is my Eero going to start inserting Amazon ads

00:47:36 ◼   ► into all of my whatever?" People are afraid of that. Again, people are going to be afraid of

00:47:42 ◼   ► things that never actually come to pass and so far everything's been good and I really like Eero and

00:47:45 ◼   ► I'm using it right now. That's my favorite product, but I would love for Eero to have a competitor

00:47:52 ◼   ► and a competitor that focuses solely on the idea of A, we look nice and work well with Apple

00:47:58 ◼   ► products and B, we have a privacy focus. The whole thing with VPNs and people not knowing which VPNs

00:48:05 ◼   ► to get and which to trust and have them being difficult to set up and so on and so forth,

00:48:08 ◼   ► that's a place where Apple could differentiate itself. It's never going to be a particularly

00:48:14 ◼   ► good business for them, just like monitors are never going to be, never have been probably and

00:48:18 ◼   ► never will be a good business for Apple and yet I think Apple should still make monitors and I think

00:48:22 ◼   ► they just don't make Wi-Fi routers. In the end, what I want is if someone has an Apple setup,

00:48:26 ◼   ► like, "Oh, you should get a Mac and get an iPhone and get an Apple watch," and if you're having Wi-Fi

00:48:31 ◼   ► reception problems in your home, get the Apple Wi-Fi thing. That's what I used to tell people

00:48:35 ◼   ► until their product sucked and now I tell people to get Eero. I would love for Apple to compete in

00:48:40 ◼   ► that market because I think it's a place where I would like there to be an option like that.

00:48:45 ◼   ► I think like it's like we talked about before with like, why should Apple make USB hubs or all sorts

00:48:52 ◼   ► of things you can argue for. You just want to have an easy choice to say there's a good one of these,

00:48:56 ◼   ► it's a little bit expensive, but that's true of everything that Apple makes. Just get the Apple

00:49:00 ◼   ► one. You won't have to worry about it. It's a little bit more expensive, but it'll all work

00:49:04 ◼   ► together. That conversation and that sort of like sentence structure has become less and less in

00:49:10 ◼   ► common over time as Apple has eliminated all the businesses that are not good businesses.

00:49:13 ◼   ► Now when it comes time to get a USB hub, you're like, "I don't know. There's a couple of good

00:49:19 ◼   ► ones. Sometimes they're flaky. There is no go-to recommendation for things from Apple."

00:49:23 ◼   ► Apple has really ramped up the dongle department, but that's a whole different

00:49:27 ◼   ► thing. And even some of those they outsource to Belkin, so they can't even make all those themselves.

00:49:31 ◼   ► Yeah, that's kind of sad actually.

00:49:33 ◼   ► But anyway, that's my answer. Wi-Fi routers. Basically, all I'm asking for is a competitor

00:49:37 ◼   ► to Eero. It's not because I'm disappointed in Eero, it's just because that's the business that

00:49:42 ◼   ► I think could most benefit from competition from Apple specifically because of how different

00:49:47 ◼   ► Apple's incentives are from all the other companies that currently sell decent routers.

00:49:51 ◼   ► We are sponsored this week by Indeed. When you start your hiring process, you may have questions

00:49:58 ◼   ► like, "Will you find good applicants to choose from? What about education and experience?"

00:50:03 ◼   ► and "How will you know you've made the right hire?" Indeed is here to help. Millions of great

00:50:08 ◼   ► candidates use Indeed every day to find their next opportunity. You can post a job in minutes,

00:50:13 ◼   ► you can use screener questions to help create your shortlist of applicants really quickly,

00:50:17 ◼   ► and you can add skill tests to your job posts so you can be confident in your applicants' abilities.

00:50:22 ◼   ► Indeed's library of more than 50 skills tests ranges from industry-specific skills like accounting

00:50:27 ◼   ► to general attitude tests like critical thinking. Indeed gives you the smart tools to make hiring

00:50:32 ◼   ► decisions quickly and to be confident that you're making the right hire for your team.

00:50:36 ◼   ► Post your job today at Indeed.com/podcast and get a free sponsored job upgrade on your first posting.

00:50:44 ◼   ► That's Indeed.com/podcast. Terms, conditions, and exclusions apply,

00:50:48 ◼   ► offer valid through March 31, 2020. Thank you so much to Indeed for sponsoring our show.

00:50:53 ◼   ► I haven't really played with iOS 13.4, so I don't have much to say about it,

00:51:01 ◼   ► but perhaps Marco has? I mean, I have it on my phone.

00:51:05 ◼   ► Okay, how is it? It's been fine so far. I mean,

00:51:09 ◼   ► I think I still caught the mail bug once where it doesn't show me all my new messages for a while

00:51:16 ◼   ► until I go back out of the all inboxes view and back to like the root view and then back into

00:51:20 ◼   ► all inboxes. This has been a bug for every single version of iOS 13 since the summertime.

00:51:24 ◼   ► They still, I don't think, have fixed it. I think I caught it happening the other day.

00:51:27 ◼   ► Other than that, it seems fine. Like there are these small changes to mail,

00:51:32 ◼   ► like they change the toolbar and stuff like that, but I haven't really used it enough in that time

00:51:38 ◼   ► to really have felt those differences. Fair enough. I'm excited.

00:51:41 ◼   ► That's the thing I put in the show notes is the mail toolbar thing. That's what fascinated me.

00:51:45 ◼   ► This is from weeks ago, but it's still the case and now the beta is out. The mail toolbar is

00:51:51 ◼   ► sort of the perfect storm of things that can infuriate like angry Apple users that probably have

00:52:01 ◼   ► a much more benign explanation. But then on the other hand, okay, it's explicable and I

00:52:09 ◼   ► understand why it happened, but it's still annoying. And what we're talking about here is

00:52:13 ◼   ► if you use mail on your phone, there's like a, what are they, is that a toolbar? They call it

00:52:18 ◼   ► at the bottom of the screen. I don't know what the hell the terminology is these days. I always get

00:52:21 ◼   ► confused. Anyway, there's a bar at the bottom of the screen that previously had a bunch of little

00:52:25 ◼   ► icons for stuff you could do with mail messages. So you're looking at a mail message and it used

00:52:28 ◼   ► to have little icons for, you know, archiving it or flagging it or replying to it or deleting it

00:52:33 ◼   ► and stuff like that. I don't remember what the buttons used to be, right? But there used to be

00:52:36 ◼   ► a bunch of buttons down there, right? Then iOS 13 comes out and I don't remember the exact timeline

00:52:41 ◼   ► on what they showed in the betas, whatever, what they shipped in 13.0. You're in mail on your phone

00:52:47 ◼   ► and you look at the bottom of the screen and instead of a bunch of icons to do things with

00:52:50 ◼   ► your message, there are two icons. One of them is the little reply arrow and one of them is the

00:52:55 ◼   ► trashcan. Trashcan makes sense, so you delete a message. Some people didn't like the fact that it

00:53:01 ◼   ► was close to reply, but you know, well, the spacing is pretty good on that, right? Then there's the

00:53:07 ◼   ► reply arrow. You're like, okay, well, I assume if I hit that, that's how I reply. You're like,

00:53:11 ◼   ► how do I file this message away? How do I flag it or say it's junk mail? But most importantly,

00:53:20 ◼   ► and this is the thing that infuriates people, why are there only two buttons? What were you saving

00:53:25 ◼   ► all the room for over there where there are no buttons? There used to be things there and now

00:53:32 ◼   ► they're not. And it wasn't crowded. Four buttons across the bottom of your phone, they're pretty

00:53:36 ◼   ► widely spaced, but now there's just two. And you look at that and you think, oh, you Johnny Ive,

00:53:41 ◼   ► just before you left Apple, you said, you know what? Delete more useful buttons from things.

00:53:45 ◼   ► Like get rid of the ports on all the computers and there's too much utility in that toolbar.

00:53:50 ◼   ► People can just tap that button and immediately flag a message. Preposterous. I don't like that.

00:53:55 ◼   ► We can't have that. If we can make the side of the toolbar cleaner by removing buttons,

00:54:00 ◼   ► let's do that. Can we remove all the buttons? Like, no, Johnny, no, we can't remove all the

00:54:03 ◼   ► buttons. All right, fine. We'll leave one button. No, we can't just have one button that's not.

00:54:07 ◼   ► All right, fine. Two buttons, but that's it. No more buttons. This is the fantasy thing in

00:54:11 ◼   ► your head. Like they just want to get everything off of the screen. They want it to be a thing

00:54:15 ◼   ► where there are no buttons and it's completely useless. I don't think that's true, but it doesn't

00:54:21 ◼   ► change the fact that iOS 13 shipped and it had two buttons at the bottom instead of four. And by the

00:54:25 ◼   ► way, if you're looking for the other functionality, it's buried under one of the buttons. If you hit

00:54:29 ◼   ► the button, like a menu, let me, I have to do this on my phone because I don't use Apple mail,

00:54:32 ◼   ► but it's like, yeah, I think like the reply button included things like moving the message.

00:54:36 ◼   ► That's right. Yeah. So it was like the functionality was still there, but it was one

00:54:42 ◼   ► tap farther away, which seems weird because it's like, well, if you weren't, you know,

00:54:47 ◼   ► like people wouldn't think to do that because if you hit the reply button from the reply button,

00:54:51 ◼   ► you can reply, reply to all forward, trash flag, markers on red, move message, archive message,

00:54:56 ◼   ► move to junk, mute, notify me and print. That's all under the little reply arrow. When you tap it,

00:55:03 ◼   ► it doesn't reply. When you tap it, it brings up a gigantic sheet with all those other options.

00:55:08 ◼   ► And again, the whole rest of the toolbar is just blank and delete. I think just deletes.

00:55:12 ◼   ► And maybe there's a force press option or something. Right. So the explanation that

00:55:16 ◼   ► makes sense is, you know, iOS 13 had some, uh, you know, birthing difficulties, let's say,

00:55:23 ◼   ► and it came out, it came out the door and it was missing a lot of features. They talked about like

00:55:27 ◼   ► the iCloud drive stuff and everything that's now appearing in the iOS 13.4 beta. And the idea is

00:55:34 ◼   ► that mail, which also had some problems coming out the door, had a bunch of planned functionality and

00:55:39 ◼   ► a cool new toolbar down there. And it wasn't ready in time. It's like, oh, last minute scramble,

00:55:45 ◼   ► all the cool stuff that we were going to have in that toolbar. You know, it's not going to make it

00:55:50 ◼   ► to 13.0. So they just had to get something out the door for 13.0 that worked. And so whatever those

00:55:55 ◼   ► other buttons were going to be are just erased from the UI. And if they buried the other existing

00:56:01 ◼   ► functionality under that replyer, it was always there. And it's like, oh, that's a shame. Sometimes

00:56:05 ◼   ► you, you know, you plan for a bunch of features to come out, you advertise them and 13.0 comes out

00:56:09 ◼   ► and you can't make them. So it's better to pull them and to ship them and have them be like buggy

00:56:13 ◼   ► and destructive and delete everyone's mail or whatever. So that makes sense. But again, coming

00:56:18 ◼   ► back as a consumer saying, well, I can understand how it could have happened, but it still doesn't

00:56:22 ◼   ► change the fact that I upgraded to iOS 13 and the mail app became less useful and more annoying for

00:56:27 ◼   ► me to use, which is not the direction things should go. They should become less annoying and

00:56:32 ◼   ► more useful or one of those two. So iOS 13 restores the toolbar buttons. So there's more

00:56:40 ◼   ► buttons than things are more widely spread out. I don't know if it restores a bunch of functionality

00:56:43 ◼   ► that wasn't there before. I really don't know what the story is, but I find it an interesting sort of

00:56:48 ◼   ► litmus tests for, or like to gauge Rorschach test is better. Like look at this ink blot. What does

00:56:55 ◼   ► it look like to you? Does it look like Apple taking away ports of your Mac book? That's probably

00:56:59 ◼   ► because you're an angry person who uses lots of dongles. Does it look like to you a slimming down

00:57:06 ◼   ► of useless functionality? I think you'd just be wrong there because lots of people do more than

00:57:11 ◼   ► just reply to and trash things. And on top of that, like I said, if you're just used to hitting

00:57:15 ◼   ► reply, if someone hits the reply button is presented with all these options, it can be very

00:57:18 ◼   ► confusing. And there's another chance for you to make an error or whatever. This is as cable Sasser

00:57:24 ◼   ► said, you know, agreeing with the theory that stuff was removed, he says, but surely after changing

00:57:30 ◼   ► that before WWC, they could have put the icons back during the five month beta cycle or in the

00:57:35 ◼   ► many months since then where the OS has been out. It seems like it took a long time to get those

00:57:39 ◼   ► buttons back. Again, you know, minor issues, not that big of a deal, just one minor annoyance. It's

00:57:47 ◼   ► better than the bugs that Mark was talking about. Like not seeing a new mail arrive is worse than

00:57:51 ◼   ► this, but if slimming down the toolbar avoided like bugs that would have deleted all of our mail,

00:57:57 ◼   ► that's good. But this type of this is to get my marker was saying before, like this outcome is

00:58:04 ◼   ► not what Apple should be shooting for. Having a big company with lots of people, lots of features and

00:58:09 ◼   ► complex code base and complex products and lots of, you know, it's a very difficult job.

00:58:13 ◼   ► And we've talked many times about the trade-offs of like, at a certain point, you have to make a

00:58:17 ◼   ► call whether this is going to be in or it's going to be out, it's going to be saved this

00:58:20 ◼   ► till next year or whatever. And it's difficult to make those calls and you're not sure how far you

00:58:23 ◼   ► should go or really push the team to get it done or make a decision early on and say, we're not

00:58:27 ◼   ► going to make it and regroup. Sometimes you end up shipping something that's not everything you

00:58:31 ◼   ► hoped it would be, but at least you made errands out of stability. But the bottom line is in the

00:58:36 ◼   ► end, you give a product to a customer and what you're shooting for is at least neutral and

00:58:43 ◼   ► hopefully slightly better than what they had before. When you miss that, all the explanations

00:58:48 ◼   ► in the world don't really help that customer. And that customer comes away thinking when iOS 14

00:58:54 ◼   ► comes out, having that experience of like, when I erupted iOS 13, I don't remember much stuff that

00:58:59 ◼   ► got better, but I do know some things that got worse and they annoyed me for months until they

00:59:03 ◼   ► got fixed. And that's not a good outcome. So whatever balance of timing and deciding when

00:59:10 ◼   ► to ship and knowing when to pull things they did for iOS 13, it's not the right balance they need

00:59:16 ◼   ► to revisit. Yeah, it seems like they have trouble fixing mistakes quickly. Like both, you know,

00:59:23 ◼   ► the hardware has this problem obviously with the keyboards and everything. Like, I'm sure there are

00:59:27 ◼   ► good reasons for a lot of it. Like, you know, hardware takes time to engineer, software takes

00:59:32 ◼   ► time for like design and QA and, you know, probably things like carrier certification and God knows

00:59:38 ◼   ► what else. Like, I'm sure these things take time, but it seems like Apple takes a lot more time than

00:59:44 ◼   ► other people do to fix mistakes. Some part of Apple's process or culture or structure or something

00:59:53 ◼   ► makes it take them a long time to fix things that seem from the outside like clear mistakes,

01:00:00 ◼   ► like things that like they probably aren't still arguing whether it's a mistake or not. It probably

01:00:04 ◼   ► doesn't take them a long time to figure that out. What is it that takes so long to fix? Well, let's

01:00:09 ◼   ► not lose sight of the fact that Apple is a big, big, big ship that turns slowly. Now, it turns

01:00:16 ◼   ► quicker than most ships of its size, but it's still a big, big ship. I mean, fair, fair. I don't

01:00:24 ◼   ► know. I'm trying to, I had my angry moments earlier. I mean, it depends. Like there are,

01:00:28 ◼   ► you can have examples of other companies moving more quickly and other companies moving more

01:00:31 ◼   ► slowly. When I see something like this, I mean, it seems pretty clear that like, I would say it's

01:00:35 ◼   ► evidence of like a company that is somewhat overwhelmed because if you're going to prioritize

01:00:38 ◼   ► things that you have to react to, this is a low priority. It's not a crash or it's not data loss.

01:00:43 ◼   ► It is one of the most minor of minor annoyances. You know, you're missing some toolbar buttons,

01:00:47 ◼   ► right? So when you're ranking the list of things that you really need to get on and fix right away,

01:00:51 ◼   ► this is always going to be low. And in big companies, what tends to happen is sort of like,

01:00:55 ◼   ► you know, low priority starvation where something near the bottom of the list,

01:00:58 ◼   ► every time anything comes up, you force rank it again. And you're like, is this more or less

01:01:04 ◼   ► important than the buttons in the whale male toolbar? And everything always ends up being

01:01:07 ◼   ► more important. So you end up six months down the line and say, we never did get around to fixing

01:01:11 ◼   ► those male toolbar buttons. Then somebody goes and fixes it. This is by the way, why Overcast

01:01:14 ◼   ► doesn't have an Alexa app. Yeah, those are the right, that's the right priority structure,

01:01:19 ◼   ► but there is, you know, I forget what the term is for like OS scheduling, but like, you know,

01:01:23 ◼   ► you know, resource starvation or low priority starvation, where at some point you do need to

01:01:27 ◼   ► boost the priority of those low priority things. Otherwise they will just literally never get done.

01:01:32 ◼   ► And when you're in that situation, it makes me think that there's too much on your plate.

01:01:37 ◼   ► Like in a, in a better scenario, you do release lots of high priority stuff. You work, work,

01:01:41 ◼   ► work, and then eventually you get to the point after a month or two. And you're like,

01:01:45 ◼   ► and now we can finally put to bed those low priority ones. And if that's taking many,

01:01:49 ◼   ► many more months than that, like six months into eight months until you had a release,

01:01:53 ◼   ► that was so bad that it was just, it took you a long time to get to those less important bugs.

01:01:58 ◼   ► Right. And nevermind like the beginning of like, well, why'd you end up in the situation in the

01:02:01 ◼   ► first place? Again, assuming the ideas, they didn't intend to ship a toolbar with two buttons.

01:02:05 ◼   ► Just what they could end up shipping safely in time. That's the, on the other side of that

01:02:10 ◼   ► process. How do we, how do we not get in that situation? The question we were saying is like,

01:02:14 ◼   ► Hey, well, if you find yourself in that situation, why does it take you so long to fix them? And I

01:02:18 ◼   ► feel like it's not about fixing this one bug takes a long time. It's about all the other stuff that

01:02:23 ◼   ► they correctly prioritize the above this. And the fact that that list is so darn long

01:02:28 ◼   ► and it manifests in little stuff like this, not getting fixed.

01:02:33 ◼   ► We were sponsored this week by handy this time of year. The two scariest words on everyone's mind,

01:02:39 ◼   ► aside from tax season are spring cleaning. If you don't already have a million things in your

01:02:44 ◼   ► to-do list, now you have to sacrifice an entire weekend, deep cleaning your home. Thanks to handy.

01:02:49 ◼   ► There's a better way to knock out spring cleaning. Handy is the easy and convenient way to book home

01:02:53 ◼   ► cleanings on a schedule that works for you. You can book it in just 60 seconds. Handy will match

01:02:59 ◼   ► you with a top rated pro in your area, or you can choose who you want to work with. You can compare

01:03:03 ◼   ► profiles, you can read customer reviews, you can choose a weekly biweekly or monthly cleaning plan.

01:03:09 ◼   ► Handy will schedule your recurring bookings to make things absolutely easy for you. And all this

01:03:13 ◼   ► is with very upfront pricing. What you see is what you pay. You pay securely right in their app, you

01:03:18 ◼   ► don't need to worry about cash or checks. You can even tip your cleaning pro directly in the app.

01:03:23 ◼   ► And no need to worry because 100% of the tips go directly to the pros. And it's super convenient to

01:03:28 ◼   ► get your home clean anytime from 7am to 11pm, seven days a week, subject to availability. And the pros

01:03:34 ◼   ► on Handy are vetted, background checked and rated by customers to ensure quality. You'll learn more

01:03:40 ◼   ► about their background checks at handy.com/trustandsafety. And if you're not satisfied with the

01:03:45 ◼   ► quality of the service, Handy will book another pro to make it right at no extra charge with their

01:03:50 ◼   ► happiness guarantee. Handy now has a special limited time offer. You can get your first three

01:03:55 ◼   ► hour cleaning for only $29 when you sign up for a cleaning plan. Go to handy.com/ATP and enter promo

01:04:02 ◼   ► code ATP. Once again, that's a three hour home cleaning for just $29 for the cleaning plan at

01:04:08 ◼   ► handyhandy.com/ATP, promo code ATP. Terms and conditions apply. Visit Handy's website for more

01:04:15 ◼   ► information. Handy, the most reliable name in house cleaning.

01:04:22 ◼   ► Louis Mantia was not asking us but posted a question that I thought was interesting. And I

01:04:28 ◼   ► don't remember if I put this in the show, it's not, but maybe somebody else of the three of us

01:04:31 ◼   ► thought it was interesting. Okay, that should have known. John, one day I'll learn. Today is not that

01:04:37 ◼   ► day. Louis asked, "If you worked at Apple for just one day as a designer and engineer and you could

01:04:43 ◼   ► squash one trivial bug, what would it be?" And Louis continues, "In this fictional scenario,

01:04:48 ◼   ► you have no managerial or directorial power. You cannot direct others to help you and it may not

01:04:53 ◼   ► exceed one day's worth of your time." I replied to this and I believe what I had said, and if not,

01:05:00 ◼   ► then I'm going to say it now. What I had said was, I don't know if I could do it in a day,

01:05:04 ◼   ► but here's my bug and it drives me nuts. I am a devout and enthusiastic user of spaces,

01:05:12 ◼   ► that is to say multiple virtual screens on, you know, there are multiple virtual desktops if you will, on one

01:05:18 ◼   ► or more physical screens. So you can see this most easily if you have a magic trackpad or, you know,

01:05:24 ◼   ► equivalent. You can do a three-finger swipe laterally to swipe between them. On a magic mouse

01:05:29 ◼   ► it's a two-finger swipe if I'm not mistaken laterally. And it's a nice way to arrange and

01:05:34 ◼   ► organize different like workspaces if you will. A lot of times when I use this feature, if I like

01:05:41 ◼   ► Command-Tab, I almost said Alt-Tab, if I Command-Tab into a different app or if I use the dock to go

01:05:48 ◼   ► into a different app that's on another space, it will switch spaces automatically as it should

01:05:54 ◼   ► and go to the correct space. Let's say I have four spaces and I'm on the fourth of the four and I'm

01:05:59 ◼   ► trying to go to Finder which is on space one. I click on the dock on Finder, I zoom over to space

01:06:04 ◼   ► one, and then it immediately zooms back to space four, even though there's no Finder window anywhere

01:06:09 ◼   ► to be found. And it is infuriating because I'll do it again and again and again and it keeps happening

01:06:16 ◼   ► and happening and happening. And there's no real rhyme or reason why it's happening as far as I can

01:06:19 ◼   ► tell, it just happens. And that's the bug I would fix. Marco, what would you do? I had a really hard

01:06:25 ◼   ► time deciding this because my answer will vary by the day, like whatever's annoying me that day.

01:06:31 ◼   ► I think, you know, there's all sorts of like, you know, stuff that I encounter over time that like,

01:06:36 ◼   ► man, if they would only fix this one bug in iOS or watchOS, I could do something cool with Overcast,

01:06:40 ◼   ► you know, and that would be my pick a lot of the time. Currently, I'm not, I don't think I'm facing

01:06:46 ◼   ► any of those right now that I could specifically nail down. But, so I'm going now from a user

01:06:51 ◼   ► perspective for my choice this particular moment. I've been using the iOS music app a lot more

01:06:58 ◼   ► recently, just listening to more music and the music app is, oh, so many paper cuts. Especially

01:07:07 ◼   ► for somebody who listens to full albums and cares about the current album or current song that was

01:07:14 ◼   ► playing when maybe the app gets terminated in the background at some point and then relaunches.

01:07:18 ◼   ► Because like music, like iTunes before it, the music app on iOS, every time you launch it,

01:07:24 ◼   ► pretends like it's the first time it's ever been launched. Like, you weren't playing anything,

01:07:27 ◼   ► what do you mean? Or it remembers the song you were playing, possibly even one song ago,

01:07:33 ◼   ► but it doesn't remember where in the song you were, which if you listen to a band that has

01:07:39 ◼   ► long songs, that's kind of like starting a podcast from scratch every time you open your podcast app,

01:07:43 ◼   ► like that's not really what you want. It also loses your place in the navigation hierarchy.

01:07:49 ◼   ► So if you like, if you were like in a playlist or if you're in a certain album,

01:07:55 ◼   ► if it remembers the song you were at, it might bring that up as the now playing song,

01:08:00 ◼   ► but the place you were in the navigation to get to that song, like the album list is gone.

01:08:04 ◼   ► And yeah, I know under the junk drawer menu, there's now a like show album button, which is

01:08:09 ◼   ► buried. It took me months to find. Anyway, like it just, there are so many paper cuts about the

01:08:15 ◼   ► music app, but the one thing in particular that gets me, that makes me think, does anybody use

01:08:20 ◼   ► this? Who works on it? I honestly want to know this question. When you are playing music that

01:08:25 ◼   ► is not downloaded to your phone, when you are streaming music over cellular, every single time

01:08:31 ◼   ► that the track changes to a new song, or if you resume from pause, if it's been paused for a

01:08:37 ◼   ► little while, it rebuffers the audio. It seems to be doing a true stream. So it's not like, you know,

01:08:43 ◼   ► when I say streaming and overcast, what I'm actually doing is a progressive download.

01:08:46 ◼   ► I'm not doing like a like only buffer from the network what you're playing and don't buffer very

01:08:50 ◼   ► far ahead. Like I'm not doing that. I'm just starting a progressive download. And as soon as

01:08:53 ◼   ► I have enough to play, I start playing. What Apple's doing with music is definitely not that.

01:08:57 ◼   ► What they're doing is like taking up no disk space, which, you know, for the mass market for music,

01:09:02 ◼   ► that might be the right idea or at least close to the right idea. So when you stream from Apple

01:09:06 ◼   ► music, it actually doesn't download the whole track. It downloads some distance ahead and

01:09:10 ◼   ► that's it. And when you go to the next track, it throws away whatever it had about the last one and

01:09:15 ◼   ► loads the next one again from scratch. If you pause it for a while, it discards all that data.

01:09:19 ◼   ► Again, loads it from scratch. My bug that I would spend one day working on, and I think I could

01:09:24 ◼   ► probably do this, is that every single time it starts a stream over cellular, it plays the first

01:09:32 ◼   ► maybe half to one second of audio at a low bit rate. And then it steps up to a high bit rate.

01:09:39 ◼   ► This is extremely audible. It sounds like the first half second of every song you play

01:09:46 ◼   ► is at like, you know, 20 kilohertz, like some like super low sample. So it cuts off all the

01:09:51 ◼   ► high frequencies and then it pops into the high frequency like a half second of the song

01:09:56 ◼   ► every single time. Twitter does the same thing and it drives me nuts. It drives me nuts too. Yeah,

01:10:01 ◼   ► like this, I understand that it's nice to have like, you know, progressive bit rate things, but

01:10:08 ◼   ► you're a music player. The quality of your music matters a lot and music isn't that big. And it's

01:10:13 ◼   ► like these days on these networks, you know what, just, I would rather, you know, the dumb like one

01:10:21 ◼   ► hour solution to this would be just wait one second, buffer it for one second, then start

01:10:26 ◼   ► playing. I could have a one second gap before the song starts. Fine. If it would start at full

01:10:30 ◼   ► quality, which it would, that's all it takes. Fine. Or the smarter thing to do, you know what

01:10:38 ◼   ► is going to play next. Just buffer a few seconds of the next song as you approach the end of the

01:10:45 ◼   ► previous one. This is like, this is just like, this, this problem shouldn't exist in this day

01:10:50 ◼   ► and age. Like this is the kind of thing you'd expect from like the very first cell phones or

01:10:54 ◼   ► the very first streaming music apps. We are so far past that. The first half second of every single

01:10:59 ◼   ► song I play should be in fricking full quality on the music app, on the premiere device from the

01:11:05 ◼   ► premiere mobile company that makes this premiere Apple music service. Like, for God's sakes, like

01:11:09 ◼   ► that's way more than a half a second on Twitter. I remember when, when you first did overcast clip

01:11:13 ◼   ► sharing and everyone was like, why overclass clip sharing sounds so bad. It's when people would

01:11:17 ◼   ► tweet them and you'd play them and it's just voice. Right. But on Twitter, the, the audio

01:11:22 ◼   ► quality was so bad for like the first, like seven words out of the person's mouth. Of course the

01:11:26 ◼   ► video quality would be all grainy, but then the audio quality would be like worse than plain old

01:11:31 ◼   ► telephone system, like worst, like eight kilohertz, just incredible robot voice. You know, like how

01:11:37 ◼   ► did Marco make such a terrible clip? It's not that it's not the clip. The clip is fine. It's Twitter,

01:11:42 ◼   ► like the Twitter clients and the Twitter web browser, but like Twitter processes, whatever

01:11:46 ◼   ► it is that you give them to attach to a tweet. And when you try to play it, like sometimes it would

01:11:51 ◼   ► be half the clip it seemed like, and it would snap into good quality. And I have the same feelings.

01:11:55 ◼   ► Like I have a gigabit connection, Twitter, just wait until you've got the whole thing ready to go.

01:12:00 ◼   ► Like, it's not, I'm not so desperate for it to start immediately that I, that I need, want to

01:12:06 ◼   ► listen to someone talking and have them sound like they're inside a tin can. So this is, yeah, this

01:12:10 ◼   ► is the, it's like, we, I think we did better back in the bad old days when everyone had terrible

01:12:15 ◼   ► connections because all of those were adaptive where it would be like, if it seems like you can't

01:12:20 ◼   ► accept whatever it is that we're trying to show you at full data rate, you will get a crappy

01:12:24 ◼   ► quality version. Right. But these new systems are like unconditional. I don't care if you're

01:12:28 ◼   ► in gigabit fiber, you're going to listen to seven seconds of crappy audio before it snaps into good

01:12:33 ◼   ► quality. It's like, why there is no reason for that. Be adaptive measure how much you're actually

01:12:38 ◼   ► able to send and now option to receive and adjust the quality based on that. And, you know, obviously

01:12:44 ◼   ► with Marco's case, this is not a dynamic scenario. It does know what it's going to play. It does know

01:12:49 ◼   ► as it approaches the end of a track, what the next track is going to be. Hopefully it knows in almost

01:12:52 ◼   ► all scenarios, unless you're like some live streaming radio station or something, but either

01:12:56 ◼   ► way, like buffering exists, like real player did better than this, you know, just like, wait, wait

01:13:03 ◼   ► a second and buffered like, yeah, that's, that's a tough one. Oh, so my answer to this, unfortunately,

01:13:12 ◼   ► I have worked for big ish companies for too long to believe that there is literally anything you

01:13:18 ◼   ► can fix no matter how trivial in a company the size of Apple in a single day. It is

01:13:22 ◼   ► absolutely impossible, right? Just go with it. You can begin the process of fixing it. In fact,

01:13:28 ◼   ► if you are a young and optimistic soul, you can think that you have spent one day's worth of work

01:13:35 ◼   ► and it fixed the problem, but you don't understand the days and weeks and months of work. That's

01:13:39 ◼   ► going to required to get that supposed perfect already done completed work out the door. Say

01:13:46 ◼   ► you're fixing a typo. That typo. Oh, does it need to be localized? Does it, did it change the metrics

01:13:51 ◼   ► on this thing? Because you added a character or another one and now another word wrapped.

01:13:55 ◼   ► Does it have to go through all the QA? Like, is it, is it a special character that you wanted to

01:13:59 ◼   ► add? Oh, the, you change a straight quote to a curly quote, but now there was some part of the

01:14:02 ◼   ► process that expected that all to be ASCII and it's puking and that's going to come up six months

01:14:07 ◼   ► from now and they do integration builds. There's nothing you can fix in a day, which is part of the

01:14:10 ◼   ► problem with big companies. But if I'm going to pretend that something can be fixed in a day,

01:14:17 ◼   ► guys tough because I don't like the things that bother me are not of a nature that

01:14:23 ◼   ► can be even like quote unquote fixed of just like, well, I did the work part of it. Right.

01:14:29 ◼   ► I mean, the closest thing I can come to thinking for me personally is

01:14:33 ◼   ► whatever it is that's causing the finder to occasionally decide that it doesn't care what

01:14:39 ◼   ► state a window was in before, you know, the applications folder is a good example. The

01:14:43 ◼   ► applications folder does not move and its contents more or less stay the same. There's not more than

01:14:48 ◼   ► one of them. It is in a well-known location. It is more mostly more or less owned by the system,

01:14:52 ◼   ► although it's a complicated amalgam of system applications and slash applications these days.

01:14:56 ◼   ► But anyway, putting that aside the applications folder in theory, I should be able to open up

01:15:03 ◼   ► the applications folder in the finder, change the view settings and the window size and position to

01:15:08 ◼   ► the way I want it and do that once and have it stay the same. Now, I know I wrote many hundreds

01:15:13 ◼   ► and thousands of words about the reason why this isn't actually possible. Right. You know,

01:15:17 ◼   ► and fixing the finder to make it properly spatial or whatever is not one day's work.

01:15:22 ◼   ► But I feel like it's possible in one day's work to find the code path that makes it. So when I

01:15:30 ◼   ► open the, you know, when I do command shift eight open applications or I command option,

01:15:33 ◼   ► click the applications folder in my doc, find the code that decides at a certain point, say,

01:15:39 ◼   ► you know what application window, I'm going to open a window that looks nothing like you had it

01:15:44 ◼   ► before. It's going to be in a different position. It's going to have a toolbar. It's going to be in

01:15:47 ◼   ► a different size. It's going to be in a different view. It's going to bear no relation whatsoever

01:15:52 ◼   ► to however you arrange the applications window before. And you're never going to see the other

01:15:57 ◼   ► window again, whatever code path that is. I would reproduce it, which I feel confident I can do in

01:16:03 ◼   ► a day. I would find that code path and I would sever it. I'm saying you, whatever conditional set

01:16:10 ◼   ► of conditions leads you in this direction to decide, you're going to open a new window with new,

01:16:14 ◼   ► just, just don't like there is only one path, which is to make the window appear just like it

01:16:21 ◼   ► used to. Maybe I would only do it for well-known folders. How maybe I would just do it for the

01:16:24 ◼   ► applications folder. That is a one day work narrowing of scope. All it would be is like

01:16:29 ◼   ► dedicated storage for the view settings for the application folder. And I felt like I can make

01:16:34 ◼   ► that one code path work in a day. You're going to open the applications folder. Let me look up the

01:16:39 ◼   ► settings. Let me make you a window according to those settings. That's the logic. It's fairly

01:16:43 ◼   ► straightforward. There you go. Spot fix just one folder. Remember my settings always. And then of

01:16:50 ◼   ► course it would take months to get through and it would get rejected because there'd be some

01:16:52 ◼   ► regression because some part of some GUI automation that tests some part of the finder

01:16:56 ◼   ► would rely on the functionality of it, not remembering your settings and it would break

01:16:59 ◼   ► those tests and after revert. Oh, that was a better conversation than I expected. All right.

01:17:04 ◼   ► James Irwin wants to know what's the best way to, or why shouldn't you partition your onboard boot

01:17:09 ◼   ► SSD when doing a clean and complete overwrite slash install of Catalina. I typically create

01:17:14 ◼   ► at least two partitions on my main iMac machine and make the non-booting partition the location

01:17:18 ◼   ► where I write various apps, swap and temp files, such as those created by Photoshop, Premiere,

01:17:23 ◼   ► as well as keeping frequently updated and access project files or databases. I'm wondering if this

01:17:27 ◼   ► is an archaic practice under the latest versions of APFS. I suspect that Jon is going to tell us

01:17:32 ◼   ► it's actually better on APFS because of the whole like sharing space thing. But for me,

01:17:36 ◼   ► I used to religiously partition my windows computers and have like one drive that was

01:17:40 ◼   ► the OS. I think I even had like a second one that was apps, like a third one that was games

01:17:44 ◼   ► or something like that. It was bananas. There was no need for it. It never ever did any of the

01:17:48 ◼   ► things I claimed it would do, but I did it. I have never partitioned a Mac knowingly. Like I believe

01:17:54 ◼   ► it has a like a system partition or something like that now. And I know it's gotten the muddier with

01:18:00 ◼   ► APFS and in locking down the OS itself. I think Jon will jump in and fix all these terrible half

01:18:06 ◼   ► truths that I'm telling. But anyways, I've never done it. Marco, have you ever really partitioned

01:18:11 ◼   ► anything outside of your photos dance that you're so, so fond of? And I understand.

01:18:15 ◼   ► - Right, and that is even a partition. That's just a sparse image.

01:18:17 ◼   ► - That's what I'm thinking of, okay.

01:18:19 ◼   ► - Yeah, like I don't, although now, like if I was setting that up again from scratch,

01:18:23 ◼   ► I would do a APFS space sharing partition, excuse me. But now, yeah, like that's just, I mean,

01:18:29 ◼   ► there are special needs where having separate partitions is useful. I don't have any of those

01:18:35 ◼   ► special needs. And so I haven't done this on a Mac. I, like you, in the Windows days,

01:18:40 ◼   ► I would do it back then because that's like, you know, you would like reinstall Windows from scratch

01:18:45 ◼   ► every six to 12 months for fun and to keep your computer in a good state. And, you know, once you

01:18:51 ◼   ► move to the Mac, I didn't do that anymore, thank God. And so, yeah, I don't partition, but I think

01:18:58 ◼   ► if you are a partitioner, if you already were before, this probably doesn't change. Like just,

01:19:05 ◼   ► just, you know, yes, Catalina has like its new, like two partition default layout, but if you had

01:19:11 ◼   ► good reason to keep separate partitions before, you probably still have them now.

01:19:14 ◼   ► - John, what's the right answer? And please fix all my completely awful half-truths from before.

01:19:21 ◼   ► - So the partitioning dance, the benefits that your historical God can continue to get are about

01:19:30 ◼   ► sort of logical and physical separation, just logically in your mind where you're like,

01:19:35 ◼   ► I know all of my X stuff is over here and I know all my Y stuff is over there. And you could say,

01:19:38 ◼   ► well, you can get the same isolation with folders, can't you? It's just a little bit,

01:19:42 ◼   ► one level higher. Like you can't, you know, you can unmount a drive, right? And you can reason

01:19:47 ◼   ► about a drive and erase a drive and clone a drive in a way that is with a different set of tools

01:19:52 ◼   ► than you can do for a folder, right? So you're having some sort of, and the mental partitioning

01:19:57 ◼   ► is, you know, the physical partitioning is less real because physically speaking, things are so

01:20:02 ◼   ► muddled that you're not really getting whatever protection you think you're getting. For the most

01:20:06 ◼   ► part, it's all just one big soup of stuff, but mentally I can see how it can be, you know,

01:20:11 ◼   ► something that people find reassuring. But I'm going to say that there is pretty much,

01:20:16 ◼   ► except for in very weird scenarios, no good reason to incur this cost because the flip side of the

01:20:26 ◼   ► sort of separation benefits is, and again, this is less true with APFS, which we'll get to in a

01:20:31 ◼   ► minute, but thank you. Boy, some delay, you really must be sick. You knew it was coming too. You know

01:20:40 ◼   ► what the next track's going to be, Margo, just buffer the bell. It's been, you have to, there's

01:20:50 ◼   ► something else that people who are, you know, who are into Linux early on remember, you're faced

01:20:55 ◼   ► with that decision. Here I am trying to decide how I'm going to divvy up a finite resource.

01:21:00 ◼   ► How much do I put in slash user and how much do I put in slash just plain old slash. If I make a bad

01:21:07 ◼   ► choice here, it's going to be really annoying later. Trying to think about those decisions,

01:21:12 ◼   ► and the same thing with like back in the bad old days of Windows and on the Mac when you partition

01:21:16 ◼   ► things, you'd have to think really hard about how you're going to divvy stuff up. You'd have to make

01:21:21 ◼   ► predictions about your future self and the growth rate of things. And you know, in the bad, really

01:21:26 ◼   ► bad old days, partitions weren't changeable. Then there were partitions that you could grow and

01:21:29 ◼   ► shrink, but only under certain circumstances, especially on the Mac, depending on fragmentation,

01:21:33 ◼   ► how much you could grow or shrink partitions and all that other stuff. It was always just this

01:21:37 ◼   ► fraught decision. Anytime you're trying to sort of plan out your life and plan out the allocation

01:21:44 ◼   ► of finite resources at a single point in time with limited flexibility to make adjustments later,

01:21:49 ◼   ► that's a bad decision point to make. And I have to say, weigh that against whatever sort of logical

01:21:54 ◼   ► separation you think you're gaining the benefit of. In particular, the things I talk about of like

01:21:59 ◼   ► swap files, temp files, scratch, there is no benefit to putting those things there. The SSD

01:22:04 ◼   ► doesn't know or care where those things are in relation to other things. There's no speed benefit

01:22:09 ◼   ► for them being on outer sectors. Like we're not using spinning hard drives, I hope, anymore for

01:22:13 ◼   ► this type of stuff. Temp files like the OS is handled. If you want tools to manage those

01:22:20 ◼   ► resources, partitions is not the tool to do it. Now, all that said, APFS makes this so much better

01:22:27 ◼   ► because you can essentially not make those decisions. You can say, I want to have five

01:22:33 ◼   ► buckets for things that all five of those buckets are the size of my entire drive. And you never have

01:22:38 ◼   ► to make decisions if you don't want to about how much space is allocated. You can constrain them,

01:22:42 ◼   ► but don't. Because unless you're in a scenario like Marco, where you like the whole point is you

01:22:46 ◼   ► want to constrain them, you can make a bucket that is of a limited size and fine do that if that's

01:22:51 ◼   ► what you're trying to do is prevent Apple's photos from thinking it has the run of your whole, you

01:22:55 ◼   ► know, because that's, that's basically working around a problem in Apple software that you can't

01:22:59 ◼   ► tell photos, please don't use more than X amount of my disk, right. But other than scenarios like

01:23:04 ◼   ► that, with APFS, you can make as many containers as you want, and they all share all the space,

01:23:09 ◼   ► and then they just grow at their natural rates. Now, there's no more disk space available than

01:23:12 ◼   ► there ever was. And whoever grows fastest ends up winning and using more space than other people.

01:23:17 ◼   ► But that's the way it should be. So and it's very easy to create them and destroy them.

01:23:21 ◼   ► So if you really, really insist on using quote unquote partitions as the way to organize your

01:23:29 ◼   ► stuff mentally and quote unquote, physically use APFS containers to do it. Now, I don't want to

01:23:36 ◼   ► call these partitions. I forgot what the problem is there. It's like it's not container. There's

01:23:39 ◼   ► one APFS container with volumes in it or figure out what the terminology is, right? There still

01:23:44 ◼   ► are, there still is the ability to partition things. So you can partition things and then

01:23:49 ◼   ► one of them have an APFS container and one of the partitions. And as Casey was alluding to,

01:23:53 ◼   ► Catalina has multiple, I mean, the Mac has had multiple partitions, actual partitions for a long

01:24:01 ◼   ► time. There was the recovery partition, then the regular system partition. I think there might have

01:24:05 ◼   ► been one other one in the mix at various point. Now there are APFS containers doing that same stuff,

01:24:10 ◼   ► but there's still recovery. And there's the read only system volume, which has the operating system

01:24:14 ◼   ► on it. And that's melded with the read-write volume that is hidden from you. Like, unless you're

01:24:19 ◼   ► looking in certain tools, it just looks like you have one hard drive, but everybody has their

01:24:22 ◼   ► system. The read only one, the read write one combined together. That's what I was getting at

01:24:25 ◼   ► before the applications folder slash applications on your Mac. Some of the things that you see in

01:24:31 ◼   ► the applications folder are not in slash applications. They're in slash system slash

01:24:36 ◼   ► applications. The finder is creating this illusion for you. Again, maybe another excuse for not to

01:24:40 ◼   ► retain my stupid Windows settings. It's more confusing than you think it is. So there are

01:24:46 ◼   ► these multiple volumes behind the scenes being merged together, but all that shouldn't concern

01:24:51 ◼   ► you because if they make that illusion convincingly and they mostly do, you can continue to add

01:24:58 ◼   ► volumes to your APFS container as much as you want. They're very lightweight. It's very easy

01:25:02 ◼   ► to add one. And you don't have to make a commitment of size up front. So in general, I say,

01:25:09 ◼   ► don't do this. Just use one big volume. You'll be happier. But if you insist on doing it,

01:25:14 ◼   ► APFS has got your back and makes it way easier. >> Finally, Brian Hamilton wants to know if your

01:25:19 ◼   ► favorite author asked you to narrate the next audio book, would you do it?

01:25:23 ◼   ► >> I don't think so because I think it'd be terrible at it. I'd want to, but I don't think

01:25:29 ◼   ► I would do it because I would-- I can't do voices. I am very envious of people like a friend of mine,

01:25:36 ◼   ► Steve, is very good at doing like different voices and things like that. And I wish I could do that

01:25:40 ◼   ► for when I read my own kids' stories. Not in my wheelhouse. So no, I don't think I would do it.

01:25:46 ◼   ► But what about you, Marco? What do you think? >> Like you, I know I'd be bad at it. But

01:25:52 ◼   ► in addition, I also don't want to do it. I think probably going to be like some kind of massive

01:25:58 ◼   ► time commitment. And I also can't do voices very well even when reading books to my kid. I try.

01:26:04 ◼   ► It's really sad. I'm glad those are private moments. But ultimately, I'm not a good speaker.

01:26:12 ◼   ► Like I don't have good enunciation. I mispronounce certain word sounds. I stutter. The amazing thing,

01:26:19 ◼   ► like when I was a kid, I used to want to be a radio DJ. As I got older, I realized and was told,

01:26:25 ◼   ► like, you know, first of all, that's kind of a terrible career, actually. Like it's actually

01:26:29 ◼   ► really hard to have a normal life and it doesn't pay very well. And it's like it's just not a good

01:26:33 ◼   ► career. And then also I realized as I got older, I didn't have the voice for it and I was never

01:26:38 ◼   ► going to do it. >> And you're really just into the headphones. That's all you really want.

01:26:41 ◼   ► You've got that part. >> Right. And the amazing thing about podcasting is that people like me

01:26:48 ◼   ► who aren't very good speakers, who have like flaws in the way we talk or, you know, average voices

01:26:54 ◼   ► or whatever, we can actually still make a living doing basically that same thing but on, you know,

01:27:01 ◼   ► with more interesting content, with free form of whatever, you know, however long we want to talk

01:27:05 ◼   ► about, whatever we want to talk about. And as long as someone cares, that can be a thing that you do

01:27:09 ◼   ► that succeeds. And in podcasting, there isn't an expectation that everybody is a perfect speaker.

01:27:14 ◼   ► There isn't, and thank God for that, there isn't an expectation that, you know, that you are like

01:27:19 ◼   ► a cool person who talks in the same way that all the radio DJs and use a lot of bass in your voice

01:27:25 ◼   ► talk really up close to the microphone and, you know, like, and, you know, all that is thrown out

01:27:29 ◼   ► the window. And this is just people talking normally who sound like regular people. Listeners

01:27:33 ◼   ► are more willing to overlook the flaws in our voices and our speaking styles and our enciations

01:27:37 ◼   ► and pronunciation and everything. So I'm able to succeed here. But in an audiobook reading context,

01:27:44 ◼   ► it's much more formal, it's much more controlled. The expectations are much higher, possibly

01:27:49 ◼   ► understandably so. And so I think I would be really terrible at that for lots of reasons. And

01:27:55 ◼   ► the resulting audiobook would be not as good as it would be if a professional voice person did it.

01:28:02 ◼   ► So that's yet another reason why I'm very happy staying where I am and I would not want to do

01:28:07 ◼   ► something like that. John? The part that Marco didn't answer that is the key question here is

01:28:13 ◼   ► does Marco have a favorite author? Nope. I would, that would take me a long time to figure out.

01:28:18 ◼   ► We got time. We'll wait. Well, his favorite author is you, John. Thanks to our sponsors this week.

01:28:22 ◼   ► John hasn't given an answer. All right, John. John, what's your answer? I'm waiting for Marco's

01:28:28 ◼   ► favorite author. You have to pick one. Doesn't have to be like, obviously it's not going to be

01:28:31 ◼   ► like a super duper favorite because you're not a big reader. We're not expecting this, but you have

01:28:35 ◼   ► to pick one. So just name an author. That's like the name of state thing. Name, was it,

01:28:42 ◼   ► no, was it name a state or name a country? There was a good one recently, some internet sort of

01:28:46 ◼   ► like let's find people on the street and laugh at how ignorant they all are. What was it? Name a

01:28:52 ◼   ► country? Might've been name a country. Anyway, name an author. Name, who's your favorite author,

01:28:57 ◼   ► Marco? John Siracusa. I mean, you haven't probably read more that I've read.

01:29:05 ◼   ► Yeah, that's what I was thinking actually. Anyway, I'm going to, I will answer the question. I named

01:29:12 ◼   ► my favorite author and then Marco can get back to his coughing fit. My favorite author is Stephen

01:29:16 ◼   ► King. That's easy. I've read more of his books than anybody else's books. I really like his

01:29:20 ◼   ► books. They're not for everybody that they are for me. Ask to narrate an audio book. Would I do it?

01:29:28 ◼   ► No, because narrating an audio book is the type of thing where like, say you're super into it. Like,

01:29:35 ◼   ► I love my favorite author and my favorite author is going to ask me to narrate her book and,

01:29:39 ◼   ► and she's great. And I love everything she writes and I can't wait to do this.

01:29:43 ◼   ► 17 hours into reading that book into a microphone, you are not going to feel that way anymore.

01:29:51 ◼   ► Like doing an audio book means speaking into a microphone without mistakes for hours and hours

01:29:58 ◼   ► and hours. It is way harder than I think most people would think it would be. The first 30

01:30:04 ◼   ► minutes to one hour, you're probably jazzed about it. That's not what it's going to be like for the

01:30:09 ◼   ► whole rest of that time. It is a hard job. Even if you're good at it, it's hard work. So I don't

01:30:15 ◼   ► want to sign up to do that. Even if I was inclined to do that type of work, which I'm not, I would

01:30:22 ◼   ► never want to do that. That's hard work. It's like, would you like to build a house for your

01:30:25 ◼   ► favorite author? No, it's hard to build a house. It's a lot of hard work that I like the author

01:30:31 ◼   ► and it's cool and that their house is cool, but you know, this is, it's hard work. So no,

01:30:36 ◼   ► don't, don't agree to narrate anybody's audio book. That is really hard work.

01:30:40 ◼   ► Thanks to our sponsors this week, Squarespace, Handy, and Indeed, and we will see you next week.

01:30:46 ◼   ► Now the show is over. They didn't even mean to begin. Cause it was accidental. Oh, it was

01:30:57 ◼   ► accidental. John didn't do any research. Marco and Casey wouldn't let him cause it was accidental.

01:31:06 ◼   ► It was accidental. And you can find the show notes at ATP.FM. And if you're into Twitter,

01:31:17 ◼   ► you can follow them at C-A-S-E-Y-L-I-S-S. So that's Casey Liss, M-A-R-C-O-A-R-M,

01:31:28 ◼   ► N-T-M-A-R-C-O-A-R-M-N-S-I-R-A-C-U-S-A-C-R-A-C-U-S-A. It's accidental. They didn't mean to.

01:31:41 ◼   ► Tech broadcast so long. Oh, we have some war stories, don't we? Didn't have an infinite

01:31:52 ◼   ► supply of war stories. All right, let's do some switch glass war stories. I'm excited.

01:31:56 ◼   ► I have to pick a favorite here. I think I'm going to pick the one that I'm currently mired in,

01:32:01 ◼   ► the war that I'm currently involved in. Yeah, and we'll leave the rest of them for the eternal.

01:32:09 ◼   ► This is like secret weird things people do. This topic will go on forever for this stupid app.

01:32:14 ◼   ► In my application switch glass, which puts a little thing on your screen that lets you

01:32:20 ◼   ► switch among applications, there's a preferences window and the preferences window lets you pick

01:32:24 ◼   ► where on the screen you want the little palette to be. And it's not, you can't put it everywhere,

01:32:28 ◼   ► but you can just put it in the corners and on the top and the bottom, the left and the right. And

01:32:31 ◼   ► you know, that's it. There's like 12 different positions you can put it in. And to give a UI

01:32:36 ◼   ► where you, you know, choose where that palette appears. I show a little rectangle, roughly

01:32:41 ◼   ► screen-shaped with a bunch of radio buttons in there. And you click on the radio button in the

01:32:45 ◼   ► upper right corner and the thing goes to the upper right corner and so on and so forth. Like it's a

01:32:49 ◼   ► visual way to know kind of like Mercedes presumably patented seat controls. Like instead of having a

01:32:55 ◼   ► bunch of buttons or a pop-up menu or having to read words, you just see a bunch of dots that are

01:32:59 ◼   ► arrayed all around the edges of a rectangle and you go, oh, that rectangle is my screen.

01:33:03 ◼   ► And if I want it to appear there on my screen, I'll click here in the preferences window.

01:33:07 ◼   ► And as a frill towards the end of development, I said, you know what, to make it clear that that

01:33:11 ◼   ► thing is supposed to represent your screen, I should really put the person's desktop background

01:33:15 ◼   ► image in that little square. So it looks like a miniature version of their screen. And this is

01:33:20 ◼   ► especially true because switch glasses configurable per display, which is a whole other war story we'll

01:33:24 ◼   ► get to some other time. So you actually get a preferences window on every attached display,

01:33:28 ◼   ► and you can put it in different positions on different displays. So if you have two different

01:33:32 ◼   ► desktop pictures on two different displays, I have to show two different images there.

01:33:36 ◼   ► All right. So that was my idea for this feature. I had the feature all working without that. And I

01:33:40 ◼   ► said, let me try to do this as just a fun little surprise and delight thing. And so it was fairly

01:33:46 ◼   ► straightforward. It was an API that you can call and it gives you the, you know, the file path to

01:33:52 ◼   ► the current desktop picture. And then I would just read that picture and make a shrunken version of

01:33:56 ◼   ► it and shove it in the window, like done and done really easy. Right. And I more or less shipped

01:34:03 ◼   ► that except even in the first version, the first version of this was like, all right, that seems

01:34:07 ◼   ► to work, but, and I had a fallback path of like, Hey, if you can't load the thing, um, you know,

01:34:13 ◼   ► fallback that is showing the old UI, which just shows a box or whatever. The two things I ran

01:34:17 ◼   ► across in the initial release were, first of all, you haven't looked on a modern Mac. If you haven't

01:34:23 ◼   ► looked at like what the default desktop pictures are, like for example, on Mojave, that has those

01:34:28 ◼   ► picture of the sand dunes. I think it was the first dynamic desktop pattern where it's like,

01:34:31 ◼   ► you can pick the sand dunes picture. And as the day progresses, it shows different, like the

01:34:35 ◼   ► morning and the, in the noontime sun where it's bright and then the evening that at night, right.

01:34:39 ◼   ► - I don't remember how I did it, but there, well, maybe there was like a open source package. I

01:34:44 ◼   ► think there was something that will generate a JSON file that you need. But what I did was,

01:34:49 ◼   ► uh, long ago for my laptop, when it went on Catalina, you know, shortly after Catalina came

01:34:54 ◼   ► out, I took a picture that I had taken at Cape Charles on our beach vacation that year. And I'd

01:35:00 ◼   ► taken a couple of different exposures, one of which was exposed properly. And one of which was

01:35:04 ◼   ► way too dark, but it ended up working out great so that I made myself a custom like transitioning

01:35:10 ◼   ► desktop. And this is one of the things I actually really like about Catalina. And it's a custom like

01:35:14 ◼   ► transitioning wallpaper such that during the daytime hours, it's, you know, the two kids,

01:35:19 ◼   ► uh, at Cape Charles during the day. And then when it becomes dusk, it automatically switches to

01:35:25 ◼   ► roughly the same shot, but it looks as though it's a twilight. And it's just a really nice little,

01:35:29 ◼   ► as you were saying earlier, like surprise and delight sort of thing. I don't remember what

01:35:33 ◼   ► package it was, whatever I did to, uh, to, to, to generate this. If I can dig it up, I'll put it in

01:35:38 ◼   ► the show notes, but if you're interested in that sort of thing, you should check it out or try it

01:35:41 ◼   ► because it is really neat. So anyway, I apologize for the interruption. Carry on. Yeah. And for the

01:35:45 ◼   ► first version of search class, I'm like, well, this is just a little frill feature, so I'm not

01:35:49 ◼   ► going to spend too much time on that, but even just to do the thing of like, oh, you know, there's

01:35:53 ◼   ► an Apple API that gives you the path to the image. And then like I said, just open the image, read it,

01:35:57 ◼   ► make an image, small, shove it in like, yeah, not a big deal. Right. Um, but that like, you know,

01:36:02 ◼   ► and I was using during my testing, I was using, I think the, the sand dune image, right. Or maybe

01:36:07 ◼   ► I just had it on this default from a holdover from Mojave. I don't remember. Um, it's very difficult

01:36:11 ◼   ► to find as we've discussed in the past, uh, six K, uh, background images look nice. Anyway,

01:36:17 ◼   ► that image file is 274 megabytes. Whoa. Okay. So if you think, oh, as a frill, when someone opens up

01:36:27 ◼   ► the preferences window, I'm going to read the desktop image, make a scaled version of it and

01:36:33 ◼   ► stick it in the preferences window. You kind of have to read, well, maybe not all 274 megabytes,

01:36:40 ◼   ► which we'll get that in a second, getting to what Casey was talking about, which is multiple images,

01:36:43 ◼   ► but you do have to open the large file and then you have to read some portion of that. And it is

01:36:49 ◼   ► actually a pretty high resolution image. And so it's pretty fast, but it's not instant. So now

01:36:57 ◼   ► you're, I was faced with this scenario. I'm like, here's this thrill, this frill that I wanted to

01:37:01 ◼   ► add, but there's like a half second delay when I open my preferences window. And there's a half

01:37:05 ◼   ► second on my Mac pro with, you know, 12 cores or 16. I don't even know how many cores I have,

01:37:09 ◼   ► but with a bunch of cores and a fast SSD, what if someone has a spinning disc? I don't want to delay

01:37:14 ◼   ► the opening of a preferences window just so I can show a little frill picture of a desktop image.

01:37:20 ◼   ► So that was one challenge. And like, oh, maybe I shouldn't bother with this feature. The second

01:37:23 ◼   ► challenge is thanks to the wonders of sandboxing. If your desktop image is just like a picture of

01:37:30 ◼   ► your kids, like Casey, I can't read that image because it's not part of the operating system.

01:37:35 ◼   ► I could prompt you and say, oh, by the way, I'm trying to read your desktop image. They told me

01:37:40 ◼   ► it's in like, you know, users, Casey pictures, you know, desktop background. Can you please give me

01:37:45 ◼   ► permission to read your documents folder? I'm not going to ask for permission to read the documents

01:37:49 ◼   ► folder from my application switcher. I hate applications that are like that. They're like,

01:37:53 ◼   ► why, why do you need to read my documents folder? Even if I explain, oh, I just want to show your

01:37:58 ◼   ► desktop and people are going to be like, that's stupid. And I bet you're going to do more than

01:38:01 ◼   ► that. You're an evil program. So there was no way I was going to prompt for, please give me permission

01:38:07 ◼   ► to read your files. So I basically have to have two modes. If I can't read it. Oh, well, I just

01:38:12 ◼   ► show the box and if I can read it now, I still have that problem of like, do I want to delay

01:38:17 ◼   ► the opening? So what I did for version 1.0 was a switch glass. Doesn't have a doc icon. It doesn't

01:38:22 ◼   ► have menus. It just has a menu bar icon. And in the menu, the little thing that drops down from

01:38:27 ◼   ► the menu bar icon is the preferences choice. As soon as you click on the menu bar icon,

01:38:32 ◼   ► I immediately start opening your desktop image and reading it and making the scale thumbnail,

01:38:37 ◼   ► hoping that you are slow and mousing from there down to the preferences thing. I'm doing something

01:38:42 ◼   ► like on a background thread. Right. And then when you open the preferences window, I'm I say, okay,

01:38:49 ◼   ► I know I started that job. I'm going to give that job like half a second from the time you select

01:38:55 ◼   ► preferences. Just, just wait one half a second. And if it's done in that half second, show the

01:39:01 ◼   ► image. If it's not done, forget it, don't show the image. And I didn't want to put the image in after,

01:39:05 ◼   ► but then it's like you open a window and there's no image at all. The image appears and it's weird.

01:39:09 ◼   ► Right. And so I kind of tuned that for 1.0 to be like, okay, it's a big image,

01:39:13 ◼   ► but if you have a fast Mac, if you, if you actuate menus at a normal human speed, I will beat you.

01:39:21 ◼   ► And by the time the preferences window opens, assuming you have a Mac with an SSD,

01:39:26 ◼   ► I will have the thumbnail there. Right. That's 1.0. But you know, you know,

01:39:30 ◼   ► maybe I'm not particularly satisfied with that. It's just what I wanted to do for 1.0. Most people

01:39:33 ◼   ► probably saw the image. I had to add an item to the fact, which nobody reads. The fact says, Hey,

01:39:40 ◼   ► sometimes I see a desktop picture, but sometimes I don't. What's the deal. And I had to explain,

01:39:43 ◼   ► well, it could be because I can't read your image. I'm not going to ask for permission,

01:39:47 ◼   ► or it could be because things are too slow. Yada, yada, yada. The world is complicated.

01:39:50 ◼   ► And you know, I'm fixing bugs and doing other minor things. And for some reason,

01:39:55 ◼   ► this was just bothering me, the desktop picture thing, because as Casey alluded to before,

01:39:59 ◼   ► these dynamic desktop pictures, which I don't know if it's an open thing, but people have

01:40:04 ◼   ► reverse engineered it to make tools that let you make your own. But it's basically a single image

01:40:07 ◼   ► file with a bunch of images in it of different times a day. And then some metadata that tells

01:40:13 ◼   ► you, okay, this image is for this time of day, this image is for that time of day, so on and so

01:40:15 ◼   ► forth. And then if you pick that as your desktop picture, as time passes, the operating system picks

01:40:20 ◼   ► a different thing, right? Lots of people have that as their default, because it's a default desktop,

01:40:24 ◼   ► like whatever the Catalina one has an island, the picture of the island of Catalina, the Mojave one

01:40:29 ◼   ► had the desert, those are all dynamic. And those are the defaults. And they're good. They're nice

01:40:32 ◼   ► desktop backgrounds, like I use them a lot, right? And they do look cool. And it's the one sort of

01:40:37 ◼   ► changing over time thing that I keep. But what that means is that for the majority of the day,

01:40:42 ◼   ► when I show you a thumbnail, if you select a dynamic desktop, it's wrong. Because the dynamic

01:40:47 ◼   ► desktop, like my Mojave things in the background right now, it's nighttime. But if I just do the

01:40:52 ◼   ► naive thing and read like basically the first image in the big giant file, it's going to show

01:40:56 ◼   ► whatever the first images, which is usually like the midday or dusk one or whatever. And that's

01:41:01 ◼   ► no good. Like, I cheated in the screenshots, all my screenshots I show the background matches the

01:41:08 ◼   ► time of day, because I just made my background be the default time of day. You know what I mean?

01:41:11 ◼   ► Like, so it looks like they match. But if you're actually running it, and I actually win the race

01:41:16 ◼   ► and pull that image, when you open the Preferences window, you're like, well, I can see that's the

01:41:21 ◼   ► island of Catalina. But right now mine's in bright sun. And this picture is like twilight. So

01:41:26 ◼   ► oh, well, maybe you won't notice. But I was like, I can do better than that. Right?

01:41:30 ◼   ► I knew people had reverse engineered this format. So like, okay, well, I can do the same thing. I can

01:41:34 ◼   ► open the file, I can read that metadata and figure out which one of these images I'm going to pull.

01:41:40 ◼   ► Now, the first thing that surprised me was I thought there was like three images,

01:41:43 ◼   ► like morning, noon and night. I think there's like eight or 16 or 12. Like it varies from file

01:41:49 ◼   ► to file. There's a lot more images than you thought, which is why they're 274 megs. Like,

01:41:53 ◼   ► oh, this isn't great. The second thing that surprised me, I don't know if Casey's tool

01:41:57 ◼   ► accounts for this, or maybe there are multiple supportive formats, but

01:42:02 ◼   ► I expected it to be like, metadata would be like, between the hours of, you know, 6am and noon,

01:42:09 ◼   ► show this picture. And then from noon to three, show this picture. And you know,

01:42:11 ◼   ► like, that's what I expected. But that's not what it's like at all. What's in the metadata

01:42:16 ◼   ► for Apple's images is, first of all, it's like a, it's like a P list, which are great to deal with

01:42:21 ◼   ► in Swift, let me tell you. Just like a big giant dictionary of like, arbitrary data. And with single

01:42:29 ◼   ► letter keys, and single letter keys are like, one of the things is like, I, A and Z. The I is the

01:42:35 ◼   ► index saying like, this is the information about image number five, right? Easy enough. The A is

01:42:41 ◼   ► the azimuth. And no, the Z is the azimuth and the E is E. E for elevation. Anyway, it's the position

01:42:48 ◼   ► of the sun using, what are they called? Radial coordinates, horizontal coordinates? It's the,

01:42:54 ◼   ► it's azimuth and elevation. It's basically like, if you're sitting on the earth, how far do you

01:42:57 ◼   ► tilt your head back to look up? And how far do you look from left to right? And instead of time of

01:43:04 ◼   ► day. So, and those are just two numbers, like the the the azimuth and the elevation. So I know what

01:43:10 ◼   ► time it is. But I don't know what the azimuth and elevation of the sun is. Right? Because you have

01:43:16 ◼   ► to know where they are. Exactly. So here we are back in Catalina again. It's like, well,

01:43:20 ◼   ► if I want to figure out which image to pick from this file, I need to know where the sun is. If I

01:43:24 ◼   ► need to know where the sun is, I need to know where you are, which means I need to ask for location.

01:43:27 ◼   ► Oh no. That's not good. When you open the preferences dialog, I don't want to throw up a

01:43:33 ◼   ► thing in your face that says your application switcher would like to know your current location,

01:43:37 ◼   ► allow or deny. That's not a good experience. I can't be asking people where their location is.

01:43:45 ◼   ► I thought I would get rejected from app reviews. I'm like, oh, this is such a pain. So, I mean,

01:43:49 ◼   ► I was kind of dedicated, you know, too far into it at this point to bail out. I just wanted to see

01:43:54 ◼   ► this through. So I did go through the dance of figuring out what it takes to get permission.

01:43:58 ◼   ► That it's, you know, location is one of the fairly straightforward ones, but it's still so weird.

01:44:03 ◼   ► Like the API's on iOS, you get to ask, like, I'm sure Marco's familiar with these as like API's to

01:44:10 ◼   ► ask for permission. You can ask her if you want for a location where you can say always or only

01:44:14 ◼   ► when using the application. Like there's a way, there's a sort of, you know, imperative way to say,

01:44:19 ◼   ► I am now going to throw a dialog in your face that asks you permission to do a thing.

01:44:23 ◼   ► On the Mac, at least when it comes to location, it's different. You don't ask, you just try to do

01:44:27 ◼   ► it. When you try to do it, a couple of things could happen. If in a clean slate, you just try

01:44:35 ◼   ► to just call the API that asks for a location. When you call that API, a dialog will pop up in

01:44:40 ◼   ► their face and say application, whatever wants to use your location, allow or deny.

01:44:44 ◼   ► If they say allow, good, you're allowed and that's it. And there's no like,

01:44:48 ◼   ► this just, you're just allowed. And from that point on until they, unless they go into system

01:44:52 ◼   ► preferences and, you know, uncheck your thing from the relevant thing, you're allowed. Great.

01:44:56 ◼   ► If they hit deny, obviously your call fails and you don't get any location,

01:45:01 ◼   ► but also from that point on, if you ever call that API again, it doesn't pop up a dialog anymore.

01:45:08 ◼   ► It just fails. Right? So what you have to do is make a call, make a preflight call that says,

01:45:14 ◼   ► have I asked before and been turned down? If so, I got to make up my own dialogue that says,

01:45:20 ◼   ► Hey, I asked you about this before. You might not remember, but you said no, but you're trying to do

01:45:25 ◼   ► a thing in my app that requires location. So if you want to give me a location, I can't present

01:45:31 ◼   ► you with a dialog that lets you allow. Instead I have to, with words, describe to you, go to system

01:45:36 ◼   ► preferences, go to security and privacy, go to the location tab, and then look for my thing. Cause

01:45:41 ◼   ► it'll already be in the list. I know you didn't put it in the list, but it got there last time

01:45:44 ◼   ► when you denied me look for it in the list. Oh, by the way, click the lock and enter your admin

01:45:48 ◼   ► password to unlock it. Now look for my thing in the list, find the check mark next to it and check

01:45:52 ◼   ► it and then come back here. And now you'll be able to do this thing. There's no way hell I was going

01:45:57 ◼   ► to explain all that. Like there's lots of Mac apps that have very clever UIs that like they will

01:46:02 ◼   ► launch. You can launch system purposes to that exact tab. And I figured out how to do that too,

01:46:06 ◼   ► with like the URL scheme or whatever, but then other apps will like draw their own UI around

01:46:11 ◼   ► system preferences with arrows pointing. Have you seen these ones? Like super duper does something

01:46:15 ◼   ► like this. Some of them will have a proxy icon of their app in the windows that they're controlling.

01:46:19 ◼   ► And they'll say drag this little miniature picture of my app into the list, but like a green arrow

01:46:25 ◼   ► above it. And that proxy icon will represent the wrap. Like lots of very clever things.

01:46:29 ◼   ► All of this is UI that no developer should ever have to do. Like Apple should make this easier,

01:46:33 ◼   ► like it is an iOS where you can ask for permission. You can throw up a dialogue and people can say yes

01:46:39 ◼   ► or no. The fact that on the Mac, once you ask once you can never make that dialogue appear again,

01:46:43 ◼   ► isn't terrible. Anyway, I did all this stuff and I said, okay, but it doesn't change the fact.

01:46:48 ◼   ► There's no way in hell I'm asking people for the location. So I can't do that. What I can do

01:46:52 ◼   ► instead is pick a reasonable default location and it's going to be off by a little bit because

01:46:57 ◼   ► if you're in Canada and it's dark already and I pick a location that's closer to the equator,

01:47:03 ◼   ► I'm going to show the wrong desktop. But why don't you pick Catalina?

01:47:06 ◼   ► Well, I pick Cupertino because a lot of the examples online have that. Like I picked Apple

01:47:11 ◼   ► Park, right? That's not a great location, but at least there's some excuse for it. And in general,

01:47:17 ◼   ► in the middle of the night, it will be dark and in noon it will be light. And then sunrise and

01:47:23 ◼   ► sunset might be a little off, but that's a reasonable default. So then I was like, okay,

01:47:29 ◼   ► this is fine. I can ship this. People will complain a little bit that it doesn't match

01:47:33 ◼   ► their background, but it'll match their background within a couple of hours here or there. And if

01:47:37 ◼   ► you're in the Arctic Circle, well, you can't help everybody.

01:47:41 ◼   ► Although I actually have another suggestion if you want.

01:47:43 ◼   ► Well, I'm not done. Far from done. But what is your suggestion about location,

01:47:48 ◼   ► if that's what it's about? I was going to say you can look at their locale to get an approximation

01:47:53 ◼   ► of what country they're in. Then you can look at their time zone and see approximately what part

01:47:56 ◼   ► of that country they're in. And you can kind of sort of make an educated guess of like, all right,

01:48:01 ◼   ► what are the most populated areas of this country or whatever? Or just say like, whatever country

01:48:06 ◼   ► they're in, just like pick the middle longitude and then whatever latitude is the middle of the

01:48:10 ◼   ► time zone they're in. Yeah. You got to hope they're in a small place. Like the locale,

01:48:15 ◼   ► I'm not sure how precise locale is going to get you either because locale is like,

01:48:20 ◼   ► it's a combination. Like you don't necessarily know what country they're in based on the locale.

01:48:24 ◼   ► Right. You might, you might be able to get in the ballpark, but you can probably at least tell what

01:48:29 ◼   ► hemisphere they're in. And then when you combine that with time zone, you can get it, you can get

01:48:32 ◼   ► a pretty good estimate. Yeah. Anyway. I wasn't too worried about the details. And in the end,

01:48:38 ◼   ► like I did write all the UI for a secret hidden feature. It's like, look, if you care about this,

01:48:42 ◼   ► you can, you know, option click on the little thingy and it will actually lead you through

01:48:47 ◼   ► all the prompts to enable location, but you'll never do it on its own. But if you, if you really

01:48:51 ◼   ► care enough about this, that you want it to be accurate, we can go through and we can get your

01:48:54 ◼   ► location and it'll be fine. Right. Maybe I'll, I'll throw in some locale stuff with better guessing,

01:48:58 ◼   ► but, uh, I, I do wonder, you know, how, how much better that will be than just picking something

01:49:04 ◼   ► that's sort of like, I don't know. It's obviously a bias for a thing with like, uh, Cupertino is

01:49:09 ◼   ► probably a little bit too far North, but I didn't want to pick something on the equator. I didn't

01:49:12 ◼   ► want to pick something on the pole. So I'm trying to pick something like midway through the equator

01:49:15 ◼   ► in the pole and it's going to be more wrong if you're in a different hemisphere during, uh,

01:49:18 ◼   ► anyway. Um, so then I'm like, okay, well that's, that's fine. I can ship that. It will be more

01:49:24 ◼   ► correct for most people. And I can look at where my, my meager sales are coming from. It's mostly

01:49:28 ◼   ► from the U S anyway. So it's, you know, it's like, it would be fine. It's better than it was before.

01:49:33 ◼   ► Most of the time it would match. Um, but then I had the problem of if, if before making that one

01:49:40 ◼   ► thumbnail image took a long time, now I have to read the file, parse it, get the information,

01:49:46 ◼   ► like there's more opportunities for caching. Like, well, I should really just like not read the file

01:49:49 ◼   ► and parse it more than once. I should keep track of where everything is. Uh, and then I had a thing

01:49:55 ◼   ► where once I did that once, if you pulled up the preferences window again, I wouldn't redo the work.

01:49:58 ◼   ► I wouldn't redo that whole waiting. I already have the image for you, but now I have to expire that

01:50:03 ◼   ► cache of that image at a certain point and know when it's going to change over to something else.

01:50:07 ◼   ► Right. And it just like, even just parsing the whole file and getting all that information was

01:50:12 ◼   ► a little bit costly. I was like, Oh, I can probably make this low. It was getting slow.

01:50:17 ◼   ► Like it was like, it's not doing that much work, but you know, half a second delay becomes a second

01:50:22 ◼   ► delay. And now your app starts to feel sluggish and wise. You can show a little thing. So I'm like,

01:50:26 ◼   ► I only wanted to be sluggish. Maybe the first time when people won't notice. So I wanted to

01:50:29 ◼   ► pre parse the file, pull out all the images, make all the thumbnails and stash them away. So that

01:50:36 ◼   ► when they pull it up again, if they haven't changed their desktop background, I can just

01:50:40 ◼   ► show the next image from whatever the time has passed. Right. Then at least, at least my change

01:50:44 ◼   ► over time would be accurate. And I wouldn't be, I wouldn't be delaying them every single time they

01:50:48 ◼   ► bring them up. And again, most people aren't going to bring up the provinces, but whatever, that's,

01:50:52 ◼   ► that's what I was doing. So I wanted to have, and I wanted to have the best of both worlds, which is

01:50:56 ◼   ► I wanted you to be able to quickly get the thing up before I've done all that parsing,

01:51:02 ◼   ► but then I wanted it to be replaced with the correct image if it did that fast enough. So now

01:51:05 ◼   ► I'm doing multiple things. You click on that icon in the menu bar and I'm doing the default thumbnail

01:51:10 ◼   ► real fast and getting that ready. And I'm also in parallel doing all the other thumbnails, you know,

01:51:16 ◼   ► using those cores, right? Can I get my app switcher to peg all the cores in your computer? Briefly,

01:51:21 ◼   ► I can do it when you click on the menu bar icon and I pre-process all of your images. And then

01:51:24 ◼   ► when it comes up, if the correct one is ready, you see that one. If the incorrect one is ready,

01:51:29 ◼   ► you see that one. And it shortly gets replaced by the correct one, which is less jarring transition

01:51:32 ◼   ► because it's just a little bit brighter or darker. Right? So I had that. I'm like, okay,

01:51:36 ◼   ► that's, I've already put too much work into this. I'm done. I'm just going to ship this. It's fine.

01:51:41 ◼   ► Who cares? It's just a frill. It's not an essential part of my application. I've already

01:51:44 ◼   ► tempted fate by making these, having to check the location services thing and the sandboxing thing,

01:51:50 ◼   ► just so I could potentially bring up that dialogue with a weird modifier click that nobody knows

01:51:53 ◼   ► about, hopefully. Right. Let's just do that. Then I found out sometimes when you ask the operating

01:51:59 ◼   ► system for what the desktop background is, it's not a picture. I don't know if any of you do this,

01:52:03 ◼   ► but there's at least one person that I know who does this because he gave me the bug report,

01:52:07 ◼   ► which is like, Hey, if you don't pick a picture for your desktop background, it's wrong.

01:52:11 ◼   ► I'm like, what do you mean? If you don't, if you don't pick a picture, it's like, well,

01:52:14 ◼   ► you can pick solid colors too. If you go to the system preferences, you can, you can,

01:52:19 ◼   ► there's like solid colors and it's not like a folder full images. It's just right. Well,

01:52:23 ◼   ► it turns out I did it. I'm like, Hey, it works fine for me. I picked one of the solid colors

01:52:26 ◼   ► and it's fine because the solid colors are like cyan dot TIFF or whatever they actually are files

01:52:31 ◼   ► on disc that are just colors. And he was like, Oh, I guess it's because I have a custom color.

01:52:36 ◼   ► What you can also do is pick a custom color and then it brings up a color picker and you just

01:52:42 ◼   ► pick whatever color you want. And that's not an image at all. When you pick custom color and you

01:52:47 ◼   ► call that API that says, Hey, what, what image are they using for the desktop background? It gives

01:52:51 ◼   ► you this like transparent dot TIFF. And then you have to do some other API to figure out what color

01:52:58 ◼   ► it is. And that took me a while to figure out because there's no API that gives you that

01:53:01 ◼   ► information, but there is an API that tells you stuff about the background, about the picture

01:53:05 ◼   ► that says, Oh, should it be scaled to fill or should it be this? And there's also a background

01:53:09 ◼   ► fill color for when you don't, your image doesn't exactly fit your screen. Apparently it uses that

01:53:13 ◼   ► background fill color to be your custom color as well. So I was happy to find that. So I'm like,

01:53:18 ◼   ► Oh, and I got some special case code. If your background is this exact path to this transparent

01:53:22 ◼   ► TIFF calls other API, get the fill color, make an image of that color, put it in the thing.

01:53:26 ◼   ► Right. It can't be worth it. We've not yet begun to fight.

01:53:31 ◼   ► Right. So then, so then I've covered that custom color case. Right. And I was almost,

01:53:41 ◼   ► I was doing other stuff and bug fixes do. This is just always going on in the background. I was like,

01:53:43 ◼   ► my, as my quote unquote fun project, cause I got to use multi-threading and it's kind of fun.

01:53:47 ◼   ► You know, doing that type of stuff and watching, watching you utilize your computer briefly and

01:53:53 ◼   ► figuring out how to make it space efficient. I was like compressing the, uh, the thumbnails

01:53:56 ◼   ► to a smaller form in memory. So my memory wouldn't be bloated. I was looking at instruments and

01:54:00 ◼   ► watching the memory briefly spike up really high and then drop back down, which is a great thing

01:54:04 ◼   ► that usually don't see in server-side development with high level languages. Cause once it allocates

01:54:08 ◼   ► memory, like never wants to get it back to the iOS, but this does, I was like, this is great.

01:54:12 ◼   ► I was using the leaks tool and doing all this cool stuff, having fun. I thought I was ready to ship

01:54:17 ◼   ► it. I'm like, actually I did ship it. I shipped this update. It's the one in the store now,

01:54:21 ◼   ► 1.1.1 more or less described. It works exactly as I described, but in more discussions with

01:54:27 ◼   ► developers, I was talking about this in one of the show and tell channels. I'm one of the slacks

01:54:31 ◼   ► along with developers. Someone mentioned, Oh, you know, there's another way to do this. They're like,

01:54:36 ◼   ► this person had actually done it in his app. It's like, apparently if you walk the window list,

01:54:42 ◼   ► you can find the desktop window and you can grab an image of it. Oh God. And I was like, well,

01:54:48 ◼   ► don't you, isn't that going to throw up the screen recording prompt? I don't know if you've

01:54:52 ◼   ► seen this like application X wants to record your screen. Like lots of applications do that,

01:54:57 ◼   ► but they don't really want to record your screen. But if you do anything that involves like reading

01:55:00 ◼   ► data from any other window thing, like it's kind of amazing on the Mac and sandbox and

01:55:05 ◼   ► you actually can get the window list. It's just a bunch of metadata. It's like this window is

01:55:09 ◼   ► this size and this position, right? Like the ability to do stuff with those windows is severely

01:55:14 ◼   ► limited to sandboxing apps. You can't like close those windows or move them around without

01:55:18 ◼   ► accessibility. Like there's a bunch of other things, you know, permissions you need to ask

01:55:20 ◼   ► for to do stuff, but you can get the window list with no permissions, right? And you can kind of

01:55:26 ◼   ► find the desktop image. And once you find that window, apparently even on Catalina, because it's

01:55:33 ◼   ► the desktop window, if you ask just to read that window, you don't have to ask for screen recording

01:55:39 ◼   ► as far as I've been able to tell. I did get it to come up because initially I asked for the window

01:55:44 ◼   ► and I didn't put past the right option. It was giving me like that window plus everything above

01:55:48 ◼   ► it. And that does prompt you for screen recording. I just said deny. But I think if you just ask for

01:55:53 ◼   ► the desktop, you get that. And that's ideal because then I'm like, Oh, look at this. I've simplified

01:55:57 ◼   ► all this code. I don't have to read this weird ass file and parse it. I don't have to figure out if

01:56:01 ◼   ► it's a transparent thing and synthesize my own thing. I'll just get whatever the picture is on

01:56:07 ◼   ► your desktop. In fact, someone else posted something, another approach to this, which was

01:56:11 ◼   ► like this core animation plugin thing where not only can you get the contents of the desktop

01:56:18 ◼   ► window, but what you can make is another little window on your screen that is essentially a

01:56:22 ◼   ► miniature shrunken live version of some other window. There was like a demo app that was like

01:56:31 ◼   ► I'm going to show you a shrunken version of your whole screen, you know, like in a postage stamp.

01:56:35 ◼   ► And it's like live updating. Like you could drag things around and see it moving around in the

01:56:38 ◼   ► postage stamp. As you can imagine, that totally does not work in Catalina. Like it is not,

01:56:43 ◼   ► they're not letting you just look at other windows. It doesn't, it doesn't prompt you for

01:56:48 ◼   ► screen recording. It's just like, yeah, no, it doesn't crash or error out, but it is totally

01:56:52 ◼   ► non-functional. So I was excited about that for a second. I coded it all up and then I realized

01:56:56 ◼   ► this doesn't work at all. And I use the demo app. I should have done this in the beginning.

01:57:00 ◼   ► Let me try running the demo app. Yeah, the demo app just shows a gray window. So that was kind

01:57:04 ◼   ► of disappointing, but I was excited about it, but I'm like, fine, well, whatever. I still got

01:57:06 ◼   ► the thing where I can find the desktop window and I will just grab that image and it just,

01:57:11 ◼   ► it's going to simplify all this crazy, stupid, multi-threaded code and preloading and caching

01:57:16 ◼   ► or whatever. This will, this will make things simpler. I can just grab the picture that's there.

01:57:20 ◼   ► It never, it never does make things simpler, does it? So I did that and it

01:57:29 ◼   ► more or less worked. But the problem I ran into, and this is a whole other war story for another

01:57:34 ◼   ► day, was that when you go through the window list, how do you find the window that's the desktop?

01:57:39 ◼   ► Like, well, you can kind of tell like the owner is the doc and there aren't many windows like that.

01:57:46 ◼   ► It's going to be the same size as your screen. That's a good clue. And the layer is going to be

01:57:52 ◼   ► like negative 2 billion or something like this. There's some, you know, the, the bottom layer,

01:57:56 ◼   ► the bottomist or a very bottom layer, like, like that's, you know, a human could find it. And by

01:58:02 ◼   ► the way, the name is called desktop picture, hyphen name of picture. Like, look at this.

01:58:08 ◼   ► How could you not find the desktop image? It's really easy to find. And then you think,

01:58:12 ◼   ► wait a second. And especially if you've been doing this multi-monitor stuff that I've been doing,

01:58:16 ◼   ► how do I distinguish one desktop picture from a different one? If you have two identical monitors,

01:58:23 ◼   ► they're the same manufacturer, the same model running in the same resolution,

01:58:27 ◼   ► but have two different desktop pictures on them. How do I tell which desktop picture

01:58:32 ◼   ► goes with which monitor? Oh no, not, it's not particularly easy.

01:58:40 ◼   ► There are some heuristics you can do. You're like, all right, for the file name thing.

01:58:46 ◼   ► If you have your desktop background set to a file and it's set to a different image,

01:58:51 ◼   ► they'll have different file names in the name. So one will say desktop picture hyphen

01:58:55 ◼   ► Mojave dot heek. And the other one will say desktop picture hyphen Catalina dot heek. Right.

01:59:01 ◼   ► And I can ask for the URL to the desktop picture and match it up. Right. And I can say, okay,

01:59:06 ◼   ► well, let me take the file name portion of the desktop URL and make sure it matches up.

01:59:09 ◼   ► And then you can fake it out. Cause if you make a file called Mojave dot heek and you

01:59:12 ◼   ► put it in a different folder and that's really a picture of your kids, congratulations, you fooled

01:59:16 ◼   ► me, but that's all the information I have to go on. And obviously I'm matching on size, right?

01:59:21 ◼   ► I can't really match on screen origin because depending on the arrangement of the screens,

01:59:25 ◼   ► the origins, it's not, I haven't found a way to, to sort that out, but just the final empire,

01:59:30 ◼   ► I'm like, well, again, this is probably going to be right. People aren't going to intentionally

01:59:34 ◼   ► fake it out. If they literally have the same image, it doesn't matter. If they name the

01:59:38 ◼   ► picture of their kids, Mojave dot heek. Oh well, but how common is that? I'm probably good here.

01:59:43 ◼   ► Right. Let me just do this. It's way easier than the other technique.

01:59:47 ◼   ► And it was still a little bit of work. Cause I was like, well, I do have the fallback where

01:59:52 ◼   ► if I really can't figure out what monitor something belongs to, I can always just fall back

01:59:56 ◼   ► to the other code that I didn't delete. That does it the hard, the quote unquote hard way.

01:59:59 ◼   ► So I left that all in there and there's this weird cascade of like, I'll make the best effort

02:00:03 ◼   ► to find the desktop images. If I find them, I'm going to use them. Cause that's the way easier way

02:00:06 ◼   ► to do it. But if I can't find them or it's too ambiguous, I'll fall back to the other way.

02:00:10 ◼   ► And I already had all the code to do that. And now like, this is by far the most complicated part

02:00:14 ◼   ► of my program, you know, like the most lines of code, the most scariest code, the most parallel

02:00:19 ◼   ► stuff. It's just, you know, the most CPU intensive, the most memory intensive. And by the way,

02:00:25 ◼   ► getting better, like the, uh, doing it this way of finding the window takes way less memory and

02:00:30 ◼   ► is way faster than the other ways I was doing it. So I vastly prefer this one, but again,

02:00:33 ◼   ► the API provided to me do not, they do not make this easy. It's like a mystery adventure.

02:00:39 ◼   ► Like you can get 99% of the way really easy. And then you're like, but how do I, how do I tell,

02:00:43 ◼   ► how do I know? Right? So I did that. I was like, okay, this is, this is about going to ship along

02:00:47 ◼   ► with this other set of bug fixes and stuff I'm doing. Like it's better than it was before.

02:00:51 ◼   ► It uses less memory. It is more accurate. There are some scenarios where it's going to get confused,

02:00:56 ◼   ► but Oh, well things are moving in the right direction. And yes, it's a hundred times more

02:00:59 ◼   ► complicated, but it seems to be working fine. Like this whole time, no crashes or anything.

02:01:04 ◼   ► And I'm really enjoying Swift. Like I'm, I've, I'm not writing correct programs, but they're

02:01:09 ◼   ► not crashing. Like they're just, you know, not working right. Which is great. I feel like I'm

02:01:12 ◼   ► really getting the benefits of arc and all that other good stuff and not leaking too. And I found,

02:01:16 ◼   ► by the way, I found the static analyzer. I'm like, I remember those sessions about the static

02:01:20 ◼   ► analyzer. Where does that command the next code? Like, is there a code to run the static analyzer?

02:01:24 ◼   ► So I Googled it and I found the static analyzer. Yeah. And I ran it. And I realized that if it had

02:01:31 ◼   ► ever said anything, like there was a little tab on the sidebar where it'd be yelling at me,

02:01:35 ◼   ► there was nothing in the thing. I kept running it. I'm like, nothing like literally nothing.

02:01:40 ◼   ► Like, how is that possible? So either I'm doing something wrong or it is not as me and a linter

02:01:45 ◼   ► as I thought it would be, or Swift is reading me, leading me down the correct path to just not

02:01:50 ◼   ► write any code that the static analyzer yells about. Nothing, nothing is that. Anyway,

02:01:55 ◼   ► so I was going to ship this and then I found yet another edge case that made me not be able to ship

02:02:03 ◼   ► this. And that was what else can you set your desktop background to? Maybe Casey knows this.

02:02:10 ◼   ► It's solid colors, pictures of your own choice, dynamic desktop backgrounds. What else?

02:02:15 ◼   ► You can set it to like photo albums, can't you? Oh, you're going to find one more that I haven't

02:02:20 ◼   ► even found. Can you do it for a while? I'm pretty sure you can say, you know, take a

02:02:25 ◼   ► photos album. Does that make sense? Like an album from the photos app. I know you can do it with

02:02:29 ◼   ► screensavers. Can you do it with... Oh no, no, you're right. Maybe I'm thinking of screensavers.

02:02:33 ◼   ► I think you might be right. Oh no, I do see photos. Wow. Yeah, that's another one. So

02:02:38 ◼   ► congratulations. You've made more work for me, but the one I found that's not, it was disclosed. The

02:02:42 ◼   ► one I found that is not photos, which God, what is it doing? You pick photos. I have to find out.

02:02:46 ◼   ► Anyway, photos and like in the end, like the photo stuff, like in the end, that wouldn't matter,

02:02:53 ◼   ► right? Cause like, I don't really care where the image comes from anymore with my new technique.

02:02:56 ◼   ► I just find the desktop window and just read it. I don't care how the bits got there. I just,

02:03:00 ◼   ► I see it and copy it. Right. So maybe that works fine with photos. The one that doesn't work with,

02:03:05 ◼   ► and maybe it doesn't work, we'll see. The one it doesn't work with is if you pick, if you click

02:03:10 ◼   ► the checkbox at the bottom that says change my picture every N minutes or whatever, you know,

02:03:15 ◼   ► that one, if you do that, when you call the API that says, tell me what the URL to the desktop

02:03:23 ◼   ► image is, it doesn't give you the URL to the image. Instead it gives you the URL to the folder

02:03:28 ◼   ► where all the images are, which is the worst. It's like, you know what the image is. You changed it.

02:03:33 ◼   ► Just give me the URL of whatever image you're currently showing. It's like, Nope,

02:03:36 ◼   ► you're going to get the folder URL. As you can imagine, the folder URL is not particularly useful

02:03:40 ◼   ► when it comes time to find the image that belongs to. So when you pick the rotating thing,

02:03:46 ◼   ► I have to use the new way, because if I don't use the new way of taking, you know, grabbing the

02:03:51 ◼   ► picture of the desktop, I have no other information. I don't know what image in that folder you're

02:03:56 ◼   ► currently showing. All I can do is pull from that thing. So now I'm much more reliant on the new

02:04:00 ◼   ► techniques. And now I'm really like sweating over in this scenario. I can't bail on the not being

02:04:06 ◼   ► able to figure out which desktop. I just have to pick one. I just have to say, look, I'm just going

02:04:09 ◼   ► to guess you have two identical monitors. I'm going to make a best guess. And the way I can

02:04:13 ◼   ► make a best guess, I can help a little bit by saying, okay, I can find out what the name of the

02:04:20 ◼   ► images, because that's still in the window name. And I could find out in this folder that the image

02:04:25 ◼   ► URL is returning. Is there an image name the same as this one in this desktop? Because there's no

02:04:29 ◼   ► image of that name in that folder. I know it doesn't belong to this monitor. If there is an

02:04:32 ◼   ► image of that name in that folder, I don't know for sure, but it's a stronger hint. So I just upped

02:04:37 ◼   ► my heuristics game a little bit. And I did a little bit of work with the origins to try to

02:04:40 ◼   ► figure out that the origins were off a little bit, but I did a little bit of wonky stuff to try to

02:04:45 ◼   ► make like a best guess of like, well, if the origin is within this range, it's probably that monitor.

02:04:49 ◼   ► Anyway, more special case code. And I got that more or less working. I didn't know about the

02:04:57 ◼   ► photos thing, so I have to look at that. Obviously I didn't ship this yet. Yeah. I wonder when I pick

02:05:03 ◼   ► a photo album, what the hell is that image URL thing? Didn't it return? I don't even know.

02:05:06 ◼   ► We'll be able to do anything with it. And then I was, you know, someone mentioned on these various

02:05:14 ◼   ► Slack channels where I'm talking about this, they're like, oh yeah, of course, when someone

02:05:17 ◼   ► brings up the preference window, if they just leave that preference window open for a long time,

02:05:20 ◼   ► it's going to get out of date, right? Maybe the desktop background is changing every five minutes

02:05:24 ◼   ► and it changes out from under them or like the time of day changes. I'm like, oh yeah,

02:05:28 ◼   ► I'm fine with that. Like who's going to leave the preference window open for a long time? Right.

02:05:30 ◼   ► But it started to bother me. I'm like, I got all this machinery in there.

02:05:35 ◼   ► I like the desktop. I don't know when the desktop background changes, but what if I just checked

02:05:42 ◼   ► every 30 seconds or something? That shouldn't be too hard. Right. And so now I'm like, I had no

02:05:49 ◼   ► polling and no timers in my whole app. I'm like, I can add a 60 second timer to each preferences

02:05:53 ◼   ► window to check whether the things change. And that was a big mistake because it was

02:05:58 ◼   ► horrendously complicated because guess what? If they have it set to a folder full of things,

02:06:02 ◼   ► the URL is never going to change. Like you're going to say, is the URL still desktop pictures

02:06:07 ◼   ► folder? And it's going to say, yep. You're like, okay, but, but did the image change?

02:06:11 ◼   ► Well, I don't know. It's just desktop pictures. Oh, maybe I should, I could wander the window list

02:06:17 ◼   ► and look to see if the, if the file changed there and that like all my other caching mechanisms were

02:06:22 ◼   ► built on the idea that the URL will change in the file. If the image changes, that's not true. Oh,

02:06:26 ◼   ► and by the way, the lowest setting in totally non Apple like fashion is that you can set your

02:06:31 ◼   ► desktop picture to change every five seconds. Oh my goodness. There's no way I'm going to pull

02:06:37 ◼   ► that fast. Like I don't even want to like read the image and make the thumbnail every five seconds.

02:06:41 ◼   ► That's way too fast. So I spent a while on that. I'm like, okay, what is the reasonable balance of

02:06:47 ◼   ► being responsive to like, if you leave the window open for an hour, it has a chance of being correct

02:06:51 ◼   ► versus being able to keep up with the every five second thing. And during the course of that,

02:06:55 ◼   ► I found yet more bugs in this technique, which is I'm not going to get into the multi-monitor stuff,

02:06:59 ◼   ► but the way I'm doing multi-monitor is with sidecar with my iPad, right? Which has been,

02:07:04 ◼   ► you know, a blessing because I don't want to keep lugging a second monitor over here.

02:07:06 ◼   ► And one of the many tests that I do for various scenarios is what if your app is in some state,

02:07:13 ◼   ► one of its many possible states and you suddenly connect an external monitor,

02:07:16 ◼   ► how do you handle that? Right? I don't know if this is particularly a sidecar or just second

02:07:21 ◼   ► monitors in general, but all the code that I have to do that is like, oh, second monitor appeared,

02:07:27 ◼   ► make sure you got a palette on it. Make sure you find the preferences for that monitor and make

02:07:29 ◼   ► sure you put it there on, by the way, if the preferences window is up, the preference window

02:07:33 ◼   ► should also be up on the new monitor that just appeared. That all works great, except apparently

02:07:39 ◼   ► when you just connect the monitor, my app reacts fast enough that when it goes to read the desktop

02:07:45 ◼   ► window, the desktop window is not done drawing into the backing buffer for the window. And I

02:07:50 ◼   ► get an image of like the first third of the thing, like a half downloaded image instead of getting

02:07:55 ◼   ► the full desktop image. So I had to like add a delay that says when a new monitor appears,

02:08:01 ◼   ► just wait a second, wait for the desktop image to fill in behind it, then grab it out of there.

02:08:06 ◼   ► And I hate adding crap like that because it's like, how long is a long enough delay? You don't

02:08:10 ◼   ► want to wait too long, but you can't get the image that way if you don't do it that way. And by the

02:08:14 ◼   ► way, you don't have a fallback technique if they have it on the rotating image thing. So here I am

02:08:19 ◼   ► connecting and disconnecting monitors, making my desktop picture change every five seconds,

02:08:23 ◼   ► making sure that there's no scenario in which you could, you don't see a reasonably up-to-date image

02:08:28 ◼   ► and that the caching all works. So that's where I am with this. I did not ship this updated version,

02:08:35 ◼   ► which is, it doesn't have many new changes. And in fact, there's a bunch of other fixes that I

02:08:38 ◼   ► don't want to add in before I do it, but the desktop picture stuff, this is a perfect example.

02:08:43 ◼   ► And more of the war stories will come up of like a scenario where ostensibly MacOS offers APIs to do

02:08:51 ◼   ► a thing, but they are so incomplete in frustrating sort of 1% edge case ways that to make an

02:08:59 ◼   ► application that really does what people expect you to be able to do is incredibly complicated.

02:09:03 ◼   ► Like literally all I want is give me a small version of the desktop images on this screen.

02:09:08 ◼   ► If that was an API, give me the full size image of the desktop. And if that was the API,

02:09:13 ◼   ► I would be done, but there's no API to do that. There's an API that ostensibly gives you a URL,

02:09:17 ◼   ► but as you've seen, it doesn't give you a real URL. Sometimes it gives you a folder. Sometimes

02:09:21 ◼   ► it gives you a transparent TIFF and you have to know to look elsewhere for the things and God

02:09:25 ◼   ► knows what it gives you with photos. What about getting the picture? Sometimes you can get it,

02:09:29 ◼   ► sometimes you can't. Will that URL change when the image changed? Sometimes it will, sometimes

02:09:34 ◼   ► it won't. Can you go to the window list? Yeah, but you can't tell which desktop belongs to each

02:09:37 ◼   ► thing. Can you parse the files? Yeah, you can parse them, but then you have to know the location

02:09:41 ◼   ► and the solar position. The task that needs to be accomplished. If I was at Apple, this is more

02:09:46 ◼   ► than one day's work, you could make an API to do this. The API would be called like an NSScreen API

02:09:52 ◼   ► or like get desktop image for screen. There would be an API named like the code that I'm writing

02:09:57 ◼   ► and on the inside of it, if you're in the OS, I can actually get that info. But instead, I'm

02:10:01 ◼   ► peeking through the key holes, peeking through these little windows saying, "What's going on in

02:10:06 ◼   ► there with desktop image? Hey, hey guys. Hey, is there something on the desktop? Can I get that

02:10:12 ◼   ► image and know what screen it's associated with?" And the OS is like, "Eh, don't bother us here.

02:10:17 ◼   ► Call this API, it returns something, you can probably find some other info elsewhere. Just

02:10:22 ◼   ► figure it out. You can really piece it together like a Columbo mystery. There's just one more

02:10:25 ◼   ► thing. Can you just tell me what the name of the file is on that screen? Now just one more thing.

02:10:30 ◼   ► What is the origin and what coordinate system is that in again? Just one more thing."

02:10:35 ◼   ► So I have not yet shipped this update. I really need to stop doing anything having to do with

02:10:42 ◼   ► desktop pictures because let's remember, this is all just to put a tiny picture of your desktop

02:10:47 ◼   ► in the preferences window that most people will never see. They'll go to once, set it up,

02:10:51 ◼   ► and never look at again. You need another app.

02:10:55 ◼   ► I do have to actually fix some bugs and add some features to this. Lots of people want things. The

02:11:03 ◼   ► thing that surprised me most with all the feature requests is people want this thing that I

02:11:07 ◼   ► explicitly don't want. I know if people want it, then I'm probably going to add it. But what people

02:11:12 ◼   ► want is like, I guess I was used to the way the dock behaves. When you've got an application that

02:11:16 ◼   ► has no windows open and you switch to it, people want it to open a window. I hate that behavior.

02:11:24 ◼   ► I just want to switch to it. But everybody's like, "If I have no windows open and I click the dock

02:11:30 ◼   ► icon or a thing in Switch class, I want it to open a new window." Really? Or if it has minimized

02:11:37 ◼   ► windows, they say, "If I click on the thing and there's no windows open, I want it to pick a

02:11:41 ◼   ► window and unminimize it from the dock for me." Really? That's what you want? That's the last

02:11:46 ◼   ► thing I want. Some of those I can't do. I'm not sure. I don't think I can un-minimize stuff from

02:11:50 ◼   ► the dock, but apparently a couple of them I can do. I might have to add that. The window snapping,

02:11:56 ◼   ► people want that, where you bring another window close to it and it does that snapping thing.

02:11:59 ◼   ► As an application, you have basically no control over that because it's the OS doing it.

02:12:05 ◼   ► But the OS does it based on what layer your window is in. So if you're a floating window,

02:12:08 ◼   ► like mine is, you don't interact with the regular windows. So I might have to make an invisible

02:12:12 ◼   ► regular window that's hiding behind my real window for the purposes of snapping. People want full

02:12:17 ◼   ► screen not to go underneath my thing. Again, I don't think I have a way to do that. The dock

02:12:22 ◼   ► and the menu bar can influence how much space is available. But if you're just a window, you can't

02:12:27 ◼   ► be like the dock and be like, "Oh, this space is not available for you," whatever it is, like on

02:12:31 ◼   ► iOS, usable edge insets or whatever. I don't think there's a way for me to influence that from a

02:12:37 ◼   ► sandbox Mac app to say, "I'm just like the dock where I am. No window should go." That's not going

02:12:42 ◼   ► to happen. But yeah, people have got a lot of ideas and a lot of suggestions, but I'm still

02:12:48 ◼   ► plugging away on the basics here. Well, that was a journey.

02:12:52 ◼   ► "499 Mac App Store. Peg all your cores briefly and the fallback method and the tertiary

02:12:59 ◼   ► strategy for pulling up your desktop image and multi-monitor..." Oh my God. Too complicated.

02:13:04 ◼   ► I'm already excited for the follow-up with regard to a photo album as a desktop.

02:13:10 ◼   ► I'm not excited about that. I would have found it eventually or someone would have found it

02:13:15 ◼   ► probably after I shipped. So at least thank you, Casey, for reminding me that I should hit this

02:13:18 ◼   ► disclosure triangle. But God, what does this return? When I call image URL, what is it going

02:13:24 ◼   ► to return? It would be nice if it returned the URL to the image, but I don't think I'm going to

02:13:28 ◼   ► be able to read it anyway, which is fine. There's no way of getting around that scenario. If you...

02:13:33 ◼   ► I don't know. Maybe I won't be able to tell what screen it is at all. Maybe it will be just empty.

02:13:41 ◼   ► [beep beep beep]

02:13:45 ◼   ► [ Silence ]