Yesterday we went to my parents' house. A very small part of the impetus for that trip was to try to diagnose or at the very least collect my busted technology. If you recall from last episode, they had had, I guess I should say, a power strike and apparently my synology that was sitting over there that a friend had given to me had died and I was very sad about it. So we get to my parents
and the thing is dead. It is very dead and I open it up, everything looks fine. So I think, well, unlike the bigger synology that I've used or I am using, this doesn't take one of those I triple E or IA or whatever, whatever. We had the same conversation Marko last time. I forget the name of the little connector. But in this case, it has an actual brick in it, I guess because the
synology is physically fairly small and so the power supply is external. I didn't remember this because the last time I'd really put any eyes on the synology was like a year or two ago and I gave it to my parents and said, please hook this up and never look at it again. So I thought to myself self, what if it's just the power supply? I ordered a new power supply which arrived an hour or so ago and I'll give you one guess. It's back in better than ever, baby. So it turns out not that.
That was it. Just power supply? That was it. That's always the power supply, those stupid bricks. I didn't want it back when I used that external hard drive so they would all come with those things and I think every single one I had, quote unquote, go bad, it was the power supply, every single one. So I am very happy. Now, the funny thing about this is the 1813, the original 8B is sitting at my parents and I am backing up to it at 24 megabytes a second as we speak because the backup never
did finish. So I have what is this like seven-ish terabytes of I think the 10 to 11 that is the backup data set. So it'll finish at some point. But I want to try to update the backup on the the one that I thought was fried and apparently the main synology is refusing to do any backing up or multiple backups concurrently which I kind of get to be honest with you. But hopefully that
means knocking on my relay block of wood. Hopefully that means that everything is right as rain once again and that means my 8B will either live at my parents forever or maybe I'll bring that back to return to service doing its important job as my footrest. They do make good footrest because they're especially when they're full of hard drives. They're pretty heavy and it's a pretty good
size. It's like a big UPS. So the main role of UPS is for me is footrests. They also may be backup power but they're also really like UPSs and subwoofers the best footrest. Kareko writes with regard to S tier and Kareko writes some Japanese rhythm games don't think that one S is enough for Chinatham. By Sega for example Chinatham I think that's right. By Sega for example 97.5 and above is S and 100% and above is double S for 100.75% to 101% is triple S.
I'm not entirely clear how we stop at like 101. 102% but I'll go on faith on this one. Yeah, do we have to check the math on that? Right. Some people like to give 110% as you know. Yeah, yeah. It's S inflation is what it is. Yeah, that's right. Something like that. All right, David Lynch writes with regard to apples of the earth. David writes the modern day word apple is used. Got to reboot it through an and is in
there. What do you mean by the word is? Is yes, is. Anyway, was that a Bill Clinton joke? Just I just got there. That wasn't Bill Clinton joke. Marco gets a reference. Mark write it down everyone in your diaries. Well, you get three quarters credit because it's actually a Lewis black joke talking about the events with Bill Clinton. So you get three quarters. Well, you can do a Lewis black impression. I mean, you just did the Bill Clinton quote thing.
Even in my most angry days and there are some very angry days. I don't think I can be near his angry is a Lewis black who I love for the record and I saw him at Virginia Tech when I was a student there and you know, he did the standard grumpy old man thing and at that point he was quite a bit younger than he is now. But I went up to the stage after the show and he was shaking hands and he was the nicest journalist man in the whole wide world. He was so adorable. I love that guy.
Anyway, David Lynch writes with regard to apples of the earth. The modern day word apple used to be a generic term for any sort of fruit. This happened after the time period in which potatoes were brought to Europe. So it's reasonable to read palm deter as just fruit of the earth rather than specifically apple in the earth. Today I learned also French is weird, but that's okay. I mean, yeah, we knew that. With that part on you, the lean has some things to write with regard to
HP iPods. This was I guess the first one we saw. I was a Mac genius in the HP iPod era when Carly Fierina, who is what CEO of HP introduced the HP iPod. She said that it would come in quote HP blue quote. But in fact, it only ever came in white. It's a it can just happen to you Marco. It can just happen. The only way to tell if a fourth generation iPod was in HP and not and not Apple vended was HP was inscribed in the back. There were also HP iPod minis, which all
the ever came in silver. The internet tells me there were HP so also sold as co branded iPod shuffles. But I don't remember ever seeing one though. People would bring HP iPods to the genius bar, but we did not service them as HP had agreed to take on the responsibility for that. This seemed confused a lot of people. Another reason not to buy an HP iPod that you can't bring it to the Apple store. They're like, no, sorry, we take no responsibility for this
abomination. All right. And then David job writes with regard to was well, when when when did we bring this up the episode? It was last episode. Sorry. We're in summertime y'all and my my clock is all over the place. It was so long. Okay. See it was almost three days ago. You can always tell it's summer when Casey breaks out the y'all. That's that's when you know. No, it's hanging loose over here getting groovy if I'm in California, obviously. Anyway, so it's a big job. Right.
Regarding the iMac clone case, you just got a power forward. Regarding the iMac clone case, I think you're talking about the E machines E1. And in August of 1999, Apple sued E machines, alleging that the computer's designed and fringed upon the protected trade dress of the iMac. In March 2000, E machines reached a settlement with Apple under which it agreed to discontinue
the infringing model. Then moving right along, Yuri Malod's tub, right, with regard to E regulations and profits, as I was listening to your discussion on whether the EU could have provided very specific requirements for what they want Apple to do, I've been thinking about several examples where the union did exactly this. So even though it's mostly associated with the American legislation, it is definitely possible. And by the way, I brought up this example the previous
episode, but I didn't actually include all the details. I thought it was worth going into here rather than me just vaguely alluding to it because I couldn't find the link. Thank you for the clarification. I appreciate it. These in MasterCard are practically a duopoly globally. Both are simple utility providers yet enjoy enormous profit margins because of what they're able to charge.
The EU thought it was impractical in 2015 adopted regulation EU 2015 slash 751, which limited interchange fees for card-based payment to 0.2% of the transactions value for debit cards in 0.3% for credit transactions. Effectively, the EU told Visa and MasterCard, quote, look, you guys have won. You can enjoy a profitable business with an extreme moat, but we want to limit the negative externalities. And it worked. Stores started accepting card payments for one
euro purchases. And yes, European cards don't have cashback like the American ones, but cashback is a wealth transfer from poor to rich. So I can only endorse this approach that minimizes the prices themselves. In a way, the EU could have just said, app store fees should be limited to 5%. They know how to require things directly. The fact that they didn't but created a lot of risks
with DMA's interoperability requirements is a problem. Gary Havens writes, here in Indiana, and especially in my field, which is radio broadcasting, not only have non-compete's been used to keep employees from leaving for a better job at a competitor, they've also been enforced even when the employer fires a worker. So not only can the company fire you for any reason, but they
can keep you out of your field until the term expires. That is messed up. And the one thing at one point I meant to make last episode and didn't about non-compete's, it's one of the rare cases where I don't think anyone has ever argued about this, but like, if someone argues to you that non-compete should be allowed, it's in the name, non-compete. Like we want to allow competition, well, non-compete's don't stop. All right, okay, fine. So they do stop competition, but they do
it in a way that's okay. They're just in the loud right? They're just a poor choice of naming. It should have been named something that one of those like, if we're Republican naming people to name it like the death tax or something to try to make it sound out of feeling, but they're literally called non-compete. So if you want to preserve competition in the market, don't allow a thing called non-compete's. We are brought to you this week by one password extended access management.
Imagine your company's security like the quad of a college campus. There's nice brick path between the buildings. Those are like the company owned devices, IT approved apps, and managed employee identities. And then there are the paths that people actually use, those shortcuts through the grass. Those represent unmanned devices, shadow IT apps, and non-employed identities like contractors. Most security tools only work on those happy brick paths, but a lot of security
problems take place on those shortcuts. One password extended access management is the first security solution that brings all these unmanned devices, apps, and identities under your control. It ensures that every user credential is strong and protected, every device is known and healthy, and every app is visible. One password extended access management solves the problems that traditional
IAM and MDM can't touch. It's security for the way we work today, and it's available now to companies with Aqta, and coming later this year to Google Workspace and Microsoft Entra. Check it out at 1password.com slash XAM. That's 1password.com slash XAM. Thank you so much to 1Password extended access management for sponsoring our show.
This is a long piece of follow-up, and it was one of those things where I tried to cut it down, but I really think it's really good, and it's a really good discussion of something that I really have no personal experience with. This is Ryan Lee and Ryan Wrights as a Taiwanese who's lived there for two decades and a tech and media enthusiast. I was particularly entertained by the TSMC talk about the clashing work cultures between Taiwan and America. I basically agree with everything
you said. I want Taiwan to implement better labor laws, gender equality, and wealth equity, but I also want to offer some context on the Taiwanese work ethic, which I felt was missing in your conversation. Taiwan's work ethic is unique even among Asian standards, and it's related to the second half of your TSMC conversation. It's hard to talk about Taiwan without mentioning geopolitics because it affects every aspect of our lives. I'm coming from a pro-status quote
perspective, which is a predominant geopolitical perspective in Taiwan. It means we don't provoke war, but we believe in the right to defend ourselves if attacked. What does geopolitics have to do with work ethic? The answer is TSMC, but here's the context. To be Taiwanese is to live with an existential, existential threat for every aspect of your life. This existential threat comes from the mainland China's current practices and future threats to diminish us. China has been very successful
in diminishing us. They outpower us in population size economy and military. How does that oppress and affect the national mood? There were traditionally two popular perspectives. The pro-China view is that China only allowed us to exist due to its graciousness. The pro-US view is that China hasn't attacked us because the US will save us. Ironically, both perspectives are self-diminutive. But then TSMC changed everything. Now there's a third perspective. One that is neither
pro-China nor pro-US, but rather pro-Tiwanese. TSMC becomes so integral to this third perspective that it even has a name. Hu Guoshan-shan. It's roughly translated as war deterrence by economics. The idea behind this is solidified by the 2020 chip supply chain crisis. A war with Taiwan would cause a global economic crisis at such a non-paralleled scale that Taiwan has made itself indispensable to American interests. War with Taiwan would be too costly for any party. So how does TSMC success
translate to Taiwanese work ethic? TSMC successes view it as Taiwanese self-actualization. Hu Guoshan-shan is part of a general narrative. If you work hard, then you save your freedom and democracy. Mind you, this is just a narrative you'll find in the media and family gatherings. In reality, I know people who hate their jobs and media tech and other tech companies, but the narrative persists and is a pervasive part of work culture. My cousin who works at TSMC
is viewed in the family as a national hero. Where else can you replicate a work culture so motivated by an existential threat? There's no equitable stakes in America. So when TSMC announced their factory in Arizona, Taiwanese people knew it wasn't going to work out. That was what this thing right up to the last bit, where it was inevitable it wasn't going to work out. I think it's possible for it to work out. Everyone has to find a way to overcome their
preconceptions about the working world. Both the Americans and the Taiwanese because they're entering into a joint venture. The whole idea of using a military threat to your nation is what's required to motivate your workers to do good work. That's obviously not true. Plenty of companies in the United States that where there is no imminent military threat to
our land mass. Also, still somehow managed to do good work. By the same token, as I think Ryan points out, the idea that by working hard for TSMC, you're being patriotic and preserving your country is surely earnestly felt and also partly true for the reasons outlined in this thing. But it's also a tool that your bosses can use to make your work even harder. In America, we just pretend that the companies are families and that's how they get us to work
harder because we value families. But if you value national pride and unity, your employer will also use that to try to make you sacrifice your health and life to work. It doesn't matter where you go in the world. Bosses are always trying to get the workers to work harder and longer, often to the detriment of the company. I suggest that bosses should try something different. That's the thing that unifies us all. People will get away with what they can get away with.
We are recording because of crazy summer schedules on 7-Eleven. I didn't get my slurpee today. My free slurpee, that's too bad. But we are recording on 7-Eleven. It is a thing. So we're recording this on the 11th of July and coming up very soon is one of my favorite things, John Syracuse. It's an anniversary and it's overcasts 10th anniversary. So in light of that, Marco, you've been a little busy recently. A little bit. Oh boy. So what's going on, bud?
So we are going to release this episode on July 16th. The reason we're releasing it on July 16th is because it's pretty close anyway when we would have otherwise released it probably the same day, but coincidentally, also July 16th is indeed overcasts 10-Year anniversary. This is, first of all, the longest job I ever had besides ATP itself. This is the longest project I ever worked on that was not a podcast. As part of this 10-Year anniversary, I've discussed briefly here and there. I've
been working on the big overcast rewrite. Earlier this year, I was always thinking, man, wouldn't it be great if I could launch it on the 10-Year anniversary? That was my stretch goal. It seemed aggressive, but I made it. It's not 100% complete if I'm honest. But it is here enough. In the way, the software is never really complete. I should have given you some sympathy. We're just talking about Apple doing the annual releases. I'm like, you don't have to release every year. You can just release
when it's done or whatever, but you see the temptation. As I've always said, it's possible to hit any date you want as long as you are willing to constrain other parts of the thing. That's essentially what you force yourself to do. For whatever reason, obviously, this is the luxury of having a single person company. You can do whatever the hell you want. You wanted it 10-Year. What did you have to do
to hit that date? You got to sacrifice stuff. That's what you did. It can be done well or poorly, and you'll go on to tell us whether you think you did it well or poorly. That's always been my argument with the annual releases that Apple does. I don't think we need them, but you should be
able to make them and not have those annual releases be disastrous. To Apple's credit, I think they have done better in recent years with that, mostly by doing what they're doing, for example, with Apple Todd, just this year and what they do with features every year, which is like, oh, we'll announce them, but they're not going to ship with the point zero because they're not done yet. We'll ship them all we're done, but in the meantime, we'll ship what we have. You're
going to ship what you have. Thanks. That's pretty much right. Here's what this is. This is an almost complete rewrite of the Overcast iOS app. Let me tell you first what it's not. This is not a rewrite of the Watch app. This is not a rewrite of the audio engine, and this is not honestly a major
change in the general features available in the app. For the most part, I'll get to a few exceptions, but for the most part, most of the features that I had before and the general way the app works, in terms of concept in the app, how playlists and podcasts work and everything, most of that is the same. Chances are, if you are an overcast user, you will probably only notice a few things. Number one, notice everything looks different a little bit because it's just like a
modern take on the overcast design. The playback screen has the most changes, mainly because I have gotten rid of those horizontal swipe cards for the info and chapters, and now the info is now a little kind of built-in mode on the main screen that you can tap the artwork or the little
high button to get to, and the chapters are now a full slide up sheet because that way I can make room for things like long chapter titles, so they actually fit instead of in the little tiny card, and in the future I want to add things like chapter pre-selection, which is a commonly requested future from Castro. So basically, the now playing screen was redesigned pretty substantially.
The rest of the app really is going to look pretty familiar to you. It's really just like an evolution of the original designs, not like a total revolutionary or massively changed thing. Just getting back to the now playing screen for a second, because I think the now playing screen is going to be where people will feel the most difference, and where I will get probably the most
feedback saying, why'd you change anything? Because of course, you need to change anything. People react poorly, and the main goal, my major design goal with this redesign and rewrite, and I'll get to the text stuff in a little bit in a second. But my major design goal here was, first of all, just make it modern. But also consider like I wanted to push controls as much as possible down the screen. So I want the most frequently accessed things to be accessible when you're holding the
phone in one hand, and you just want to hit something with your thumb. So that means low down on the screen, like you know, the halfway point or below, maybe, or at least like, you know, the third of the way down or below. So a lot of the design is taking common actions and bringing them down lower on the screen. Also, I wanted to simplify the playback screen. So the now outgoing app,
the playback screen has those five icons along the bottom. You know, want the airplay in the middle, and then you have like the star and the, you know, control, like the audio controls and the sleep time, or like, you know, you have all this stuff across the bottom and the info. And the main reason why those were there was I tried to have these swiping cards in the middle. And most people just never found the cards. And so I had to add icons to the bottom to show people, oh, here's how you
get to the info and the controls. This had a number of problems. Number one, it's kind of redundant, kind of cluttering. But number two, I had done all this work to make those swiping cards in the middle, but the design required that they be square and that they have fairly wide margins. They would fit within that, that, you know, round, rect that was the center thing. And that doesn't really work
that well for any kind of longer content. So like a chapter list, for instance, which is, you know, that's where the chapter list was before, chapter lists, you'd only be able to see a couple chapters at a time. And I couldn't have the chapter titles wrapped to two lines, which they often are long enough they should probably do. I couldn't fit things like check boxes in there. If I wanted to have pre-selection. And so I was kind of bound in. I had myself in a round,
rect corner, I guess I designed myself into a round, rect corner. There we go. And then the info, like the show notes info pane also, you were stuck looking at in this little tiny square window. That's also not a great experience. If you have something with long show notes or a lot of links, it was just hard to browse that. And again, it was hard for me to evolve that design, keeping those horizontal swipe cards in a way that would easily accommodate like expanding
content in the middle or different modes like that. So with the new rewrite and the redesign, I have made it so that now the info pane actually does rearrange that screen. When you tap the info, it actually drops down the playback controls by a decent amount, basically as long as they can, and still maintain their spacing. And so it kind of expands the center area to be a tall version
of itself to fit as much of the show notes and links in there as possible. By the way, that transition was really hard because it keeps the header and it's everything in there is all SwiftUI, except the WebView content because WebViews aren't yet available in SwiftUI. So integrating that in a way that preserved everything around it was quite the experience. But anyway, the design of an outplane
screen is now evolved such that the center cards are no longer where everything has to go. And as a result, we have room to do things like larger chapter lists, bigger show notes areas, and then the audio controls also, you know, the audio controls in the outgoing one, they were also stuck in that square and they did fit. But it was hard to add anything to it because if I added much to it, it wouldn't fit anymore. And I've had all these requests for things like a mono down mix or other
kind of audio features that would just be difficult to add to that UI. So now audio controls, they're just a sheet that comes up from the bottom like chapters, but it's not full screens, it doesn't need to be. But just a sheet coming up from the bottom like so much in iOS because, you know, keeping my also, that design, that design is pretty old now. Like the outgoing design has been there for something like five years, I think. It's a pretty old design and a lot about
the way we interact with iOS has changed. A lot of iOS stuff has now also moved down to the bottom half of the screen. A lot of iOS stuff is now using little slide up sheets and things like that. And so the app I think really needed to reflect the way people expect apps to feel and work and look today. So even though it is a change in muscle memory and I fully appreciate this is going to prompt some disruption and some negative feedback. Give it a minute. Try
to get used to it for like a few days before you yell at me too much please. And I'm happy to hear feedback, but just give it a few days. Like give it a few days first and see how you like it. I am honestly very nervous about this. This is the biggest change I've done in a pretty long time. And I know it's going to prompt a lot of negative feedback. And if things are actually worse, I'm willing to change my mind, but give it a sec because I've personally been using this for
myself or something like six months. And I love it this way. I think it feels way better. It's way faster. It's way more responsive. A lot more things can just be dismissed now with a downward swipe. A lot more things come up as an upward swipe. Like it's just it's a lot simpler and easier now. And it is really, really fast. So that brings me to the tech park. But before I get there, do you guys have any nitpicks about my design? Needless to air on the show? So the like
they're now playing screen with the you know being a sheet that you swipe to go down. I remember you mentioned the making it being inspired by the like the now playing thing on the Apple's music app on iOS. Right? Correct. I think I'm watching music apps check. When on the music app, it for its now playing thing that comes up from the bottom or whatever in a swipe down. It goes all the way to the top. It leaves the little like horizontal line grab handle as a hint that
hey, you can get rid of this by swiping. But when you did it in overcast, you left a little bit a little bit of space. So you can kind of see, hey, behind here is the UI that you were seeing before. Did you think about going all the way to the top? Did you think that would be too confusing? You just think it's something only Apple can get away with? Oh, John. Can you tell John hasn't made a Swift UI iOS app? Yeah. This is a thing with with Swift UI. I genuinely do like Swift UI.
And for me, I don't think call sheet would look near as good if it wasn't for Swift UI because some of the things that are very easy in Swift UI are very, very difficult in UI kit. And maybe that's my own failing. I don't know. But this is a really good case study in Swift UI because to get a sheet that comes up from the bottom of the screen, especially a few years ago, maybe it's different now in UI kit, but a few years ago, that was a real pain in the hindquarters and UI kit. It was
not fraught with errors. You're re-implementing half the damn world in order to do it. And it's just a pain. It's just not fun work because you just want to sheet the comes up from the bottom. This is not fun to do something that you know Apple's doing all over the place. You know they could have an API for it, but at the least at the time I was looking, they didn't. With Swift UI, you can just do.sheet.
And then you provide something, I forget it's been a minute since I've done any of these, but you know, you provide whatever you need to provide. And then it just it just happens magically. It's cake. It's easy. It's just chef's kits. It's great. Until you want to customize it and then everything falls down. This is generally the pattern with lots of Swift UI. It isn't that it's not customizable. It's that if it doesn't provide a way to customize it, you're totally out of luck.
Whereas sometimes with UI kit, you could like kind of hack your way in and do some craziness, but for the most part with Swift UI, like if there's not a hook for it, you are just out of luck. Unless you want to like then wrap the UI kit version, which is a whole level of complexity. So my goal here with Swift UI and kind of like the and things like fine UI details like that or behavioral details. My goal here or my thinking here is for years, I have tried to maintain a
code base of UI kit code that has a lot of those like complex polished interactions. So an example is in the outgoing app, when you bring up the mini player to bring up the now playing screen or you swipe the now playing screen back down to dismiss it, it transitions some of the controls from the big screen down into the mini player. It like animates them down into their small size.
To do that is such a massive pain in the butt and it is so complex. And just having that alone, what that basically means is the small version of the player is the now playing screen. It is just a small size of it. And so what that does to the design and implementation of the now playing screen is it makes it really complicated and it makes it really hard to ever change or add to
or tweak. And that's part of the problem I had with the old code base was in order to mess with the now playing screen, I would have to deal with all of this complexity around it like this massive wall of UI kit code to try to make that transition that make it interactive and things like that. Like it was a huge amount of complexity. My goal with SwiftUI with this rewrite was I want to try
to do a good job. The best job I can with pure SwiftUI and not drop down to UI kit for anything that I don't need it for like the web view is the only thing I'm using it for because again, those aren't available in SwiftUI. Other than that, there's no UI kit in this app. I wanted the
code to be simpler. The whole benefit of SwiftUI, I think, is that as long as you are willing to take the 90% solution and if you can give up that last 10% of customization that you used to have, it's way better, it's way simpler, it's way more reliable, there are way fewer bugs possible and it is just a much nicer place to be development wise. And what that enables me to do is I can have far less code and far less complexity and far fewer bugs to do simple things in my app like show
and hide and out playing screen, which frees me up to do other stuff that's better. You know, what my pattern that I have found while developing this app in SwiftUI is I'm able to iterate really quickly in like a single afternoon. I can kind of go through different versions of a screen and play with different designs and that are right out of the different from each other, but with SwiftUI, you can do that very quickly. You can really prototype, like, I've never been one of those
like design tool users to like make mockups like I just built it. The problem is if building it is complicated and time consuming, then the very first thing you build, you're probably going to want to
stick with. The problem I've had over time using UI kit and objective C is that even though they were great for the times I made a lot of this stuff like literally almost 10 years ago for a lot of it or over 10 years ago for some of it, whatever I came up with first, I would stick with because it was so complicated, it would be ludicrous to imagine like should I try five different designs for the
screen because that would take like five weeks or something. Whereas with SwiftUI, it's so fast to iterate and to experiment with the design and to move things around and try different things and reuse different components in different ways. It's so fascinating once you get like your your foundational knowledge developed for it and all your kind of supporting systems in the app, I was able to iterate so quickly and move stuff around and try different designs and the result was
I tried more things and I found better solutions. So the design I think has greatly benefited in part because I have been able to try more experiments with the design and a lot of times the third or fourth version of what I would make would be the best version as opposed to the first or
second. So what I'm trying to do with this app and what I've largely succeeded in doing is keep the UI code fairly simple like hide the complexity if need be in like utility classes or you know like modifiers like I'm going to apply to anything like try to not have too much custom stuff on
every single screen. That allows me to keep the code light and to keep it nimble and be able to move it around be able to try different things and ultimately that's also needed now because 10 years ago when this when this launched the kind of like surface area the problem scope of make a podcast app for the iPhone was much smaller than it is now. Now you look at like what what are apps expected to have now that they weren't expected to have in 2014. Well you have obviously an Apple watch app. By
the way my Apple watch app is totally unchanged yet. I'm going to bring the rewrite to it. I have not had time to do that yet. So the watch app that is going out with this update is the exact same it works the exact same way nothing has changed. I'll get to that. Anyway with putting this out there like I really wanted to make sure that I could address the breadth of what I'm supposed to be doing now as a podcast app author. So again you think about like you need a watch app of course you need
widgets. You need integration with Siri and shortcuts and shortly Apple intelligence which is kind of built into that system but just more of that you need your iOS app to also run an iPad and have an iPad layout. You need the iPad app that you're that is built from your iOS codebase to also
run on macOS and maybe even vision OS and so you have this huge broad thing you need. You know there's always more kinds of widgets you have to like now build in like the control center widget you need you're going to need some kind of like live activity maybe on the Apple watch and on maybe on the iPhone like there's so much surface area that apps are expected to cover now if they're you know especially if they're like used by power users like people who tend to use third party
podcast apps on the iPhone. So it's hard for one developer to keep up with all of that. So for me part of part of this rewrite was try to reduce the amount of time and complexity that I have to spend fiddling with really complicated UI kit code to achieve some effect. If I can just get 90% of the way there of what I of like my ideal design with 5% of the code and just do it in Pierce with UI that's what I picked every single time. The result is so much better.
So you're saying the sheet the sheet couldn't go to the top. Oh yeah. I said to you on a little bit of a quest that's my fear. Sorry for the side quest. All right so that's the way. So the answer is you can have a Swift UI sheet that goes all the way to the top and I tried that first because I would have preferred that. The problem is if you have interactive dismissal when you pull that sheet down the size of it jumps because when the sheet gets near the
top it snaps to the top to skip the entire top safe area. The top status bar. It like snaps up to the top when it gets near the top and then you pull down it snaps back down to be below the safe area and there are ways around this but they are super hacky and super awful and I've tried all of them and they all had negative effects and when it's full screen it stops rendering the content below it. So in an interactive dismissal scenario the sheet below it wouldn't show
until you were done with the gesture. So if you pulled it down and like and like and didn't go all the way behind it would just be blackness. So it's not usable really for that state unless you really modify it heavily and generally you'd have to drop down to UI kit and and kind of maybe even restructure the entire presentation stack as UI kit and that's just I was not willing to do that many hacks that so I tried it this way where it goes most of the way the top like a full
screen sheet or an almost full screen sheet and I was like you know what this is fine. It doesn't look as good but actually this this was actually overcast design early on like there there was I think for about a year or in maybe like year three or four there was an overcast design that looked
very similar to that on the top where it did this kind of like you know most of the way to the top and then like you know backed off the sheet behind it kind of look but anyway so that's why it is this way I would have preferred if I could go full screen just like Apple just like the Apple music app but without a huge amount of hacks it can't and so I decided I will accept this trade off for the massive simplicity of code and then everything else being able to be Swift UI and all
the niceness that brings. Yeah one of the reasons I asked well is that in the Apple music one I know it has the little grab handle up there but I have found both I myself when I first started using the Apple music app and other people who have seen use it can have difficulty figuring out
how to get to the rest of the app right I mean if you see the little handle you might know you can grab it and swipe or if you know that you got there by swiping up a little Apple music you can just tap on the thing to go up the overcast design that leaves a bit of the rest of the UI
peeking out makes it way more obvious that that's where the rest of the stuff is and that you should pull down on the thing that's blocking it because you can see it poking up from above you know what I mean I thought it was a little bit weird that the gap was there I'm like why you given up that
screen space and it's interesting to hear that you did actually want it to go to the top but now that I've used it for a while I do wonder if the thing that leaves stuff peeking out might actually be more discoverable for more people again it's it once you know it it's not a big deal I suppose but
I still occasionally looking at the Apple music app and have to think for a second to remember how to get back to the rest of it especially since depending on the color scheme the little bar can be not particularly easy to see or you know you're using it outdoors and there's sun glaring out or
whatever so keep that in mind it'll be interesting to hear from people with feedback about that once more than just your bed has to start using it whether people are upset that you're not using those extra whatever you know 45 points at the top of the thing or the people like it be it's more
discoverable yeah and by the it's not even that it's probably something like 20 points it's a very small amount of space and like on today's phones I've designed the now playing screen to have a pretty decent amount of kind of spare vertical space I don't think having that extra
few pixels would be that meaningful honestly but and I think you're right I think it is more discoverable and that's part of you know what I've learned over time by you know getting user feedback and stuff like that what I've learned is that if something is not visually obvious there's
a lot of people who will just never find it or who it will confuse so by by sticking with just standard things doing their standard behavior most of the time and having things be visible on screen most of the time like seeing the stuff behind the now playing screen I found that just makes
things a lot better usability wise I got a I got way fewer emails from people saying hey how do I dismiss this thing or whatever like it's it's just causes way fewer problems you know the only possible downside and this is not you this is just Apple the way they do with their standard UI like
when you bring up the chapter list for example that's a thing that's long and vertical and scrolling and it is also a full you know almost full screen sheet where you've got a little thing at the top say you're scrolling through a show that has a huge number of chapters and you want to quickly
go to the top you know you tap the whole tap to the top tap status bar to scroll to the top that works of course it's a standard type of thing but if you look at the screen and your brain takes over for a second you say oh I better tap on the top of the chapter sheet thing it will dismiss it
because if you tap the little grab handle it dismisses the thing rather than scrolling the top and I didn't even occur to me until I just tested that two seconds ago that that's what happens because I'm just so used to tapping the top of the screen to scroll even though that's not the
top of the view but that's I mean it's kind of on Apple because that's the how they decided to make this work and I'm assuming they're also the ones deciding that if you tap the little los and should dismiss it like that's a standard behavior right yeah I sure well I don't
to tapping the losses dismisses it yeah are you sure yeah here I just I'm trying to play with it now you're right yeah I'm saying Marco didn't you didn't implement that as custom so I'm pretty sure it's like you just do it in any app like if you go to music which uh and to be clear music uses
I'm music because I'm assuming is you I get and it's entirely custom it doesn't have any delimitations you just described presumably because it was written well before Swift UI was released but same thing in music yeah you can just tap that los and just dismisses it I hit today I learned
I'm not playing with my own app learning all this about so thank you but I'm saying it's not that's the standard control like this is the way I was that so if you're again if you're in a long chapter list and you've scrolled to the bottom and you want to get to the top do not tap on the
las and just tap on the top of your screen and it will scroll the view to the top I think another thing that I assume you didn't have to implement yourself because it's part of a standard scroll view correct and actually and this is like one of the great things about using Swift UI is that
it really does a very good job of integrating scroll views and swipes and things in ways that will feel natural and will match risk the system like for example if you switch over to the info mode the info mode has scrollable content in the center of the now playing screen how do you then
dismiss the now playing screen by swipe you have to like you know drag down maybe when you're at the top does that work yes it works flawlessly I didn't have to do anything like that with this in the UI kit version where I've had this with UI kit before you have to like have the gesture
recognizes prioritize each other and I'll let and look wait for the failure of this one or like allow simultaneous recognition with this one and it's a huge pain and it's really hard to get right with this I had to do nothing it just is right because Swift UI takes care of it all
having all of those little details in the app really make a big difference it just feels better and it's there's less potential for bugs and weirdness it's just so much better we are sponsored this week by tail scale tail scale is the easiest way to connect devices and
services to each other wherever they are so okay oh what does that mean here's the thing imagine you have I don't know a synology at home and maybe if you're a little bit crazy you have a synology at your parents house and maybe you have an instance at Lynn Ode and maybe you have an
instance of digital ocean and you want all these things to be able to talk to each other and your phone and your iPad and your vision pro or whatever the case may be tail scale makes it so that all of these devices are on your own private mesh network and they can all talk to each other
well wait casey what if they're not geographically close together doesn't matter well wait casey what happens if they're on completely different network topologies doesn't matter tail scale is secure it's fast and it's private it's zero trust network access that every organization can use
from an organization of just me to a big organization tail scale is so freaking good I really mean it so you can build these really simple and flat networks across really complicated infrastructure I my computing life has truly and genuinely gotten so much better after I really embrace tail scale
it is so good and if you're thinking oh that's just another VPN add no no no no no no no it is sort of kind of a VPN but that's not really the point I actually wrote a blog post about this because I love tail scale that much and I don't have time to tell you exactly why it is or isn't
a VPN but I can tell you it is freaking magic and the best part of all is their personal plan is free and will always be free so you can try it out for free today you get up to a hundred devices and three users for what's that yes free at tailscale.com T-A-I-L-S-C-A-L-E.com
no credit card required they will never ask for one it is incredible I cannot stress enough you owe it to yourself you owe it to me to give this a try or at least take a look tail scale scale.com thank you so much for sponsoring all right let's talk tech on this show yeah imagine that
everything in this app with everything that I rewrote in the app so you know not the audio engine but everything else in this app is modern Swift with the Swift concurrency async model and actually converting over to Swift 6 should I haven't started it fully yet but it I've done
a little bit here and there it should not actually be too much work this entire app is built with blackbird my database layer that I launched what a year and a half ago or so the way blackbird works is it it accesses SQLite directly there's no kind of middle library there direct SQLite calls
or SQLite excuse me that's the actual way to pronounce the heck with that it's SQLite okay so SQLite slash SQLite though that is the core of database here blackbird does all database access with Swift async calls on its own actor what this means is that all calls from the UI
into the database must be async so this means that the entire UI anything that needs database data has to have a loading state or an unpopulated state and then be able to pop in the data when it arrives through the async mechanism so this has a number of massive effects no number one
it's slightly a pain in the butt when you're writing that code because you do have to consider like what if this model isn't loaded yet and of course I have lots of little utilities to make that better and easier it also means that the responsiveness to the user's touch or to changes
of state in the view is very very fast because the main thread is never being blocked by the database ever ever ever now this is a huge change from the outgoing version overcast which use my old old old objective C model layer called FC model with FC model I designed that system to put
all database access on the main thread it's the total opposite but all the main thread all synchronous with the idea back then that it made a whole lot of bugs less likely to be written because all like the different change notifications and everything could never be posted on a thread that
wasn't the main thread because in apples platforms if you ever update the UI from a different thread that's not the main thread weird stuff happens it's considered a bug you can have corrupt UI and weird issues and things like that so if you're receiving notifications of changes or whatever from a background thread it's it was very very easy in the past to have that somehow trigger something to update the UI if you're some kind of notification mechanism but it would still be on a background
thread so so anyway so FC model the old system was written to put all the database access on the main thread the new one blackbird was written to have the main thread not even able to access the database directly so because you know now we have a much better concurrency modeling we have much
safer ways to achieve this kind of thing so it ended up being substantially a better design for the modern day so all database access is async and so again everything is fast like if you scroll the the big list of podcasts or episodes or whatever it is super fast to scroll because the cells
don't load their content until they're about to be shown on screen and then they load it async they load it in the background so and then it pops in so if you scroll fast enough you can see empty cells but you have to scroll pretty fast and so everything is just so much faster the main thread is hardly ever blockable by almost anything except weird audio delays because that's kind of out of my control what this also means is that because I am using blackbird and the async stuff it was very
easy to design all the UI components to basically watch for changes in the database that are relevant to them because they already had to have like kind of like a loading process so you could so I have all these different in like little utilities and classes that are like all right watch this
episode ID so you can show the title of that episode ID and then if a sync happens in the background and that episode title has been updated by the publisher and it gets a new title that will update everywhere all over the app instantly because all the components were written to watch for database
changes kind of live not just the very first time they load this also has affected the way that I architect like how controls work so when when a control changes a setting that is stored in the database or changes state in the database the control does not notify anybody about this change the control just writes a new value to the database and every single other relevant thing in the app gets that change because it was all written all all those things were written to watch that primary
key value of that model in the database for changes possibly even just for certain columns to change everything updates more reliably and you have to do so much less statement you literally just like have a control just write a new value to the database and it will update itself even having the
control update its own value that is displaying you can like everything is written to just have like the user taps the button it launches an async task it writes the data to the database that's it the value will change and the control will see this value that I am controlling has changed and it
will pick up its own new value from the database it's like model view controller remember that before I know people will probably listen to this and say wait a second he's just describing MVC that was been around for decades I mean kind of yeah but I think the part you're not saying here is that
the controller layer is you also don't have to write thanks to the way SwiftUI works and that makes a big difference I mean the the thing you're describing is always been the goal state of like oh yeah of course I just write this value and then anything that cares about it reflects it because
that's MVC but when you have to write all that plumbing yourself it's a source of bugs and it's annoying to do and sometimes you just don't have everything in the UI for example watching for changes and this one thing or whatever because it's not all active and doing its thing at the same
time but SwiftUI makes that not a thing that you have to worry about as much anymore because it's declarative and because you just basically sort of plum everything together and then you are no longer involved in you know that's why I can doing it the quote-unquote right way of like oh yeah
you know if you've ever written any kind of app you are probably sorely tempted when you change some setting to include some code that makes a change happen elsewhere and you know you shouldn't even in the old style you know like an object receipt you shouldn't do that you should just update
the setting and everything else the cares about it should reflect it but because it doesn't happen sort of automatically as part of the the way you're doing things you're sometimes tempted I just had this one line here and it would fix it and then you know fast forward 10 years and you have an
app at the tool stuff like that I just love to hear you say the word publisher because that means you're using combined baby and it's combined in a single wait for there they're quite a bit different but they're both technologies and frameworks that once you put it somewhere especially somewhere
foundational well guess what your whole app is using a single wait or your whole app is using combined and and that can be frustrating especially for someone who's not used to it or you know it was new to it or whatever the case may be but it really can when done properly and it certainly
sounds like you've done a really a really good job and from using an app it feels like you've done a really good job when done properly this stuff it really does help and it really does not only help the user experience as you were saying because everything is always the the the most true it's
always reflecting the most true data you can possibly have and beyond that it's better for you because everything is just kind of wired up and magic happens you know like you were saying you write something to the database and then magic happens and everything is updated and so
you're like you're thinking of Swift data or core you uh where the gold Swift data or core data rather where like if you just use the observer thing everything magically happens I think Margo's not going that far in you can tell me if he's added a an observability layer to a blackbird but
the publishers are like okay say you're not doing that it's like I don't worry about it yet it this came from a database but you don't need to know that it's magic it's just an object and you just observe it from 50 Y and the changes are reflected and don't worry about how it sinks and
that is not really the market way to do things he's writing his own wrapper for SQLite uh and uh and threading things that way and in that case I would imagine using something more like traditional publishing of changes from the database layer elsewhere well I'm using both so I am
so so keep in mind as I was writing this the rewrite of of overcast uh the observation Swift Ui API came out like six months into it so I had already written a lot of it I'd already written most of blackbird and a large amount of the data model for the rewrite I would I'd already written before
observation came out so I am using Swift Ui observation heavily but it is not everywhere and I actually am still using a large number of combined publishers but a lot of it is for you know like low level components like network reachability um when there's changes to the audio output device
you know I have like I have publishers for that that that come out of my utility classes things that are not easily modeled by an object well I mean they can mean you know you have like network reachability manager output device manager like that kind of stuff so it is easily wrapped in an
object but it's more like I didn't like I wrote all those components before observation existed or was released um so I might move some of that to observation later um but there's not really a massive need right now because I actually I like combine for certain contexts anyway like for
you know certain certain things like when you're combining different publishers you're you know doing like the debounce and see you know stuff like that like there's all sorts of little nice cities to it that I like and so I do use combine a lot of places but to answer your questions
on you know so when I'm looking at database modeling I do I do have observer wrappers for like you know if you want to have like one observable instance of a model like you know give me episode ID123 in an observable way so that whenever that changes this model gets updated I have that I don't
use it that much I'll get to I get to buy in a second but the way most changes are are communicated through at the app is something tells the database give me the publisher for this model if these columns in it change and then it sends a change notification and then and then it will go update
itself and query those columns or whatever what I'm largely doing here like so when I when I made the the old version of overcast and when I made FC model you know keep my again this was 2014 at that time I was much closer to being a web developer than I am now and and I was I was
treating the database in the app a lot like I would treat the database in like a Ruby on Rails app or like a php web app of like you had like these rms that would like have these abstracted models and you would just say give me give me post number one two three and it would give you the it would
select all columns and give you the entire post everything fully saturated and decoded into all the variables of the model so that's how I wrote the old app the new app I've learned to treat SQLite not like a database server in a web app but like basically a file on disk because that's
what it is you can get away first of all keep in mind like you're not communicating over a network to another server and you don't have to worry about the other server getting overloaded and being very gentle on it so first of all SQLite can handle way more queries than you think it can it's so
fast and it is even faster if you only ask it what you need you know you don't have to say like all right just give me the full post because that way I don't have to make a second query to you in in another few milliseconds you can just get the ID or whatever or get the column you need it's so
fast I'm also doing very minimal usage of caching of database data very very minimal caching in this app for the most part everything that has database data just asks for it every time and it is really really fast because I am not passing around or usually even loading fully saturated
models I'm not saying every time I need to look up the title of this episode load episode one two three entirely into memory all of its different fields it's you know it's HTML body it's title it's duration like load all that into memory and then give me the the title no I'm just saying
select just the title for this ID that kind of pattern is used all over the app I'm passing around IDs everywhere instead of passing around loaded models a lot of components never even load the models because they don't need they don't need that information they only need to take the ID and pass it
to some other sub component all of that I'm you know basically treating SQLite more like just a file and I'm reading certain bytes from here and there rather than treating like a database server in a web app that has made a massive difference I miss out on all the fun of cash invalidation
that's the best part of every app why is this thing not up to date oh cash it's a cash version why is it cash why is it not being validated by this I'm invalidating it right here why is it working you're missing all that fun yes super fun I'm telling that all right and then finally
on the on the tech overview one issue I always had with the old app what would often be controlled like you could call like view controller bloat you'd have some controller or manager class like the audio manager good example this is this is the thing in the app that could that like has the
the methods for like play pause load new episode stop seek you know seek forward seek back and the audio manager also handles things that are kind of details of those things so for instance the sleep timer you know stop after a certain duration or seek acceleration where like you know if you hit
seek a bunch times in a row make those gaps longer and longer or handling output device changes like oh you changed to the built-in speaker apply the different voice boost profile for the built-in speaker and what would happen over time was a small number of these classes managers would just have
a huge amount of code massive amounts of different like sub functions lots of a member variables for you know storing local state for some of these subsystems like you know has it when was the last time the seek happened it was at a long time ago then don't accelerate it if it's a short time
go accelerate and then set it to lay like all these different things and so what I've done with the new app is make a lot of sub objects on these so like the audio manager is not does not have the logic in it for the sleep timer the audio manager contains a sleep timer object and the sleep
timer object is a much smaller file with a few functions and a few variables that will observe the database and will observe the audio manager for relevant settings and it will do its own functionality contained within it same thing for seek acceleration the skip intro and outro watcher
the chapter manager like all of those things they're all separate objects that the audio manager just contains instances of and those objects will all like observe things as they need to but the result is what was this multiple thousand line class of audio manager now is like seven different
files that are each you know 60 lines or something much much much less that also has been a just a huge win for me with just managing all this because ultimately what coding is like the biggest challenge of programming is not cash invalidation or naming things are off by one errors the biggest
challenge in programming is complexity management just trying to manage the massive amount of complexity that comes from doing almost anything for very long for me that's what this entire tech decision making tree and this this entire way of developing this it's all about managing
complexity in better ways than I was doing it before I really I think come a very long way in my own you know programming discipline in 10 years the tools and languages have come a long way in 10 years and so now this is a new foundation and what this says what this allows me to do is finally
keep the app updated on a more regular basis than what I was doing before you know people who use overcast have probably noticed for the last few years the rate of new feature development has slowed to a crawl it's been almost nothing even before I started the rewrite 18 months ago
there really have not been many new features since really like since like the covid era it's been almost no major new features and that's that's now like you know four years and the reason why is because I was just crushed by the burden of trying to keep this giant code base going trying to
keep it maintained while trying to keep up with everything that iOS was releasing every year and so it's been very difficult for me to first of all feel good about what I'm doing because I feel like I was falling behind for so long but also every time something new would come around
I would feel like I can't even address that because I'm too busy just trying to keep my head above water with this ancient massive code base what I can do now is iterate quickly and now when when new stuff comes around like Apple intelligence I can add that very easily and very quickly
because I know because I've been doing it because like part of part of doing this whole app really like when you replace the entire language and data layer of your app you have to do a lot of component rewrites all of the different little feature components of this app things like
car play totally rewritten the intent system is not actually done yet but that's being totally rewritten the widget handling the handling of communication to the watch all of those things totally rewritten the handling of the now playing info where you can you where it controls like what
controls center sees and takes the remote control commands all rewritten so I've had a chance to rewrite every single subsystem I can tell you it's way faster to write it this time than it was the first time it's way easier to make changes they're way more reliable they work way better
they're way lighter they have way less memory usage and way longer battery life as a result of you know being more efficient all of this is because I went from a 10 year old code base that was entirely in a different language using different paradigms that because all the new things we do today
didn't exist 10 years ago to now a much more modern code base that is way more productive for me and along with 10 years more wisdom of learning how to do things a little bit better and in a more maintainable way so what you should see from me over the following you know six months to a year
you know right now this new app comes out and it's not that different from what it's replacing in terms of functionality it it's totally different under the hood but like what you see like if you made a feature checklist it's going to look about the same but I can actually move now so now all
there's all this new stuff coming around things like transcription based features and summarization you know AI classification of sound stuff like that like I can I can turn actually looking at these features now and yeah I'm not going to do them all for lots of reasons but I can actually try
there's been features that people have wanted for years that people have asked for that I've wanted to do for years that are just basic stuff just with regular you know regular podcasts as we know them just like different handling options things like you know smarter management of downloads
and smart smarter storage auto deletion like filtering episodes by keyword out of feeds you know all sorts of things people have requested that I haven't been able to do because the old code base was so burdensome and it was so difficult to maintain it and now I can start doing those
because I've seen from writing all the subsystems of this app again I've seen like now that I have this new foundation with Swift and Async and Blackbird and Swift UI I can now move I'm faster I'm more effective I'm more productive and the app no longer feels dead because the old app felt like
it was in maintenance mode because honestly it almost was because I just couldn't get anything more done the new app really feels like a new foundation for progress I know that sounds like a weird political speech but it really does feel like I've like dropped my shackles on the ground
that I can run yeah maybe like that forest gum scene but that's different sorry I'm a cop culture reference from movie from the 90s fire yeah I'll take it I'll take it you want to talk about streaming versus downloading oh yeah I've been streaming sorry I forgot about that
yeah one one major feature removal there were two feature removals one of which most people won't care about one of which so the first one is I had an old option called tap single tap to play or tap to play where before and this is like overcast 1.0 you would tap on episodes in a list
and they would just start playing like YouTube videos do like you tap it tap it you start to play because they're I didn't have the little expanding cell with the row of buttons under it like you know tweet bot style which is where I stole it from I didn't have that yet in version 1.0 anyway
when I added that expanding cell thing a bunch of people were like I don't want to work this way so I added an option called one tap play that allowed them to keep having that behavior of like you tap to sell it doesn't expand the buttons it just starts playing that option is now gone I don't know if I'll bring it back in the future it would just require me to have like two different versions of the way those cells work and I just it doesn't seem worth it to me honestly it was not very well
very widely used if you are one of those people I'm sorry try the new way give it a shot you know let me know streaming so overcast never actually had true streaming which would be like the file like the the episodes are never actually persisted to disk I caught it streaming but what it always meant
was progressive downloading where it you know would load the it would you could you could tap play on an episode it would start buffering it from the website and it would as soon as it had enough data to start playback it would start playback and it would just download it until the download
completed until the end of the file but you know hopefully by the time you got there it wouldn't be like buffering or anything the complexity to do this is massive because of the way my audio engine works I had to write my own streamer I had to write my own like HTTP client class to like download
chunks use the HTTP range requests all the different catching headers all I had to write all of that because if you have an audio engine that operates on the raw audio sample data with iOS you can't use a V player which does that for you this is why other podcast apps tend not to offer streaming
and silence skipping simultaneously I decided to not offer streaming anymore because think about the additional states things can be in and the additional ways they can fail or go unexpected so one is if you start a streaming download what happens if that download fails during playback
okay well you can maybe try to resume the download what if it can't resume what if it fails because you went into a tunnel and you're never coming out for whatever reason you're maybe you're on a submarine you know it's gonna be a while well do you do I just let it play at that point and then like
buffer like spin buffer and just fail that's a terrible experience and do I like alert the user somehow what if their phone is in their pocket they're not gonna see the alert do I like interrupt the pot like there were all these different problems with that approach and then what really made
it difficult was two major changes in the the environment I'm operating in one is the rise of DNS and network based or VPN based ad blocking these products frequently interfere with podcast tracking host because a lot of podcasts will serve their episodes through ad tracking redirects
and unlike a web page ad blocker you can't just block those trackers and have everything else load around them it's literally a redirect to to get to the download file so if you don't follow that redirect you don't know where the download file is so you can't block it if you do
block access to that ad tracking host the downloads will just fail like because they're literally they're literally being blocked on the way to the file so they'll just fail well if you again if if you're phones in your pocket and you tap that that podcast to start and you happen to be behind
say an euro router that just blocked them a gel and dot AI domain name not that I'm mad not this is a cause lots of support problems over the last few weeks if you do that then what will happen is that download will just spin forever like you'll have the buffering spinner forever
and you have no feedback as to why it just seems like the app is broken so that's caused a lot of problems and if the if I convert those to downloads I can try the download it can fail immediately and I can show the user in the in like the download list this failed for this reason
this domain is blocked like and I have all that code in there the second thing that changed in the environment is dynamic ad insertion d a i oh the bane of my existence as a podcast app developer and a frankly a podcast listener but but dynamic ad insertion this we've talked about it before
dynamic ad insertion is used by almost every major podcast publisher now this is how almost all podcast ads are wanting to be sold now and and delivered they splice ads into each download of a file so every person listening to it can get a different set of ads they can be targeted
to that person that which usually is just by IP address so this is how if you listen to a big podcast and you happen to travel like to spain you start getting ads in Spanish you know like that's weird I never heard ads in Spanish on this show before um that's why or you hear an ad
from like your local car dealer or your local movie theater that's how that's happening they're splicing it in for your download because they're looking at your IP address and they're seeing oh this person is roughly in this region let's let's give them these ads the problem with
dynamic ad insertion is that the client app does not know whether any two downloads of a of an episode will get the same file or the same audio content so in a streaming situation if I start the download and I download the first 25% of the file and then it fails or drops or whatever if I
go to download the rest of the file the next 75% that could be the the latter 75% of a totally different splice of ads in that file and so what that means is when you hit that 25% boundary where the splice has to happen sometimes you'll have an audio split where all of a sudden you're hearing
the middle of a different commercial or you're hearing a different topic because the ads that they put in aren't all the same length so if I start a download and don't finish it whatever I have downloaded is useless to me I have to not trust it and start the download from the beginning otherwise
you can get a weird audio splice and miscontent or have doubled content and so streaming really becomes problematic in this kind of environment because what if you're already playing the file what if during playback I need to re-download the entire file to be sure I have a consistent copy
and you've already and you're literally listening to it as I do that so that you can see that the challenges this poses both in UI and experience and technical complexity are just massively challenging to make a good product the other thing that's different now is cell networks are way faster home connections are way faster data caps are way higher and podcasts really have not gotten much bigger they're still just MP3s like they're not they're really basically about the same like yeah you know
fewer people are using like 64 kilobits per second you know but we're not serving HD 8K video here we're still just serving MP3s at moderate bit rates and so downloading entire episodes before they start playback is not nearly as much of a burden as it was in 2014 because they just downloads so
much more quickly now it's it's kind of no big deal so I decided let me try removing streaming because then think of everything I can remove think of all the different states I can remove the buffering state I can remove certain failure modes I can remove all these retry states I can
remove certain problematic behaviors that would like you know that that I have to deal with with this like it just makes everything so much simpler so right now there is no streaming support if you tap an episode that is not downloaded it loads the now playing screen it downloads it and then it
starts playing and in practice you will probably not notice this very much and it's not because again like things now they're so fast for most people and podcasts are so small it's fine I recognize this is a risk I because and the reality is to like my data shows that something like
it's it's less than 10% but it's not that much less like it's like it's like you know eight or nine percent something like that of my active users use streaming mode by default that's not a lot like in terms of percentage but that is a lot of people and I don't want to like massively set
them on fire so if you're a streaming person again it's similar to the design change I would ask like give it a shot like see how this goes for you and let me know if it's really terrible this way I can try to figure out some better solutions but I think it's fine this way like you know there's
some of the details I want to work on I also I want to add some features that are a little bit smarter about download management so things like for instance if you're listening to an episode and the next episode that follows it is not downloaded download it you know like that that kind of
thing that's what I want to do next so you know look for features like that maybe maybe you know soon down the road but give it a shot let me know what you think I think one of the main thing that most people will miss the only thing that I miss I was never really a streamer is the
impatience of I want to start listening to this episode as soon as there's enough downloaded for me to go and that brings you back into the whole buffered state and so on and so forth but I think you can make this if you make the simplification that um you will never support starting to play
anywhere from the beginning in this state it can maybe make it a little bit more tractable because I think that's going to be the common case of like I am on a snow flow connection or I have a bad cell signal or whatever and I just want to start listening to the episode now and it's two hours
long and it's going to take three minutes to download but can't you just start playing it now because surely I'm downloading it at more than a real time I well that's what streaming was doing before I mean I know but like you could start in the middle you could start in the middle
this streaming before right you could yeah and that that also God the amount of problems that caused I know so if you just say like this this episode has never been downloaded you want to start playing a SAP you got to bring back the buffering state because then you're like what if it hits
the end before the day it comes in so on and so forth but at least you have removed all the other cases it doesn't remove all the other cases because the problem is like well again like what if the download fails and it has to be resumed like so there it doesn't solve as much of the complexity as
you think um and so I just have to know like maybe maybe I should honestly maybe I should add some analytics of like how long to download take where the users are just waiting for them yeah that would be a good idea because I know for our podcast in particular like for the members version
some people complain that they just have bad network connection between wherever they live on the globe and are you know the thing that serves our members episodes yeah and and look at this is this is the kind of thing where like that is going to be something that we're that I'm going to
deal with like I'll see how I'll see if it matters I can tell you that I've been using this app this way for six months and I don't miss it at all like but you know obviously people use the app differently than I do so we'll see rest assured that removing streaming was not a small consideration
it was a big consideration and all of that complexity and all of those bugs and potentials for you know inconsistent states or bad audio splices or anything like that's why I did it because the reality of streaming is becoming quite bad and it's becoming quite a support burden quite a technical burden and it really creates a lot of bad experiences whereas just waiting a few seconds for the download in most cases is much better yeah you should add some analytics in that because obviously
resuming is is completely you can't do that but it's like for DAI reasons right you can't that's just don't even try and having to start all over like say someone's 90% through the single to an episode and it turns out they went into a tunnel and now they want to ask this the
last 10% you're like sorry I got to re-download it now you have one bar tough luck that's also not a great experience so obviously you prefer them downloaded up front but if someone has a terrible internet connection from from their house even and downloading an episode takes 25 minutes and
they want to listen to a ASAP and I've thrown some timers and make a histogram and see if there is some outliers maybe those outliers are the 8% that are currently using streaming or maybe the people are currently using streaming that is doing it because for some reason I thought it would
be better in the never changing setting and totally what I hear the most from people I guess I don't have data on this but what I hear the most from people about why they use streaming number one is to save space on their phone so they don't download everything and that honestly that makes
sense to me and I got I'm working on some features like smarter download management that I think will help with that number two a lot of people will will subscribe to a whole bunch of shows but they don't want to download every episode they kind of want to like cherry pick so I saw this in
a couple of ways I mean number one I had you can customize your streaming or downloading behavior per podcast that's been there but so that's that's still there in the new version but then I also want to maybe maybe in an update very soon I want to maybe add something like everything you add to
playlist whatever like to specify playlist that gets auto downloaded that's a pretty commonly requested feature so that way people can have like a queue playlist and if they add anything to it that gets downloaded automatically and again you know what I want is things like download the next
episode after whatever I'm playing automatically things like that like that that's the kind of thing I want to I want to do to try to address this problem in different ways and I think for the most part people who have very slow connections or you know other other like data considerations
I think usually those people just download things like in the background while their phones overnight or whatever so I'm not that worried about that case being like a fatal mistake here the the the better thing is figure out why people use streaming mode for things like download and
data management and see if I can solve those needs in smarter ways that don't require streaming so any of those proud of hmm I think two things number one when you know during different parts of testing I would have to go back to the old app here and there and when the in the old app
when I would when you launch the app what happens and people with large collections you're going to know this when you launch the app the old app about a half second after you launch it it performs a sync operation the sync operation in the old app is extremely heavy on the database especially if
you had a large collection because it would have to it would have to check for updates for all of the podcasts in your library like all of the podcasts all the episodes of all those podcasts all at once I did some work to like break it up into multiple requests so over the years it became you know
only only send what you know has changed or send each podcast in a different request but it was still a very heavy operation and so what would happen is you would open the app and a half second in the main thread would block for a little bit now if you had a small collection you probably wouldn't
notice this but if you had a big collection you definitely did and so you would open the app and start scrolling to something and it would lock up for a second as the as it loaded that data for the sync operation before the scroll will continue and that's just not great that's a bad user
experience it's bad coding practice and it's a huge spike in memory for the app it's a huge spike in power usage and so if you had a very big collection sometimes that could even cause a crash because iOS would be like oh too much usage shut it down so that whole design is now totally
different the way it syncs is totally different what it syncs the format it uses to sync all of that is totally different way way more efficient on both ends client and server so when this launches and when this becomes the dominant version of overcast first of all I expect my server load
to drop noticeably everything becomes more reliable servers become faster to respond etc. also when you open the new app that little half second delay is gone it is immediately responsive and it stays responsive even during a sync everything is way more efficient so that's no that's
the thing number one I'm very proud of thing number two I know this is a small dumb thing I am very proud of some of the some of the design details in the now playing screen I'll go I'll go with two of them when you toggle the info pane the header on top that shows the titles you know
the show title an episode title that header gets replicated in the info pane if it's multiple lines it will wrap if it's not multiple lines it will stay the way it is and when you toggle that that entire view hierarchy behind that is getting replaced but it doesn't flicker and it's exactly
where the open was so it looks like you're reusing the view and it just becomes scrollable and becomes multi line when you toggle the info pane on and off but it's not and it was a huge pain in the butt because that the new one is in the web view so it's this massive amount of complexity
to put that into a SwiftUI web view and it's all SwiftUI being put into the web view header all those buttons like in the old app all the buttons that were in the show notes info display those were all HTML buttons that I was rendering in HTML and like having them call back into the code that's not
this now those are all native SwiftUI controls so that's that's detail number one detail number two this is a little thing but I'm very proud of it if you draw a line from the bottom corners of the artwork down diagonally along the edges of all those circular buttons that's a straight line that
lines up nice it's just a little design to say I think it makes the screen look nicer that that these controls form a perfect diagonal down along them it's like when they have those logos of companies where they show all the turn circles and lines yeah the golden ruler the golden ratio
it yeah yeah yeah it's like this cloud is just three circles yeah it's like that it's a little stuff like that I'm very proud of because ultimately what I really want honestly I know this is a stretch I would die to get an Apple design award for this app I don't think I'm there yet I think I
need more work on it to get there but I think I can maybe get there by the spring when they would actually be deciding such things and I think this is the best chance I've ever had I don't like I don't think it's a great chance because you know I'm still not a professional designer by
most people's standards I certainly have no training in it and I don't get paid to do other people's design work but I'm very proud that I have built design skills over time that are at least decent and to get an ADA would just be the greatest honor I could possibly get that would put me over the
moon and I and that's kind of my goal here is like I want to keep iterating this app over the next you know six seven months until they have to start deciding such things for next for next WDC I want to I want to get there and that's that's a pretty ambitious goal but I'm very proud of the
fact that I think I can even do it like I think it's even possible again I still think it'd be a stretch goal this is not I don't think this is a a slam dunk by any means but man I would love that well I mean that would be amazing and I don't have a good feel for what what you need to do
to get an ADA other than be really good like really really good is well there's much more to it than that these days of course because it's it's come you know the ADA's are multifaceted like they give ADA's for all sorts of reasons some of them are you know kind of
more marketing based some of them are like you know what is Apple trying to promote how you use in their new technologies some of them are accessibility based which honestly I think I have I think I have a shot there because that's another another thing I didn't talk about but it's
pretty substantially different is the new app is way better at most accessibility things that that I've that I've tried so far so especially you know I've always had pretty good voiceover support I do want to try to improve voiceover support more but I'm going to need feedback from actual
voiceover users to really get an idea of things like you know does the arrangement of certain controls make sense like should should certain things be in different sequences or should I should I move certain things into menus or modal screens instead of just being all in line in one big
screen that kind of thing I just I need more voiceover users and I've I've had voiceover users as beta testers before but I can't get that many in that in that context usually so it's much easier for me to get good voiceover feedback by just releasing an update and then I hear from
many voiceover users that way so hopefully you know voiceover users please bear with me and please let me know what you think but you know in other areas like my my text sizing support for dynamic type is way better in the new app the old one barely supported it the new app supports all the
absolute biggest sizes in almost everything and it's it's pretty it's pretty it remains pretty usable I have a lot of different like you know certain controls can can switch to different layouts and stack themselves in different ways and things like that so the accessibility I've I've
spent a lot of time on and I hope it's pretty good and and there is an ADA for accessibility so I think that is a possible path as well although that that would also require more work but you know again like it's it's a stretch goal like I know it's again it's not a slam dunk I'm not
saying this work today must deserve an ADA but I think I can get there in six months no that would be amazing I would be very very jealous but I hope it works I hope it does and you know I'm just in general congratulations I think you didn't ask me but what I'm proud of for
you is that you set a goal which was an audacious goal and you talked either here under the radar both that you've had a little bit of help but and probably more than a little bit but you set a goal and you executed on that goal and that is that is really hard for everyone for different
reasons but for everyone when you're at work it's hard like a traditional job it's hard because often politics or procedure or process stands in the way or you're reliant on people who just don't have any urgency behind them to get you know from or you didn't get to set the goal
yourself and someone else set the goal for you yeah or you don't believe in the goal or you think it's BS or you think it's bad yeah there's all sorts of ways that go wrong yeah there's a ton of different ways that it went in a traditional job it can be hard and then when you work for yourself
it's hard because the only person you're disappointing is the person in the mirror you know and and we've left in the past in my you know curious choices food that I'll eat and ultimately you know the only person I'm disappointing when I put some really unhealthy stuff in my body is me right
also me especially all the European's who listen they're like you eat that yeah that's that's illegal in our country right it's literally illegal what is Melvita oh god who knows it's paste rice cheese products are in our cars with that melted PVC focus people focus but the thing is
when you work for yourself it's it's really easy to just disappoint yourself and then move on right like sometimes you know you shouldn't go to McDonald's for that dinner but you know what whatever I'm hungry it's right across the street and it'll fix my current problem almost immediately so why
don't I just do it and you know it's easy to kick the can down the road when you work for yourself or it's easy to change priorities when you work for yourself and I think one of the harder things when you work for yourself and I'm not trying to say it's like harder than a traditional job or
anything like that it's just if you're if I'm looking at what my world looks like and if I'm being completely selfish what my world looks like is it is easy to get distracted it is hard sometimes to be motivated and it is especially hard to set a goal and then freaking execute on it it is
hard and yes if you have a traditional job that might sound ridiculous like well just do it man just believe me it's hard it's harder than you think and I'm very lucky that this is my problem and I think I speak for you to and saying we're very lucky that that is your problems as well but
it's still hard and for me I think what I'm most proud of for the for overcast well first of all that you've all lasted 10 years I mean that is that is a heck of an accomplishment that is something to be extremely proud of but more than that the you did this big thing you did this
big difficult thing while a lot of life was happening in your life and you executed you friggin executed and even if this were to bomb what you want but even if it did I still think you should be very proud that you executed and that's that's something that I genuinely think
should be congratulated and recognized and to the degree that that we are here to do it I hope we are congratulating you recognizing it to the degree your family can do it I hope you go out for a nice dinner or something like that but it's it's something to be proud of and I hope you're proud
of yourself I really mean that thank you honestly I I'm nervous about this launch I'm nervous about the reception I'm nervous like I know I'm going to get a lot of negative feedback from both you know some like the streaming removal or certain feature difference or behavioral differences or
you know just looking field differences I know I'm gonna get negative feedback and I know some of it's gonna be valid and I'm gonna have to like scramble to fix certain things or to improve certain things so I and and when criticism is valid it kind of hurts the most you can't just disregard
like when you when you know like ooh they're right that does suck you know that that's that's a little bit harder to take so I am braced for what might be a very rough release for me because this is the most I've ever changed at once but at the same time I've been using this this way
for again six months and I'm confident this is way better than the outgoing app from from my preferences and and for my for my standards and so I know that you know I'm not gonna bring everyone along that's that's the reality whenever you change anything you're not gonna bring every single
user along some people are gonna drop off they're gonna get mad I'm gonna switch something else and I have to just accept that because I am confident that if someone came to this app brand new today who didn't have like any muscle memory for the old ways or things like that I think they
would love it and I'm very proud of what this app is in a vacuum not considering its past so the only question for me is like how do I make how do I try as reasonably as I can to bring the past into this to to migrate users in oh that's a whole thing I can talk about the migration by the way
but give me the like in a second but how do I how do I bring people in in a way that tries to respect the muscle memory and expectations and preferences they've had they've built up over 10 years and that's that's very difficult when you do a redesign and it's it's never perfect you
can't bring everybody in but I've tried to do a reasonable enough job of like respecting the way people use the app and and try to make it an easy transition but ultimately what I am proud of and and what I what I can very confidently say is this app is better than what it replaces
and it is going to enable me to keep making better versions and with the old app I was in a bad place you know I for because believe me like for all the last you know four years or whatever that I've been able to add almost no new features I felt it just as much if not more than all my users did
because I was looking at myself saying like how am I going to get myself out of this hole because the idea of facing a complete rewrite is daunting and it just never felt like I could I would first and I'd never felt like I had enough time to do it and it never felt possible it always felt like
it was just such a daunting task that would never be able to achieve it and I was even questioning like you know not only like should I even still work on the app but I was even questioning like should I even still be a programmer because I'm falling behind am I even going to keep being like I'm
going to have to like move everything to swift and swift UI but it was the way overcast was written and and implemented it was very difficult to do that piecemeal it was very discouraging of like is my career over basically like am I willing and able to make the jump into the latest technologies
and languages and frameworks and everything else or should I just stop here and stop programming and that like challenged me to my core of my identity and my profession that was a dark place but it felt impossible like they're in for for a decent length of time in the middle there
it really felt like this is over for me like this is this is impossible and I'm finally at a point now where I'm very confident that no I I compared it's you know to starting in fifth gear it's like you know you start out very slowly rewriting an app from scratch that's that's a
pretty big app like rewriting it from scratch in a new language with new frameworks new programming paradigms new data paradigms rewriting all that is a massive undertaking that you have to do a lot of work before you see any progress but I plowed through and I did it and now I'm here and I feel
better than ever I feel confident in myself in my abilities I feel confident that what I've made is good and even though I'm going to have to face a lot of the music you know as everyone else finds it and maybe things differently at first I'm confident that this was not only a good path forward
for me to take and I'm proud of where I am I'm also confident that this is the only path forward it was either this or I stopped writing overcast I had to do what I felt was right you know my way and just hope and trust that I can bring enough users with me that will be okay but I feel great
I'm very confident this is pretty awesome and it's only going to get more awesome over time I know is it should be easier for you to do all those bug fixes yes so much less code so much easier to change honestly it is I mean you know look at how much has changed just during the beta it was a very
short beta and it was only it was only friends it was only about 30 people so it was a short small private beta but even during the beta I was able to iterate pretty quickly and so it it really has gone very well having this new foundation because I'm able to twist things around and try different
things and iterate and change behaviors here and there without a ton of work without a ton of breaking things and so it's it's really been it's really been quite a journey but I'm extremely satisfied with where I've landed let me give a very quick rundown on the migration I don't think
I've said this on the show yet but I kind of pulled an APFS move here the version of overcast that has been out there in the world in public for the last month or so is already running the new rewrite sync engine in parallel with the old sync engine you know the new sync engine is all
you know based on blackbird and everything it's a whole new sequel I database a whole new schema and everything new data that's being done from the server and so up on first launch of the new app if that database is not yet there it has to re sync everything it has to go to the server and sync
copies of all the different podcast data that you have and you can imagine you know first of all this takes like you know a minute or two and it also hammers the servers but also what if the app installs it's auto update when you're in the airport about to go on a flight and then you get on
the flight and you open your podcast app when you're at 40,000 feet and it says updating and it can't reach the servers and you can't play anything or do anything that is a terrible experience I also have people who will do things like load up on podcast and then go on like a military
base deployment or something where they're going to be out of reception for a while or something like that so I wanted to prevent that outcome so what I what I've done is for the last you know month or so the version that came out like a month ago it secretly included the sync engine
for the new one and it started downloading things in the background and so now when you install the new app the database in the new schema is already there so not only are you saving my servers from all being hammered at once but also if you happen to be like on a plan or in the military
base and you launch it for the first time after you're offline your app is usable because it will import all of your downloads and it'll it'll just copy that database into the place it goes now and also by the way this entire time it's been running there have been zero crashes of the
new sync code I literally zero like there have no crash reports coming from that sync code from the old app so that was also a pretty pretty good thing to to feel but anyway so that's I think that's it for now you know I'm sure you know we'll revisit this over time as I add new features but
that's not going to be like obviously a regular segment of the show or anything but that's I think that's it that's my rewrite story what's the version number it's you know what that's a whole thing everything's a whole thing the version number is just 2024 dot seven I wanted the version number
to be like you know 10 dot something or yeah X yeah that's then I have to say I have to deal with people saying overcast X no so the way the way that app store connect works you can never upload a version number that is when linguistically compared to the old one or a mathematically
competitive one it can never be lower than what you've already had approved so when I switched to the year based numbering 2027 2024 dot one 2024 dot two etc now any version number I upload has to be greater than 2024 so I could do like 10,000 dot one which I played with like how that looks
I'm like that looks stupid I can't do it too many zeros yeah exactly so that's the only way you can really do so inside I'm like I'm just going to keep the version numbers the same so this is version 2024 dot seven in the year 3000 I'm super excited for you but John any last thoughts
parting words etc. Nope just looking forward to the official release version and looking forward to all those really fast bug fixes after yeah I hope you've cleared the decks for the next couple of weeks oh my god yeah I did add John Syracuse of playlist priority mode though I know you keep saying
that but I don't even remember I know you've described it before I don't even remember when I made this issue request oh a while back not that long maybe maybe like a year or two I have so many more requests about how to manage that screen but again now that I know how how easy it is to make
changes hopefully all these new things will be easy like collapsing episodes from the same podcast together adding some hierarchy all like good stuff oh yeah I mean because everything everything is so much faster so much easier like you know I used to have a limit on the number of episodes
that a playlist would manually sort it was some I think it was a thousand or 1500 before I still have to have a limit but I think the limit is now like a hundred thousand like I made it way higher challenge accepted it's yeah because it's just like it's it's so it's so much more
more efficient it's so much faster it's everything like all the different algorithms and everything for like sorting and you know ranking episodes and playlists like those are all faster and those all are just passing around IDs and stuff like it's just it's so much faster so there's there's
things like that like all over the app there's small things like oh there's a new feature that I'm kind of proud of uh undue seek this is something that I think all apps should have not all of them do if you take a very large seek like for instance if you accidentally drag the playhead on your lock screen on control center uh or which happens all the time or if you like you know accidentally skip a chapter or something you want to go back it shows a little undue seek button open open the app
look at the artwork and then I'll play a screen you'll have an undue seek button for like 30 seconds after you do it um so you can bounce back to where you were if you want to little stuff like that like that's that's the kind of thing I'm trying to do more of now and again there's not a ton of
that in this version yet because I I was busy rewriting every single component of the app um but I can add stuff like that so much more easily now um the sleep timer you can now do sleep at chapter end like there's all these little things around the app that are just a little bit nicer a little bit
better you know what I was saying with Syracuse of playlists sorting is what what John wanted was um the way playlist priorities worked were they were ranked so if you said all right these four podcasts are high priority playlists they would actually have an order like they would be like all right
this is one this is two this is four but what John was saying was I want to just have high priority be a grouping and have them not sorted within that grouping that's now an option I also have low priority playlists that when I was sort at the bottom of the list that's been requested for
years now I have that option like there's little things like that all over the app that are like a little bit nicer a little bit better a little bit different um so peek around have fun and uh bear with me while I make the rest of it even better oh congratulations and happy happy anniversary
thank you all right thank you so much to our sponsors this week tail scale one password and probably overcast thank you to thank you to our members who support us directly you can join ATP.fm slash join members have an extra topic every week called ATP overtime this week the ATP
overtime topic is some changes in macOS Sequoia with non-notarized apps this will be kind of interesting so tune in if you want to hear that you can join ATP ATP at FM slash join that is overtime this week thank you so much for listening everybody and we'll talk to you next week
now the show is over they didn't even mean to begin because it was accidental oh it was accidental john didn't do any research mark going kc wouldn't let him because it was accidental oh it was accidental and you can find the show notes at ATP dot FM and if you're into mastodon
you can follow them at c a s e y l i s s so that's kc list ma r c o a r m anti-marko armament s i r a c u s s e r c u s s e r c u s s a it's accidental accidental they didn't mean to accidental accidental tech podcast so long so I was put in a position where I was offered a extremely
extremely robust discount on some sonos gear and the three of us have found ourselves in this position from time to time and we are very lucky for that because although all the sonos stuff is expensive like full stop it's expensive I personally think it's worth it I think marko has
come around to a similar perspective but it's expensive and there's no way around that and I bought some of the stuff that I have in the house at full price and it hurts a bit because it's expensive but it's good and I think it's pull having access to money off has pulled forward
purchases that I probably would have eventually made anyway but it's much easier to justify when you know you're getting a really really robust discount and so my really good friend Brian had offered me a discount on some stuff and I was in this is the first world least the first
or problems it's not even a problem at all but I was in a weird state so the state of the world state of the world at the list household is I have I think it's a premium immersive status what they call it which is what I'd gotten way back when and talked about on the show like a year and a
half ago or something like that this is their arc soundbar at the time it was it it it is or was one s l surrounds so a cell meaning like no voice support so they're speakers but you can't talk to them one s l surrounds and then the subgen 3 which is their big subwoofer loved it absolutely loved
it and I think at the same time I got a room which is their little baby like jam box style um portable speaker love that and then a little while later like a few months later maybe a year later I got the original move there's now a move to this thing is heavy it's big um but it's really
it's a really good really high fidelity portable speaker and you can play via bluetooth or or you know just become the same with the room or it just becomes one of your son of speakers and that was the state of the world until literally today uh the the arc and the home theater setup was
obviously in the family room living room I use those terms interchangeably the TV room um then the Rome the little portable speaker was up in our bedroom and the move the big portable speaker was in the office because oftentimes I would use that to play music this studio display speakers
are actually surprisingly good but you know they're small and they don't really have a lot on a base and nothing I listen to extremely basic stuff but I like more than zero base and so um the move was in here and I generally speaking with you would play music through that oftentimes I
would air play via the music app sometimes I would use the desktop sonos app and just have the you know the speaker play everything on its own uh and that was the state of the world but I started thinking john surely there's a better setup for my desk if only someone had recently uh created
a sonos desk setup yeah and then some jerk accepted me and said you could go bananas and get two error three hundreds which I had neither the budget nor the space nor really the desire because of my my office I can't recall how big it is I want to say it's like 12 feet by 14 feet
which is something like three no four meters by I don't know four and a half five meters something like that but you have two other monitors on the side of your central one the speaker is what I was gonna say I think it's about the size of my office yeah well fair um but
I didn't I don't have the space on my desk for the era 300s there also a little homely to look at like I don't think they're actively bad but they're not great uh and it's just they're too physically big for my desk they really are and even though I would love them and they're also
extremely expensive I mean they're again phenomenal speakers I mean Marco has attested to this and and I have heard Marco's exact error three hundreds which I deeply regret because they sound so good but that's neither here nor there um but I I reached a compromise with myself
and I decided to get a pair of era 100s and because I so I put them on the the back corners of the desk and so they're pointed at like a 45 degree angle back towards me but they're in the two extreme behind your monitors be honest yeah well yes but under them so they're under
I'm sure like acoustic engineers are crying now yes they are but you do the best with what you got also how high are your monitors how can they fit under them I think your monitors start to hold on these amounts well no that's not fair two of them are on a uh fully a Jarvis well now it's
what is it herman the Jarvis uh maybe not Jarvis but there are two I think I talked about it in the show when I first got it there two up V's amount arm is freaking phenomenal I love this thing I should also point out that speaker stands exist that's true but I don't I don't know that that would really do a whole lot better people the audio files are like oh you don't make sure your speakers aren't pushed back on the edge of whatever shelf they're on because I'll affect the sound
in case he's just putting his on the corner of a glass desk behind a monitor it's not glass anymore remember I got rid of that I face book marketplace that bad boy thank you very much um but anyways it is probably not from an audio fidelity perspective the ultimate best setup in the world I can see that let's remember that I I also have my TV and slash R slash TV too high my TV downstairs is effectively in the sky if you if you were to believe what john's helps you yeah it's on the ceiling
it's on the ceiling that's like being in a mission pro just lay down exactly it um and I oh and I forgot to mention I'm sorry this is my own fault but I forgot to mention that the move was on the opposite side of the room behind me pointed at me just because
that was the most convenient place to put right it's which which obviously was not fun like there there's there's making choices that are perhaps not the best fidelity and then there's just bad choices and that full stop is a bad choice but I'm working with I'm working with what I got here
it's like you're at a concert but you're turning your back on the concert all time yeah pretty much pretty much um so I put a pair of um era era 100s which is their the the the air 100s kind of serve dual roles and the same way the one of cells did or the excuse me the ones did in in
they were the predecessor to the air the air 100s the sonos ones and now the air 100s are arguably trying or they really are trying to serve two different purposes one of them's being the rear surrounds in most people's setups some people will go full Marco and go era 300s as their rear
surrounds but they're physically large again they're probably going to be square in the middle of the room or yeah no not in the middle of the room I shouldn't say that but you know in a place that they're very conspicuous and not a lot of people have the physical space for them because they're big
so the ones and now the 100s oftentimes are rear speakers they're they're they look vaguely like hom pods do they're they're roughly the same size as a full size hom pod so they're much easier to put in smaller spaces they're cheaper and they're not huge right so you wouldn't expect
to get ridiculous amounts of base or would have you out of these things but they also are supposed to serve as like I would like a single speaker in a room please and I'm not I'm never going to move it you know I would I would probably be better served by having one or two of these in the bedroom
as opposed to the room but I like having the two different size portable speakers because depending on what I'm doing I will choose one of the other and so the speakers in some cases they're just rears which aren't really doing that much but in other cases there what I have which
is doing the full-on stereo for my computer setup and what I've done is you know I put these two in a stereo pair and I got a line in for one of them so I've plugged directly for my Cal digit TS4 doc directly into the back well I shouldn't say directly through a little dongle but into
the back of one of the two arrow 100s and holy crap my dudes these things sound so freaking good like I don't I don't even have a sub attached to them and I think even the sub mini might be too much like the amount of base that comes out of these it isn't too much but given how physically small
these speakers are it is stunning to me how much base that comes out of them and I'm I'm harping on base just because like the arrow 100 excuse I'm sorry the the ones when I've heard them as music speakers as opposed to like rear surround speakers they always sounded kind of
tinny to me yeah the so does one was not a great speaker exactly and again I'm usually listening to like Dave Matthews or you know or maybe 21 pilots or mute math or whatever like I'm not listening to exceedingly basic music not to imply that there's problem with that's just not what I'm listening
to but yet even for Dave Matthews if you listen to it on do it on a one it's kind of tinny and not great and these things these sound so good and get more than loud enough for the small space that I'm in and I am so happy with this setup and so then what I did was I have I have relocated
I was going to say move I've relocated the move into the bedroom and then I have relocated the room downstairs in the dining room because the dining room just because the way our our houses arranged the dining room is kind of like a music dead zone even when I was playing on the arc
that that is not physically very far from the dining room but there's a couple of walls in the way and so on and so forth so now I have a really solid whole home setup there's a couple of dark spots if you will where the music isn't quite as loud as I would like but I mean even the porch has a
a sonos port connected to an amp connected to outside speakers and then I got like a $12 I think it's like 3d printed little harness that you can hang the move off of the bigger one off of and I mounted that to our fence in the backyard so then as you're walking from the screen
didn't porch down the steps into the backyard you've got a continuous flow of music into the backyard gentleman chef's kiss I am so freaking happy I understand that this entire show has been advertised in several centuries it's just so it's just so happened that mark was releasing overcast
it just so happened that I literally today received these two speakers but they are so freaking good and I get that they are expensive and part of the reason why I have so much of this equipment is because I've been lucky enough to have several different friends that have offered me discounts
but it's one of those things like apple stuff where yes it's expensive but you get what you pay for and oh my god it's so good and I'm so happy with the setup that's awesome I'm really proud of you for it finally having for now continuing the the ATP pattern of using sono speakers as desk
speakers which they are obviously not made to do but they sound so good you can just ignore that and just just suck it up and do it yeah I'm so very happy and I'm so excited with it and you know the good news is John when you finally get rid of that enormous boulder of a computer and get
something more appropriate for your room I don't know like a studio you know a max studio maybe you could get your own pair of sono speakers and put them in that's not gonna change the amount of room available for speakers you see in my setup that that thing doesn't change anything about
nine nine my speakers at a hard time my again I will once again remind you that my speakers are literally turned off that's how much audio I'm like remind you period of that I use they're pretty much always turned off so not a big need in my life but I will keep the arrow 100 in mind
and I keep saying oh they you keep saying they're so expensive this is this sounds like someone who has not done shopping for speakers that are not smart speakers the arrow 100s are $250 for each speaker that is nothing in the world of standalone speakers just it's a scary place
like standalone passive no smarts no nothing no power just plain old speakers yeah it's it's it's expensive and wild out there but man I tell you what and these things are so great and yeah you know I'm sure we'll get feedback that a couple of months ago maybe the the sonos people
redid their app and it was real rocky and I think they even invoked the word courage at some point with regard to their changing the app which of course everyone was like well that's gross and then the apple people were like oh no too soon too soon uh-uh and so it's been a little rocky in that
regard but it's still I mean this stuff works really well and there there have been bumps here and there but generally speaking it works extremely well and the this fidelity is so good and I'm not trying to say that I can't get a better higher fidelity setup maybe even for less money but
it is so magical for me anyway because I'm someone who just really needs to have music on all the time I'm I know that John this would drive you you have to have it you have to have it in every part of your house even if you're not having her doesn't have it you put in that tiny terrible speaker in
there to listen to music because otherwise there would be no music in that right now you're making fun of me and I recognize you're making fun of me but that is 100% accurate it's in the movie Ponyo okay no I have not okay well I can't make the reference then I'm gonna ask Mark of course
I'll tell you what they're like it's case you're speaking of like the sonos app rewrite landing like a led balloon imagine what it's like to be an app developer about to launch a total rewrite of your app we're certain features have actually been removed but it's a much better foundation for
future they yeah yeah yeah they really heat it up the room I was like oh no yeah I feel for you I truly truly do well you've got more excuses I think they have a few more developers than you do yeah maybe also fair but yeah I mean I'm not trying to say that this is the best possible answer but
it is the I genuinely believe it is it is the best answer for me and it really makes me unreasonably happy it really truly makes me genuinely extremely happy to walk from the back yard through the screen didn't porch through the living room up the steps maybe pound down to the
office and then all the way to the bedroom granted my house it's like 2000 square feet it's not that big a house but at every point in that journey I have heard the same music and just like in Disney World where it is all just perfectly in sync the whole time it is perfectly in sync the
entire time even if I'm carrying around a speaker it's somehow by freaking magic stays perfectly in sync this stuff makes me so genuinely happy and it really doesn't prove my quality of life and I know that they would destroy John's quality of life because you prefer silence it's gonna destroy
your quality of life too once that music starts to become your kids music that you don't like fair surprisingly I actually you can be like why I can't escape their music no matter where I go in this house I have to hear it you're right it's funny you bring that up because very briefly
uh declin doesn't um declin doesn't seem to have a particular affinity for music and in fact not yet has has well and so and has often said to me like you need to put music on right now dad but I think I think mcayla like right now she's all into Disney music and stuff like that but
I think of the two of them she's gonna be the music lover of of the family and so I am very excited for her to start building her own tastes that are outside I mean the Disney stuff she likes is good don't get me wrong but I'm excited for her to build her own taste in popular music or maybe not popular music you know and just see where that goes so I'm really looking for it.
I'm excited to listen to that in every room in your house uh I mean to a degree yeah because it's a way to I'm not trying to like shame you or anything but for me I think it'll be a really fun way to bond with her and ask me again a few months after she's somehow taken over my entire whole whole home audio system and maybe I'll tell you oh my god you were so right this is terrible but sitting here now we're ignorance is less it sounds very fun oh my god