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 ]