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: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: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: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: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: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: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: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: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: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: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: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: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:38 ◼ ► choosing to install, you know what I mean? So there's only so much an antivirus anti-malware
00:26:47 ◼ ► or some of them are semi-legitimate. Well, it's like, well, it's not malware. It's just
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: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:44 ◼ ► installing malware. Well, except I did install this logic drivers, but that's unfair. So far,
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: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: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: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:35 ◼ ► either like a console video game player, something more switch-esque, or alternatively, something
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: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:30 ◼ ► I think I'm going to be one of those people that Casey just said, "Please don't email him."
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: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: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: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: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: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: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: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: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: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: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: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:27 ◼ ► thing. And even some of those they outsource to Belkin, so they can't even make all those themselves.
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:36 ◼ ► Post your job today at Indeed.com/podcast and get a free sponsored job upgrade on your first posting.
00:50:48 ◼ ► offer valid through March 31, 2020. Thank you so much to Indeed for sponsoring our show.
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:32 ◼ ► like they change the toolbar and stuff like that, but I haven't really used it enough in that time
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: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: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: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: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: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: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: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: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: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: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:23 ◼ ► can be even like quote unquote fixed of just like, well, I did the work part of it. Right.
01:14:33 ◼ ► whatever it is that's causing the finder to occasionally decide that it doesn't care what
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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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:42:02 ◼ ► I expected it to be like, metadata would be like, between the hours of, you know, 6am and noon,
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: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: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: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: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:33 ◼ ► their background, but it'll match their background within a couple of hours here or there. And if
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: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: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: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: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: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: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: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: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: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: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: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: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: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:28 ◼ ► I'm fine with that. Like who's going to leave the preference window open for a long time? Right.
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: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: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:06 ◼ ► And one of the many tests that I do for various scenarios is what if your app is in some state,
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: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: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: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: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...