Daniel (00:10) Dave, good morning. We talked too much in the pre-show, which no one is allowed to hear because it contains our deepest, darkest secrets. So I'm going to intro us right in. Hey, welcome to Waiting for Review, a show about the majestic indie developer lifestyle. Join your scintillating hosts to hear about a tiny slice of their thrilling lives. I'm Daniel, a duck-faced poet, and here with Dave. Dave (00:11) Daniel, hello. Daniel (00:38) the meddler of pixels. Join us while waiting for review. Dave (00:42) I thought you were going to say mewing champion 2025 after we were pulling faces. Daniel (00:49) I'm going to add that to the document. Dave (00:53) ⁓ No, yes, behind this beard, if you're watching on the YouTube, there is a steely chat like chin. No, that's not. Let's move on. ⁓ Daniel (01:06) Hahaha Dave (01:07) ⁓ it's going well. ⁓ Yeah, it's excuse me one second. That was my cat just coming into the room. But she won't want to come. ⁓ Yes, actually, she she she was the champion last year. No, she's not going to come on camera. She will scratch me if I pick her up. She likes just being in a bed. Daniel (01:07) How's it going? it also mewing? Oh nice. Strong competition. Dave (01:34) But no, think things are going well, Daniel. ⁓ We can talk about it in a bit, but I am deep, deep down the rabbit hole of my crazy, ⁓ can I make a GUI myself idea that we have spoken about before. ⁓ Daniel (01:49) and you post its user interface videos and these are like way further along than I thought you'd be at this stage, which is really impressive. Dave (01:57) Yep. Yep. But if we talk about it now, I will absolutely chew the whole show up with it. let's, let's talk about some other things and you can come back to me on that one in a bit. ⁓ Tell me about your world, dude. Daniel (02:12) Alright. What is my world? So I have returned from vacation where we actually recorded an episode on the island of Mallorca, but that episode didn't see the light of day because of some technical difficulties. But it was pretty fun because to get enough bandwidth, what I did was I sat on the terrace on the ground floor because that's where the desk was, like an outside kind of table in the sun. It was really nice. Dave (02:22) We did. I know. Mm-hmm. Daniel (02:43) But then I had to put my phone, I put it on the rooftop because that's where I could see the 5G tower and then Wi-Fi beam like the signal down to my laptop. It didn't work. Dave (02:50) Ha ha ha. Yeah, and it worked. It worked. And we recorded up until the rain kind of meant you had to scrabble to get your phone, if I remember rightly. But no. Daniel (03:03) Yeah, everything survived. I did spend a few hundred kilometers in the saddle of a bike that was really nice. And now I have returned to rainy Hamburg, which is giving me a pretty good fall. Like if you like fall, this is the best kind of fall that you can wish for. Like lots of golden sun rays, like hitting the red and yellow trees. I have these huge windows in my office and I have like ⁓ some refracting Dave (03:25) Mm-hmm. Daniel (03:33) stickers on them so I get like some tiny rainbows sometimes, it's really nice. ⁓ Still, it is a bit too wet for outside biking so I went to the indoor gym and ⁓ had like so put up the indoor bike and everything again. yeah. Dave (03:38) ⁓ I love that. Yep. Alrighty. So you're in... was it Goom? Do you mean Gaim? Daniel (04:00) Like it's not even a gym, but like, I don't know, like I love pronouncing things incorrectly. Like I'm using a new, a new tasks software these days called Todoist. Dave (04:01) You ⁓ Daniel (04:15) Hmm. And so yeah, I'm thinking about going to the gym, probably gonna gonna be a home gym because otherwise, ⁓ like, biking in a mask is increasingly increasingly unpleasant. And so, you know, Dave (04:28) Yeah, and winter time coming up, you definitely need to keep that stuff at bay because who needs to be laid out for a week? Daniel (04:36) Yeah, exactly. But I also need to exercise this sexy physique because otherwise it's going to deteriorate. yeah, that's there. ⁓ I'm finding ideas. I have news. I haven't really... I don't really have new telemetry tech things to talk about because I haven't really worked so far. lot. The newest feature is we have single sign-on, but it looks like butt. Dave (04:52) News, give me your news. Mm-hmm. Daniel (05:04) So it works, but it needs a few more ⁓ providers and it needs a bit more user interface. yeah, it's fun. It's on its way. ⁓ Dave (05:12) that's on its way. That's really cool though, because that enables corporate stuff, like bigger stuff. Yeah. Daniel (05:18) Right. Also enables, I don't know, login via GitHub. So if you don't want to register with your name and your email address and everything, it's just a click one button. So it's kind of nice if you like GitHub. ⁓ I wanted to come at you with the combination of two of my hobbies, which is Apple has bought the exclusive rights to broadcast Formula One in the United States. ⁓ Yeah. So going forward, think even like starting next season, which starts early next year, Dave (05:39) ⁓ okay. Daniel (05:46) Apple will be the ones you have to pay if you want to watch Formula One in the United States. So this doesn't affect me directly, but I think it will affect the world of Formula One. And also it's a bit interesting to me at least because they paid a lot of money and like we're starting to see like from people who are in the US actually how that's going to work. ⁓ Dave (05:55) Dang. No. Yeah. Yeah. Daniel (06:17) The link that I posted doesn't, okay, I'm gonna find out like how much they paid, but ⁓ they paid a lot of money. what is interesting is also like they said, like people were wondering like, how will this affect things? Like because ⁓ Formula One itself, they have a really good streaming service. You pay not a lot of money for them and... you have a lot of access. Like you can select all the onboard cameras from all the cars and you can select different streams with different commentators and stuff like that. And so that's pretty cool. And so my first instinct was to think, ⁓ this is going away because for example, in Germany, Skysc ports has these exclusive rights. So ⁓ legally or legally, don't know legally, but so ⁓ Dave (06:55) right. Yeah. Daniel (07:12) the Formula One streaming service called F1 TV is actually not being offered in Germany for live streams. of course, if you have a ⁓ Dutch Apple account, can still download the app. somehow, because for example, Sky Sports doesn't give you all these options with Sky Sports, you pay way more money, you get ads, and you can only watch them live. You can't time shift. Dave (07:18) rights. Life hacks. Yeah. yeah. and you get much less. Daniel (07:40) You can't switch your perspective. can't watch older races. Dave (07:44) Right. So I'm just looking at this article now and it's kind of cluing me in a bit. So you've got this new broadcast agreement. We'll see Apple TV host all free practice qualifying sprint sessions and Grand Prix select races and all free practice sessions will also be available to watch for free in the Apple TV app. It then goes on to say F1 TV premium, which I believe is what you're referring to. F1's own Premiere content offering will continue to be available in the US via an Apple TV subscription only. Daniel (08:21) Right, and so now it's come out how that will actually work. Which is, like previously you had the F1 TV app and you would just like subscribe inside of that app. Either using the app store or going to the web and then on the web you could just enter your credit card details. Apple by the way paid 630 million US dollars. No wait, that's the wrong number. That's the wrong number. No, ignore that. I saw a number and I quoted it but that is. Dave (08:22) So that's the shift. Yeah. Yeah. Yeah. And then you can log in after. Yeah. time. Mm-hmm. Daniel (08:49) Not what they paid, that's what the F1 Dave (08:52) That's why it's gross. Yeah. I was going to say that I feel like it's probably more than that, that they will have paid. ⁓ But, Daniel (09:01) Thoughtless. Okay, I can't do research and talk, so I'm gonna like look it up. You will find something online. A lot of money. Dave (09:05) No, don't worry about it. But I think it's interesting to me and in a sense of, wonder how many people will get an Apple TV because of this. Like, they get, will they do that because of this? Does, the subscription sort of model line up to kind of incentivize that? Like, you know, if you get a Apple TV and it comes with a free years worth or six months worth or whatever it is of, of, of Apple TV, ⁓ as a new customer, like I see that as probably being part of the, the, the deal for Apple, if you like, is that they're going to gain a bigger customer base because of it. ⁓ so strategically it makes sense. ⁓ yeah. Daniel (09:50) Yeah, probably. it does. I mean, they also did produce or publish the F1 movie, which also was surprising to me. that, says, that says like, if you go to the cinema or watch it like now on streaming, there's a big fat Apple logo in front. ⁓ and so like the F1 TV app informed American customers recently, ⁓ that they would no longer be able to renew their, their subscription. So the yearly subscription would run out at the end of the year. And that. Dave (10:00) Hmm. Yep. Mm-hmm. Daniel (10:20) to continue watching inside the F1 TV app, they would need to have an Apple TV subscription. So it seems like there's gonna be a period where they kind of, where we can still watch inside the F1 TV app, but just like your Apple TV subscription will be recognized somewhat. Dave (10:35) Yeah. Dang. If I was an Android user and I was fundamentally opposed to having to do that in some fashion, because I assume this will apply across the board, I'd cancel my subscription if possible ⁓ and then renew it just before it shifts over. So then you've got like a year's worth of that. Daniel (10:49) Mm-hmm. no, but like at the same time, couldn't create new subscriptions. Like starting now, can only, like if for some reason you wanted to watch half of the season starting now, then you would also already have to pay via Apple TV. At the same time, Android does have Apple TV apps. And also like, I assume there would be some way of authenticating, but I'm still... ⁓ Dave (11:05) Right okay so they've they've shut that door. Yeah. Mm-hmm. Thanks. Daniel (11:29) interested also like how this is going forward. Eddie Kew gave an interview and he said they have big plans because they say, ⁓ Apple says sports broadcasting is bad and they have ideas on how to make it better. Dave (11:34) Mm-hmm. Okay. I'm, there's a, yeah, I'm just thinking how would they make it better? What would they add here? And I think I know, I think I know one angle this could come to, Daniel. Daniel (11:44) ⁓ And they have, yeah. Is it the Vision Pro? Dave (11:59) Yes. Yes. ⁓ did he say that? Daniel (12:04) I haven't looked at the whole interview to be fair. ⁓ I don't think he said anything about future plans as Apple is wanting to do. But that's just like when the Vision Pro came out, they had like example apps for Formula One as well, where you could see like the big screen, but also like a map of the screen and stuff like that. And I mean, that's kind of neat. But at least for me, like watching Formula One is pretty, it's a pretty communal experience. Dave (12:08) Okay. Mm-hmm. Yeah. Daniel (12:31) Like I rarely watch Formula One alone, like either Alex is with me or I'm inviting a friend and they're like sitting on the couch with me. Because it's like the half of the fun is making fun of what's happening on the screen, right? Because like it's not a very serious sport. It's like, why is my emotional support millionaire driving a circus slower than your emotional support millionaire? That's the whole like premise of the thing is drama and everything. But like it's really cool to like, it's... ⁓ Dave (12:32) Mm-hmm. Daniel (13:01) It's not as fun to watch it alone as with people. But with Vision Pro, you have a thing on. The other thing that I'm kind of afraid for is a thing called MultiViewer, which is a third party application that is free from the community where ⁓ it kind of pretends to be the F1 TV app and just slurps down all the streams, the live streams. But you can combine this for your Mac. You can have like... a big screen with the main TV feed and then like your three favorite drivers onboard cameras and a track map overlay and the timing screen all at the same time. It's all synced. And so that is really cool. And I'm kind of afraid for that app now because that is very much for the hardcore people. Like if I watch F1 alone, that's usually how I do it because then you can look at all the nitty gritty details and the timings and everything. So yeah, things are changing and it's going to be interesting. Dave (13:35) Right. Yeah. Bye. Yes, are indeed. Daniel (13:55) And it's somehow I am kinda like, hey, Apple, get away from this hobby that I have. Dave (14:06) Yeah. But on the other hand, I can sort of see like, I don't know. I mean, I don't want to really get too deep into sort of guessing what it would be, but like I can see the tagline of like, you know, Vision Pro and Apple with the F1 putting you in the driver's seat. You know? And Daniel (14:25) Right. Yeah. Dave (14:27) Yeah. And then some of the immersion that you could potentially get from that could be quite cool. It would be counter to some of the social aspect that you're describing, but like, ⁓ you know, there's definitely a niche there, I think, ⁓ for that sort of thing. And especially for sort of like post post race moments and things like that as well. ⁓ Yeah. And then of course, there's also the possibility, I guess, of like having ⁓ all sorts of information, you know, with the main view in the middle and ⁓ speeds and things like that dashboard side around you floating in sort of AR 3D space. ⁓ It could be cool. ⁓ I'm sure they've got plans for something in that regard. Yeah. Yeah. Daniel (15:17) Yeah, let's see. Dave (15:21) But no, definitely a bit of a bit of a first, I think, for one of our tech giants making a move like that. Daniel (15:26) Yeah. It's interesting. Let's see how it goes. Like it's a weird combination. Like for me, for me, like I don't, I'm not saying like this is weird for Apple. think it makes business sense for them. It's just like where to see these things combined. Dave (15:37) Mmm. Yeah. Daniel (15:44) ⁓ But enough about that, I think, because I really want to talk about your user interface experiences. Dave (15:53) Okay. Yeah. So I've, I've shared some videos lately and I can certainly link those up in the show notes from a mastodon on my blue sky. Hey, I'm back on mastodon again, kinda at the moment. ⁓ so yeah, I'm there as well. mean, ⁓ I never, I never really let go fully, I'm mainly just posting about my apps these days, which is totally relevant for this podcast. So that's cool. But, ⁓ yeah. Daniel (16:05) Nice. Dave (16:22) Where am I? So was it, was I just at the idea phase when we were talking show before last, cause of the one we missed, the one that didn't go out. Daniel (16:36) I think so. Like show notes says, Dave is starting on another journey. I think you were at the idea says, yeah, yeah, yeah, you were talking about like, how could this be? How could this work? Like, what would the stack look like? You said something about skier. Dave (16:38) Yeah. Okay, Yeah, yeah, yeah. Yeah. And you, yeah. And I was probably still looking at I am gooey at that point as well. And maybe just that sort of initial bit. Yeah. Yeah. Yeah. it's actually, it's actually called dear. I am gooey. It's really cute. It's like dear. am gooey. ⁓ but, no, think, you roasted me hard on that last show, Daniel, if I remember rightly too, ⁓ which I fully deserved because who Daniel (16:57) Yeah, that's the name I found really funny. Because I am gooey too. Dave (17:20) you know, flips their proverbial liquid glass, messing their UI up and then decides, right, that's it. I'm going to go and make my own UI then like, yeah. And that's a fair, a fair inquiry, but where I'm at at the moment, cause I really wanted to pull this thread, right? This is absolute dopamine for me and just, you know, I'm having living my best life, having fun. I have. I did a proof of concept with the IAM GUI and I managed to get a canvas loading in the app, in a test app. That involves setting up like a build system to build the C++ library, turn it into an XE framework, then pull that through into a ⁓ Swift package that then sits on top of it. And what I did with that is I started the beginnings of my SwiftUI-like DSL. And I got that to ⁓ a kind of working stage, but underneath everything was still sort of quite class-based, and it wasn't very composable, which of course, if you're doing a SwiftUI-like thing, it's going to be, you want it to be composable. You want to wrap things inside of other things and add modifiers and all of those sort of things. And what I found was as I started to extend out that way, the limitation of the GUI that I was using sort of became apparent. Like, it's great for what it's used for, which is debug menus in games, and sometimes actual menus in games and other controls. And some people do use it for full on app apps as well on desktop. ⁓ But I was going to have to override an awful lot of default behavior to really get it to behave in this flexible way that I wanted because it's widget based. And everything sort of sits around its own internal thing. And then somewhere along the way it hit me, well, Jetpack Compose, it used to be Flutter as well, but Flutter is using something different now. ⁓ Along with Google Chrome. and a bunch of other things sit on top of this library called Skia. And as I understand it, what Daniel (19:43) Which is, ⁓ by the way, what I eat most mornings instead of yogurt. Dave (19:48) Okay, yep, I do not know what that is, Daniel, as a food. Daniel (19:52) There's a, there's a Nordish Nordic, type of yogurt called skir skir. Sorry. ⁓ Dave (19:58) Okay, fair. Things you learn. ⁓ No, so Skia, ⁓ I guess to give a very brief explanation of it, it drives the drawing on the GPU and it has a whole load of nice commands and a rendering system, but it's C++ based. So again, I'm in that territory of I've got that wrapped as a Daniel (20:17) Mm-hmm. Dave (20:27) into a framework, well wrapped as a library that's pulled into a Xe framework, and I now have my DSL on top of that. And the way this has sort of started to come together is I've focused on, right, I want to display some text on the screen. OK, I've now got a text object. I want to be able to lay them out on the screen. So now I want to vstack. and by the way, let's make that into an H stack as well. ⁓ And so on and so on. So I've now got V stacks, H stacks and Z stacks. ⁓ I've got a scroll view, took ages to nail down. ⁓ I've got buttons, I've got conditionals. So you can do like, if this value is that, then don't display this thing or this thing. And I've even got a system where it's not quite bindings, but it works like bindings. So I can have state in the view that persists ⁓ beyond that single view's render. ⁓ Daniel (21:43) How does that, how, can you give like a super high level, like just three sentence over you? I wouldn't even know how to build such a thing. How would you build such a thing? Bindings. Dave (21:54) Well, how would I build such a thing? Yeah, so it's a property wrapper. It underneath breaks out into a getter and a setter. And then what happens is that it's also got a, at the moment, like a singleton-based registry system. The views themselves have IDs. And when that property wrapper gets engaged, it then works with the singleton to say, hey, do we already have something associated for this particular thing relating to this view? If so, then we'll pull it out of the cache. We've now got this there. when something operates on it, like a slider or a toggle ⁓ switch, Technically they have a callback mechanism underneath for executing that gets pulled into the state wrapper and associated with that cached value. And so that then has the effect of the toggle, for example, calls its callback to switch a bound value that it's been given. That then updates the value back in the cache and then when the view gets rendered, it gets the new value. So you'll see the view change based on that. And then there's a whole other system of. Daniel (23:20) Also, not it's not publish subscribe as in like the the value will then push out so like the view gets because the view gets re-rendered every like every frame. Dave (23:25) No, no. That's right. It doesn't need to be. ⁓ And so this is where it's then starting to become the thing that I am that makes it different. ⁓ So why do I want this? I want this because I want my UI to be very, very responsive, as close to real time as possible for, ⁓ you know, swipes and slider changes and that sort of thing, because it's going to drive real time video effects and potentially audio as well. ⁓ so yeah, I'm then able to cut some of the observability and reactive side out and use kind of older mechanisms in some ways. but what I'm doing is I'm wrapping them up with synthetic sugar so that as I'm writing the view, it kind of looks like SwiftUI and I feel like I'm in my happy spot because I don't want to have to define callbacks in every single view. I don't want to have, ⁓ Daniel (24:21) Awesome. Dave (24:27) get a set of logic that I'm constantly having to type out or whatever. ⁓ And I actually want, I've got a whole other thing where this can be abstracted into a view model that buys into the same system. ⁓ And you can send the dollar sign property of a view model into a thing in the view. It behaves as you would expect. ⁓ But that then means I can have my view models work a lot more typically. where they can work with async, await, background actors and that sort of thing as necessary, but then update the values back to the properties and the view will then respond. So if I do need something that takes a bit of time, it lives in the view model. And I get all of that there. ⁓ But then if it's something that needs to be instant, like changing the parameter on a video effect, it can shoot straight into the video pipeline. ⁓ you know, within that same render or millisecond or however you want to put it. It's tick-based underneath basically. ⁓ Yeah. Daniel (25:33) Nice. Tick. But is it like smart about it? Like does it rerender every single pixel regardless of if it needs rerender or not? is it like smart? Dave (25:44) At the moment, that's what I'm working through. So you end up in a position of you can and you probably should in a pure, pure like immediate mode, like absolutely by the book. It's like it's rendering everything. And so when you change some value, it's just a function and it's getting called on the render cycle. But I'm in this sort of hybrid world, right? Because I don't want to do that fully because it's going to thrash the heck out of the battery. ⁓ Daniel (25:47) Uh-huh. Yeah, that's what I was suspecting. Dave (26:13) And I don't, most of my apps, if you were performing with them, you would be plugged in, but I don't want to rely on that. And, you know, people are just going to noodle on their phones and you know, that's normal. Daniel (26:26) Also, you want to keep as much performance as possible for the actual things, for the actual effects and stuff. Dave (26:32) Exactly. Exactly. Yes. So the moment my render times are very quick, but my calculation time for everything on the screen is something I need to optimize. So where I'm going right now is having a concept of, sounds really silly, but it gets referred to as like dirty. So you flag a, a region or a view or something that's changed is now needing to be updated. It's dirty. Daniel (26:55) Mm-hmm. Dave (27:01) And then that will recalculate and potentially escalate up and down the scene graph, depending on what has changed. So if you imagine you've got, you know, a view has suddenly got bigger inside of its parents and now other things need to push. It will be able to sensibly go up and again, mark those things as dirty as it calculates out and up and re-render those. And what I'm exploring is can I also then, rather than just not re-rendering to keep stuff left alone, can I engage with a caching system with Skia that is performance and is optimized already and link everything through to that so that I kind of don't need to care about how it works under the hood because other people cleverer than I are dealing with that and then that handles all of that. ⁓ But can I use that for my system to sit on top of? Daniel (27:58) Right. Sounds Dave (27:59) Yeah. So, yeah. Daniel (27:59) pretty cool. Have you reached the part where you decide to build a shadow scene graph yet? Dave (28:06) Yes. Yes, I have. ⁓ And I've got seen identities and all of those sort of things. And actually what I'm exploring at the moment is how much of that do I really need? ⁓ Is there a route through the sort of optimization that I'm trying to do where I don't have to retain too much? ⁓ And also how do I keep things separate? I don't want to be using singletons for everything. So I have to have a concept. Daniel (28:06) Cool. Dave (28:34) context that's being given to things that it's running in so that I can have ⁓ separate contexts if I want to the, you know, running. Cause for example, I may want at some point there could be a world where I want to wrap this inside of something in Swift UI even and have a normal app around it. I doubt it. Cause I'm kind of going all out to just be one thing. ⁓ And also I've got to make sure of, ⁓ of other things like ⁓ my full screen video out is going to be part of the same system to some degree. But it shouldn't be affected by changes going on on the device in any way. It should be just left to render as it is. But that could be another optimization. That could be taking the mixed outputs and just rendering entirely to a full screen thing. And it sits outside of the DSL even if that's more optimal. So these are sort of choices I'm getting like, I'm not there yet, but I'm like, what I'm trying to do, Daniel is sort of grind through some of the basics and get the bits of Lego working. it looks, it looks like something that I want to write in. ⁓ And then I'm kind of grinding off bit by bit, some of the, optimizations. ⁓ And yeah, I'm trying not to get too deep into ⁓ Daniel (29:35) That's right. Mm-hmm. Dave (30:05) Right, OK, now I've got to build an app with it. At this stage, am I building it so that I can make an app with it? ⁓ There'll come a point where I've sort of reached like, OK, I need to jump off LEGO brick mode and start plugging stuff together more. I mean, I've got a test app ⁓ that has all these different scenes and things in it. ⁓ But that's not there yet. That's like, If I reach that point by Christmas, I'll be happy. I'm expecting to have a few go-rounds of some of these deeper concepts along the way. But we'll see. mean, like you say, it's leapt along in the last few weeks. Yes, I'm using Claude to help me along the way. That has probably helped quite a bit, actually. So. Daniel (30:40) Mm-hmm. Dave (30:54) Yeah, because if nothing else, I've been able to describe what I'm trying to do. And then it's, I've then used their AI tooling to go and research it for me, compare it to Swift UI, compare it to Jetpack Compose. And that's how I'm picking up some of these concepts, sort of firsthand, if you like, or first time around. Cause I knew roughly where I wanted to head, but I didn't have the depth of Daniel (31:17) Mm-hmm. Dave (31:23) domain knowledge. So I'm kind of using the AI tooling to help me gain some of that as I kind of iterate out. ⁓ Daniel (31:33) Yeah, makes a lot of sense. this and this will be able to run on both or on different platforms? Correct. Dave (31:40) Eventually that's the hope. Yeah. So I have deliberately held off from installing the Android Swift runtime and try and see if I can do it because I know that it's going to have paper cuts and edges and then I've not even got the DSL finished yet. So I'm kind of, let's get this working to a stage I'm happy with. Meanwhile, I can see on the, ⁓ the Git repository and everything for all of that. people are working through various small issues and got some bobs with it. So I sort of feel like give it another month or two and it will probably be the optimum time for me to go. Okay, let's give this a shot. ⁓ But in theory, the way I've got it abstracted out, I should be in a position to compile Skia in a very similar way. Daniel (32:12) Mm-hmm. Dave (32:35) call it from my DSL. And then the next bit of work will be fixing whatever breaks in the library I've built, because there'll be things that aren't supported, I'm sure, or don't work quite so well. And wiring it up through the JNI and probably through a compose view that then gives it the canvas to draw inside of. Daniel (32:44) you Dave (33:05) And obviously I'll have to wire up touch events and things like that. Yeah. and I've got to do all sorts, Daniel, there's so much on the way. Like, do I want animations? Of course I do. Do I want some form of sheets? ⁓ potentially yes, or at least a value that's being updated over time that's getting, ⁓ that's, that's refreshed, you know? So. Daniel (33:17) then you need a shadow graph. Mm-hmm. Dave (33:33) There might be other mechanisms for that. Yeah, like, you know, if something has a dirty flag or animation is running flag against it, then of course it's going to get rendered and then it will just pull the latest value of where the animation is to change how it's moving. Again, I'm picking this up as I go. So I'll tell you in another month or two. Yeah. Daniel (33:51) Mm-hmm. fair. Dave (34:02) ⁓ And I don't want everything to look just like SwiftUI and iOS, right? I'm building this to be a framework for real-time video mixing software, for audio related software. It's going to look closer to a virtual synth in terms of UI eventually. I mean, it doesn't right now because I'm kind of the easiest way for me to visualize the problem and go through this is to say Daniel (34:24) Mm-hmm. Dave (34:31) Let's make a toggle button. What do I want to look what it wants it to look like? Well, I want it to look like iOS is toggle button. Okay, cool. And then I can kind of build this knowledge up before I'm then in right. Okay. How do I now use this tool to make it look more skim or thick to look more like what you would expect for, you know, sliders that look like, um, audio real life hardware, audio mixer, sliders, for example, with the bars on them and a Daniel (34:52) Mm-hmm. Dave (35:01) a groove or maybe an inset. That's going to be its own rabbit hole. So I'm sort of putting that again down after ⁓ seeing if I can make it run on Android. Then I go out on how do I then make this look the flavor I want. Daniel (35:18) That sounds fair. Yeah. Dave (35:18) So yeah, and I want it to run on Windows if possible eventually as well. So I'm keeping an eye on how viable that is. And there's Linux, but I don't see Linux as being a big market for what I want to do. Like I think it will be a market, but Windows, ⁓ Mac and iOS and Android. Daniel (35:41) Mm-hmm. Dave (35:48) I think I can be satisfied with that. yeah. Anyways, yeah. ⁓ Daniel (35:52) Yeah. Hmm. Dave (35:59) It's been a journey though, dude. Daniel (36:01) It's an exciting... It's gonna be an exciting journey. I'm kinda like, ⁓ this is cooler than I thought it would be. I need to roast you more often is what I'm thinking. Dave (36:10) ⁓ you do. You absolutely do. There was definitely that motivation for, I'll show Daniel, you know. Daniel (36:17) Because yeah, you what you're doing right now is spite based development, which is the best kind of development. Dave (36:23) ⁓ No, no, I mean, I said to you at the time I wanted to do it because I really wanted to do it. You know, like it's not a sensible indie software house decision in some ways. But also it's not sensible for most types of apps. Right. If you're building a to-do list app or a fitness tracker or whatever, you should just live in the native frameworks. There's no point. Daniel (36:43) Mm-hmm. Dave (36:53) in doing something like this. ⁓ But if you look at, at least within desktop software especially, ⁓ how some of these sort of applications, in the sense of what I like to build, work, a lot of them are using ⁓ stuff that is close to this or they have their own version of it. ⁓ Because then, yeah, you've got this much more real time. kind of way of working. And you've also got something that is a little bit more sheltered from the changes of the platform as well. ⁓ Like Ableton has pretty much looked the same give or take tweaks and progressions for like 20 years nearly now, you know? Yeah. So I guess that's the world I'm heading towards in one way or another, maybe. Yeah. Daniel (37:49) Nice. Yeah, I'm actually looking forward to that. I wonder if this is going to be like how this is going to be shaping out once it's like a bit further. yeah, going to be exciting. Dave (38:00) Yeah. Well, will gladly share. honestly, if I hit a brick wall with it ⁓ and it's looking like this is just a Sisyphean effort or something, and I have to stop, then at least I'll have learned a whole bunch of stuff about how these types of things work. mean, it's really illuminating sort of my understanding of SwiftUI as well. Daniel (38:13) Mm-hmm. Dave (38:26) as I sort of prod and poke and go, how does SwiftUI even do these sort of things? ⁓ And it's just a bit I've never really considered before. So, yeah, it's kind of fun. ⁓ But anyway, I am a nerd, Daniel. This is me nerding out. ⁓ Daniel (38:36) Yeah. Do nerd out, please. Dave (38:53) ⁓ but yeah. Daniel (38:54) Yeah, because I think that this is also what gives you a lot of fulfillment, know, like, actually, one, nerding out and B, like also deciding to nerd out because you want to nerd out about it. So, yeah. Dave (39:08) Yeah, yeah, yeah. And that's applying to the project, right? Like it's, you know, this is a, like I say, an endeavor for me to scratch the itch if you like, and do my own thing with it. But it's also kind of like resolving some of my, ⁓ I want to say not animosity, but like misgivings with certain things with Apple to some degree. Like, hey, What have I discovered this year? ⁓ I tried doing other forms of cross platform dev discovered that I really loved Swift. I missed it. Yeah. But regardless of where anything is that with Apple, the corporation or whatever, I actually like Xcode and I like Swift a lot. ⁓ And to the side of that, I also like Daniel (39:46) Mm-hmm. Dave (40:02) Certainly the idea, I'm not there yet, but the idea of not being reliant on one company completely for everything I build. So I'm glad Swift is open source. I'm glad there's a Swift Lang group. And yeah, if there's a route here to ⁓ eventually go VJ on Android, then I'll be really, really stoked because yeah. Daniel (40:28) I wish I could build my user interface in Swift. I miss it so much. I sent you a message the other day too, where I was like, ⁓ I have to write HTML and JavaScript and CSS. And it looks nice in the end and stuff like that, but it feels like building a sandcastle on the beach. And every now and then, the waves come in and it's just gone. Dave (40:43) Yep. Yeah. Daniel (40:58) Like you think like, this tower would be cool on the other side of my castle. Well, you can't just grab it and put it over there because like everything will fall apart. I don't know. This is a bad analogy. Web developers are hard people, like really strong people is what I'm saying. Dave (41:06) Yes. It's not though, because it's like... They are, it's a very fluid and interesting stack, I think. But to extend your analogy for me, feels like, because I don't do web development, so every time I come back to it after months, years or whatever for something, ⁓ it feels like, ⁓ people don't use this bucket anymore, they use this other bucket. And by the way, we're building on this side of the beach, not that side of the beach now. Daniel (41:48) Yes, what was something that is happening that is pretty cool is every two months or so I discover that another thing that used to be an abstraction kind of clumsily built in in weird CSS hacks is now an actual browser feature that is already being supported by enough browsers that you can use it like Dave (41:48) Yeah. Daniel (42:13) ⁓ overlays, for example, like anything that's a modal dialect or a context menu can now be like, okay, this is an overlay, belongs, it's anchored to this element, it can be animated in. so yeah, that's nice. Dave (42:13) Yes. I love that. That is one thing I do love about it is that over time it's just, keeps adding more and more. So I like, I certainly don't want to put web development down in any way. Cause you know, it's, it's kind of amazing as well though, the web page from 30 years ago, 20 years ago displays just as well, pretty much now if it's using HTML, you know, And yeah, I'm sure there's facets I could be wrong on, but I would assume as well a webpage with pure HTML and CSS from 10 years ago should still display pretty much the same now. Yeah. And that, that, blows me away a bit because it's cool. Daniel (43:14) But still, there could be various tiny things that would make my life a Dave (43:20) That kid. And I'm sorry, dude, I suggested to you in that moment you should have a DSL of some sorts and maybe there's some stuff that exists. Daniel (43:29) Hahaha Though there are DSLs and everything, putting more abstractions on that huge stack of abstractions is actually not the answer, I think. Dave (43:41) No, it's not because whatever it writes out to underneath this is still going to need maintenance and require you to know that bit. yeah, if you've got a templating system it's calling or whatever, you still need to have that. So yeah. Daniel (43:58) ⁓ you know, like 10 second fun story from Web Design Land. Apple released an app store version for the web. So there's a website where you can browse the app store. And fun thing about it, they have maybe accidentally included what is called the source maps. So when you deliver JavaScript and... Dave (44:11) Okay. Mm-hmm. Daniel (44:25) like HTML to like as an application, you usually usually minify it like kind of obfuscate it's not obfuscated, but like minified as like all the variables are just like single names, like all the spaces are removed stuff like that. Dave (44:30) Yeah. Yeah. Yes. It's almost like compiling to object code or something. It's, but yeah. Yes. Daniel (44:40) Right, because that's just more like faster to download and everything is one file, stuff like that. But then what you can also do, you can deliver additionally to your browsers in development, you can just deliver a source map, which is a JSON file that kind of allows you to decompile the thing and view the original source code. And Apple has with their app store for the web actually like delivering or has delivered until recently the source maps to ⁓ end users. in production, which is something most people don't do. Like some people are like, Apple made a huge mistake. Ha ha ha, look at them. And I think it's actually not, maybe it was even on purpose. I don't know, but like even if it's not, whatever. And so people are like, Apple is leaking their whole source code. Ha ha ha ha. And I'm like, yes, the source code is always there. But on the other hand, it is interesting for a quick second, someone even like mirrored the source code on Google, on GitHub before it got taken down. Dave (45:11) No. ⁓ Yeah, yeah. Yeah. Mm-hmm. Daniel (45:37) But it is interesting that ⁓ what Apple is doing with the web stacks and stuff like that. So yeah, that's a tiny story from Apple and web development. Dave (45:37) Right. Yeah. If I did more web development, I'd definitely be curious to find it and have a look. Yeah. But Daniel, we probably are at time really today. The end is nigh. Daniel (45:57) rights. We're at the end. But we need to re-add chores to the outro. I forgot the chores the last few days. thanks for listening. Your chore this week is clean yourself up. Like do one thing that really needs to be done. not only when you brush your teeth, maybe also like ⁓ floss them. Dave (46:11) Go for it. You did. You Daniel (46:31) you do your hair, maybe also add in some product that makes your hair extra nice. Do something for yourself, make yourself look pretty because you are pretty and lovely and wonderful. Thanks for listening. Please rate us on iTunes and YouTube. Send us emails at contact at waitingforreview.com and also send us listener feedback to the email address actually. Also join our Discord. The link is in the show notes. Dave, where can people find you? Dave (46:56) Well, mentioned I'm more active on Mastodon again. So, yeah, I am Mastodon.social slash at light beam insight. I will link that in the show notes to make it clickable and easy. How about yourself? Daniel (47:13) Find me at daniel at social dot telemetry deck dot com which is still running still good and still my main source of online in online entertainment so thank you mastodon that's it on Dave (47:24) Awesome. Well, I'm going to figure out what my chore is. think looking at the state of me on camera, I'm probably going to cut my hair. ⁓ Daniel (47:37) I need to shave and re-dye my beard, I think. Dave (47:41) Well, I'll send you a photo if I do. Yes. Daniel (47:43) Find out next week or in two weeks if I actually made it. Dave (47:47) ⁓ We'll be right. Take care, Daniel. Daniel (47:51) Bye! Dave (47:52) Bye.