Daniel (00:01.882) And we are live. Fantastic. Dave, it's so good to see you. How are you? Dave (00:06.626) I'm good mate, how are you? Daniel (00:08.594) I am furious. I'm also good, but I'm furious because I'm getting back into sim racing a lot more. And so today was the first day of the Formula One season. There was the testing thing that was on all day. So every day, the whole day I was working while the TV was just on mute, but showing the testing, which was actually kind of frustrating because my guy was very far behind and the other guy's car is way better, but whatever. And so I kind of was like, OK, I got two hours left. Dave (00:17.474) Mm-hmm. Daniel (00:38.45) until we recorded the podcast, I'm going to fire up the PlayStation, put the seat with the wheel in front of it and just have a few online races. And I was really good at qualifying. I qualified six places, really, really good for me. And I was so proud of myself. And then I started a race. You kind of enter a lobby and then you kind of wait for five to 10 minutes until everything works and then you kind of start the race. And the very first corner. Dave (00:45.794) Mm-hmm. Yep. Daniel (01:05.674) Like just some shameful ramers just took me out. Like because they were like, oh yeah, there's a, someone is in the corner already. I'm just going to like barrel. I got it. Just going to send it full straight into their side. So I'm like, okay, that's very, very nice. And you kind of very much motivated not to cancel the races or not to quit out of the races, um, because that will actually tank your ratings. Um, and so I was like, okay, now I'm last. So I'm going to continue working my way back up to, I don't know. Dave (01:18.884) Oof. Dave (01:23.835) Yeah. Dave (01:32.505) Oh no. Daniel (01:34.446) 10th, 12th, something like that. And then I'm fighting with some other guy and he's just like, oh, hmm, is there somewhere around B? I don't have eyes. It just yanks me off again. So I quit. I finished that race way back, re-qualifying at a super cool qualifying, wait another 10 minutes to enter the next race, have another race, and shameful ramers, another one did this time. I started four races. In between the races, I have to wait 10 minutes. And every time in the first one or two corners, someone rams me off the track, which is Gran Turismo, which is kind of par for the course, because I'm not in the really high levels where people can actually drive, but today was extra frustrating. And yeah. Dave (02:09.322) What came of this again? This is... okay. Dave (02:23.362) Is it kind of one of the goals? You've got to forgive me, Daniel. I'm really clueless with a lot of games and a lot of racing games, but like is ramming people off the road one of the goals of the game? Or is it just a thing that can happen if you're a bad driver? Daniel (02:28.916) Uh huh. Daniel (02:33.674) No, no. I mean, depends on the game of course, but in this game it tries to be very much about sportsmanship and actually try to replicate real racing situations as closely as possible. So you are very much motivated to not ram each other to give each other space. You even get time penalties if you do not, because always you have to give the space. So if you do not give the space, then kind of get time penalties, stuff like that. But yeah, I mean, if you are like maybe younger or if you are not as experienced and then you kind of misjudge your breaking point and you just like steaming, steaming to someone, I mean, it happens. I was just so frustrated. Dave (03:02.71) Gotcha. Yeah. Dave (03:12.713) Mm-hmm. Dave (03:19.335) Okay, so this is not, it's not like asphalt or something where part of the part of the game has got that mechanic where you're ramming through people. Daniel (03:22.592) No, no. Not that one. You even have like these ratings. You have two ratings, you have driver rating that gets up every time you finish in the top half of the grid and goes down every time you finish in the lower half. So I'm on, they are like E, D, B, E, D, C, B, A, or whatever, A is the best, E is the worst. I'm in D, so that gives you an idea of where I am. Not near the top. And there's also. Dave (03:29.375) Yeah. Dave (03:42.091) Mm-hmm. Dave (03:46.09) Oh. Dave (03:50.294) Would you have been in sea if it wasn't for those pesky ramas? Daniel (03:53.87) probably the shameful. But there's also safety ratings. So every time you ram someone, your safety rating goes down. And I have the best safety rating because I am apparently I'm not fast, but I'm safe. Which I don't know. Yeah, it's still fun. But today I was so frustrated. Dave (03:56.628) Hahaha Dave (04:07.817) uh, siphon my innit. Dave (04:15.422) Hehehe So the F1 qualifiers were kind of frustrating because your guy was further back and then you hit that. What have you... Well, one second. The show is not the show without the introduction, Daniel, and I'm about to talk code. So I feel like I need to pass the mic to you to introduce us. Daniel (04:23.073) Yeah. Daniel (04:36.054) Uh-huh. Daniel (04:39.526) All right, I'm grabbing the mic and I'm saying, hey, welcome to Waiting for Review, a show about the majestic indie developer lifestyle. Join our scintillating hosts, Dave and Daniel, and let's hear about a tiny slice of their thrilling lives. Join us while waiting for a review. Dave, you gotta save my day now because yeah, you're right. Like I am, like both of these things were not very, were a bit frustrating. So now it's all on you to make me happy basically. Dave (05:02.646) Hehehe Dave (05:09.95) Oh, I'm not sure I can achieve that. I was going to ask you what you were working on while you were looking, while this was going on in the background. Daniel (05:16.574) All right. Yeah, that's actually something that made me happy, too. So the big picture is I have been working a lot on reworking telemetry-dex rights and permissions system. And I have mostly finished the API and server work on that. So all the Swift code is written. But I wanted to make extra sure that Dave (05:19.654) Okay, so what was it? Dave (05:38.828) Mm-hmm. Daniel (05:43.03) that stuff just works and especially for rights and permissions, like you want to have a lot of tests and the really, really double and triple check that everything is exactly as you wanted to be like to double check your assumptions and everything. And so, especially for various APIs, you have in the right system, you have, of course, like different, different access levels and for telemetry deck, what I, what I've stuck on is, uh, you have. Dave (05:50.027) Yeah. Dave (05:58.434) Mm-hmm. Daniel (06:13.282) One access level that regards, that is about the organization itself. So if you're, if you can, if you are a admin of the admin of the organization, you can add and change the billing and delete all the apps and stuff like that. And like edit users or at least invite or kick users, stuff like that. But if you are, and then you can also have rights regarding and like all the apps in the, in your organization. So even if you're not an admin, You might have all the rights for managing and deleting apps, editing apps, or whatever, or you might just have read access where you can just read the app, like look at the data, but not change any of the insights and stuff like that. And then you have a third thing, which is a specific permission for a specific app that overrides kind of the universal setting where I can say stuff like, oh yeah, Dave has read rights on all the apps, but he gets a specific administration rights for... Dave (06:52.638) Yep. Daniel (07:12.19) a specific app. And so these are like three inputs. And depending on like, and if I combine these three, like I have a specific, I can kind of tell you like what, how the API should answer, right? So if you have, I don't know, like organization admin rights, but like, like universal app rights is like zero and then, but you have a specific right or whatever, then this API endpoint should either allow something or disallow something. Dave (07:14.005) Okay. Dave (07:27.618) Mm-hmm. Dave (07:42.102) Yep. Daniel (07:44.062) But, so I want to test that, but like there's a huge amount of permutations. It's like, I don't even know how many permutations that is. And I kind of started with, oh yeah, I'm just going to write a test, one test, and then I just like have a huge array. And then I'm just going to loop through the array and then like that will tell me the inputs and the expected outputs. And then I'm just going to double check with an XCT test equals, or what's that? I don't know. And then we'll look. Dave (08:08.94) Yep. assert. Daniel (08:14.018) But it turns out that this does work, but it will only give you like, oh, this test is failing. It will not even tell you like which part of the loop was failing. And so I was like, oh, this is actually a bit frustrating, right? And what I really, really want is something like GitHub test matrices. I don't know if you are familiar with that, like GitHub actions. Dave (08:25.671) Oh no. Yeah. Dave (08:39.522) Hmm. Daniel (08:40.942) You can give GitHub Actions various parameters and you can define those directly in the, I don't know, the action, the workflow file. And for example, I can say like operating systems are, and then open an array and I say like Mac OS, Linux, Windows or whatever. And then it can also say like Python versions are maybe, I don't know, what are some Python versions, five, six, seven. And then I can say like, okay, in this. Dave (09:04.325) Yeah. Daniel (09:09.806) part of the commands, insert the operating system, and in this part of the commands, insert the Python version, and then open a matrix where it tries all the combinations of these two lists. And that's exactly what I want in this regard. I have all these combinations of inputs and outputs, and I want each of them to be tested individually as a separate test with a separate green checkmark, or red X in that case. Dave (09:21.438) I understand, yep. Yep. Dave (09:37.834) Mm-hmm. Yeah. Daniel (09:40.098) Um, it took me a while and I asked around on Mestle on a little bit and I found something that's actually pretty perfect, which is a Swift macro. I will do exactly that. That will encase like you write you write one test function and then you will encase it in the Swift macro and it will generate around in my case around 120 tests. Dave (09:56.482) Mm-hmm. Daniel (10:02.178) Um, and that is fantastic. It works really well. It, it shows up correctly in the test navigator and the naming of the. Right. Because first I was like experimenting with, because the, the documentation for XC test case says you can create an XC test case programmatically. So I was like, can I do that? Because I, that's exactly what I do. Or what I want to do, right? Create tests programmatically. But. Dave (10:02.974) Okay. Dave (10:09.802) because it's all code, right? It's all there as, yeah. Dave (10:25.588) Yes. Dave (10:28.866) Mm-hmm. Daniel (10:31.298) Test cases like the whole container that the test lives in and it is like the documentation Was not very helpful. I want to say Dave (10:40.795) I can imagine you'd end up with just the one test that's wrapped around the thing and then your loops are internal to that and they're just they're just failures right Daniel (10:48.826) I couldn't get it to work at all. The documentation just says, hey, you can use this to create tests. But it was very clear from the whole thing that this was a hook that is provided for Xcode to hook into. So I was like, OK, I fooled around with that a little bit, but that didn't work. And then someone on Masterland sent me this. It's called XC. Dave (11:04.882) Right, okay. Daniel (11:17.454) test parameterized macro. I'm going to pop this into the show notes right now. Dave (11:21.947) Yeah, please do. I'll never remember that. Daniel (11:25.598) And that is it just works like I had to update my Swift version or my minimum Swift version to 5.9, which is totally fine. I didn't have anything that changed basically. Oh, by the way, I need to, at some point I need to try the Swift six preview mode with concurrency and see if everything works. I'm kind of afraid of that. And yeah, I have like 120 tests that come from three lines of code basically. Dave (11:33.218) Mm-hmm. Yeah. Dave (11:44.199) Mmm, yeah me too. Yep. Daniel (11:53.314) And I can tell you that at least this part of the API is working. And actually, as of today, all my tests are in green. Um, I cleaned up a lot of the API code and I am now switching to the web front end. And now I have to write against that API so far it seems to be working. So I'm actually, oh, I'm, I'm really hoping that this will see the light of day at some point, like, uh, I'm. Dave (11:53.442) That's beautiful. Dave (12:09.46) Nice. Dave (12:14.914) That's beautiful. Daniel (12:22.862) trying to be very careful not to make this a whole rewrite where I'm like, oh yeah, just like, oh yeah, this is also old. You know, like when you cleaning stuff and then you're like, oh yeah, but this is also dirty. I could also clean that. And then at the end, if you're not careful, you end up with your whole room full of stuff, like just pushed into the middle of the room. So you can access the dirty areas and nothing is like, don't make that mistake with your refactorings. Try to be as small and specific as Dave (12:29.638) Yeah. Yes. Dave (12:44.875) Yeah. Dave (12:48.354) That's too easy, right? Daniel (12:52.574) ever you can. That's really, really important. Dave (12:55.762) No, that makes sense. That makes sense. And yeah, if you can keep stuff kind of almost modularized, right? In that mode, that's the bit that's getting cleaned. Hopefully, if you've got the layout design pattern architecture of your app right, then that's easy enough to sort of do. You know, like that's a, how can I say? Yeah, if you've broken things out, if you've decoupled things in a sensible sort of way, then you can do that. If you've not, it's very much like you've said, everything ends up pulled out, you've got to clean the whole lot before you can get anything done. And it feels like when you've gone, okay, I just want to clean that one thing, you make a clean spot, you know, and then it ends up like that. Yeah, it's the metaphor I've used it's like you've got your suit on to go to a wedding and somebody comes up and goes oh you've got a thread you know so you pull that thread and before you know it the entire suit has sort of started to unravel and it's just like oh my god what have i done you know and then you've got to you've either got to lean into it and effectively get an entirely new suit before you can do anything or you know like say you should be more restrained in the thread pulling don't pull it too hard Daniel (14:01.654) Ha ha ha! Daniel (14:21.906) Yeah, yeah. I mean, it's always a problem with writing APIs in Swift that sometimes if your models change, it's very hard to keep the old APIs around. I kind of managed because I actually made some smart decisions in the beginning, which I didn't realize were smart decisions, but they kind of were, which were that I have very, what's the word? Like very agnostic methods for Dave (14:24.001) Yeah. Dave (14:33.352) Yeah. Daniel (14:50.814) authentication. And so that basically every API function just is like wrapped or knows, knows like what, what is its access level. And then all the code that checks whether this is okay, and then refuses the connection if it's not or whatever is outside of the outside of their function. So most of the, for almost all old APIs, especially, I didn't have to rewrite almost anything, but I still did have to re like, like rewrite the registration. Dave (15:00.546) Mm-hmm. Dave (15:14.08) Yep. Daniel (15:18.122) API basically, and I just threw the V1 out because you're only ever gonna register for Telemetry Deck using the official, as of right now at least, using the official web front end, the iOS app, even though it's still half broken, that doesn't have registration, it's just a viewer. So it should be fine, I think. I mean, yeah, right now I don't have the luxury of worrying too much about the iOS app. Dave (15:21.631) Right. Dave (15:31.197) Yep. Dave (15:37.942) Yes. Dave (15:48.907) That's fair. We've talked about that before, but the web front end is your baby, the main thing that everybody is using with this. I know a lot of people do like the iOS app for. Daniel (16:00.474) I'm gonna make it a bit more mobile friendly though. Actually, a buddy of mine, Jihad, has already started working on a little bit of a few PRs for just making the whole thing a bit more nice on mobile because it's very bare bones. And that's also pretty cool. So look forward to that in the next few days to be released. Dave (16:19.195) Okay. Dave (16:25.182) Nice. Does that mean I can add it to my home screen as a PWA? Daniel (16:29.582) Oh, no, we're not that far. I mean, that should work right now, because I did the whole PWA thing for the desktop, right? I haven't tried it out, but that should work, at least for now. Like with the next iOS version, it won't work anymore. Have you heard that? We talked a lot about the DMA, right? Right, for me, it won't. That is like atrociously bad. Like I have, I have literally right now, I have like four web apps on my springboard. Dave (16:33.666) Okay. Yeah. Dave (16:44.667) For me it will, for you it won't. Yes. Dave (16:56.726) Yeah. Daniel (16:57.542) And that's going to be so frustrating if those aren't available anymore. Because background info, we talked about a few weeks ago, a few episodes ago, we talked about the European Union's DMA, the General Digital Markets Act, which is forcing Apple into making a few concessions regarding app stores, regarding browsing engines, and so on. And apparently, one of the results of that, at least that's what Apple says, is that they will no longer be offering PWAs. Dave (17:19.009) Yes. Daniel (17:26.934) That is the things on your home screen that look like an app, but it's actually a website, but in its separate container. And apparently that's because they're supporting different browsing engines now. And PWAs have various levels of access that they are not willing to give to outside browsing engines. And since they need to be featured, they're just nuking the entire feature instead, which feels very petty to me. Dave (17:27.485) Mm-hmm. Dave (17:34.7) Yes. Dave (17:55.362) incredibly perky and I think that there's so many other ways they could have handled that really. Yeah. I can use your app when you can't on my home screen after this change. Daniel (17:56.721) Um... Daniel (18:00.338) Yeah. So yeah, you can you can probably use you can probably use telemetry deck as a PWA. Daniel (18:11.926) Yeah, yeah. So the first change that you had made was that right now the menu is always visible, even on mobile. And so you've got to scroll about four kilometers until you see the actual content. And so the first thing you did was a way of just like folding that in when you don't need it. Dave (18:28.81) Ha ha Dave (18:34.89) Right, nice. Oh, well, I look forward to seeing that. And yeah, I'm gonna appreciate still being able to add it to my home screen. Yeah. Daniel (18:45.302) Yeah, rub it in. I'm gonna I'm gonna download so many things from alternative app stores marketplaces Dave (18:51.614) I'm going to screenshot all my PWAs for you. Just send you that on iMessage, Daniel, next month after the update. Yeah, maybe not. Maybe not. Hopefully, Apple sort themselves out on that one, because it's definitely a bit of a, like I say, so many other ways they could play it, even if it's just a case of you can have them all the way up until the point you've got an alternative browser installed and then a big warning comes up saying these are going to be disabled, right? Daniel (18:58.67) Ugh, fine. Fine. Dave (19:21.034) That would suck, but at least there'd be an option there that goes, well, OK, if I'm just using Safari, I can keep on trucking. You know? But who knows? I'm sure they've gone over all the options and figured this is the one that gets Apple what they want, at least, as much as they can. But, uh. <> Dave Okay, so we had a bit of a technical difficulty in the middle of things there, and I'm trying to retrace my steps as to where I was in our conversation. Unfortunately, my mic feed cut out on us, so yeah, never mind. I think I was telling you about the fact that I'd been... Daniel (25:49.09) Duh duh. Dave (25:59.465) adapting the app, putting these new things in, right, the setting screen, the paywall, this, that, and the other. And each step of the way, I was sort of reaching these positions of, of like incremental it's getting there while at the same time having a pretty broken app. Right. And the bit I've been working on over the last couple of weeks, cause it's actually been two weeks since we last recorded the show, Daniel, but we were, we were an episode ahead, so we've been able to keep our weekly. Daniel (26:03.15) Mm. Dave (26:27.701) output, which has been cool. But yeah, over the last couple of weeks, I've been getting deeper into adding in the video engine. And that has been a bigger task. I turned a corner on that just a day or so ago, and the app now finally compiles, has new video engine in there. And I'm now rewiring up functionality like the effects. side of it where you can select different effects for the different video channels and that sort of thing. So at the moment the app looks like it always did. You can load content, you can press, you can play content, you can add videos, photos. When I've built it you'll be able to add a camera feed as well because that exists in the new video engine. And... Daniel (27:15.25) Oh, that's amazing though. Like the first goal of any refactor must be like, okay, now I'm back where I started, but the thing underneath works. Like, that is, I think that is like, that is a perfect goal because like, if you wanna like come out of the refactor and all the new stuff is already there, then it's way more likely that you're gonna fail. Dave (27:22.821) Yes. Dave (27:38.125) It's been fun to be able to get to this stage. The refactoring is not fun. The goal has been good to start to attain. Along the way, I got the theming through everything because part of what I've done is I've ripped out the old design pattern that I had, which was the router design pattern that I came up with two or three years ago now. Daniel (27:40.846) Ha ha! Dave (28:07.21) I've simplified down basically. I had a lot of MVVM, a lot of these routers which were glorified view models to control the navigation in the app. If you've loaded my app up it's actually pretty damn simple. It's a main dashboard screen with everything you can do. And then everything else of that is either this, there's a sort of tabbing mechanism at the bottom, but it's not really a tab view. It's just buttons to shift the state of the dashboard. And then everything else is a sheet, pretty much. So I've got no massively complicated navigation that really requires that sort of overhead. So I've gutted it. And that's meant a lot of like view models have been killed because as soon as a view model just becomes a set of published properties, I may as well have it as state in the view, right? It's like setting no value being a separate object that's being observed. And I've been using the environment for dependency injection rather than my old dependency injection wrapper that I built myself. So bit by bit, everything is becoming more simplified in the view layer. The routing of the data has become more SwiftUI for want of a better phrase, using the environment. And now I'm at the point of which, like I say, I've got theming. So I've been able to sort of make different accent colors and background colors and things for the app. So you can just go to the menu and just select whatever, which I was able to reuse some old code from the app for Mastodon that I built, Topiary. Dave (29:51.181) I was able to reuse some of its code for making that screen. So that was sort of knocked together really quick. And that was built before the Swift packages, but the Swift packages theming engine was based on what I built. So it was pretty easy to splice it together. I think. Daniel (30:07.746) Mm-hmm. Dave (30:15.153) All of this to say, yeah, I'm at a stage now where it's starting to feel like I've got over the middle of it. I feel like I've got probably another week, at least, of this sort of part-time development that I do. So it'll be that next weekend will be pretty heavy on the go VJ stakes for me and I'll be putting some hours into all of this and kicking it all through. I wrote a test plan for... Daniel (30:43.455) Ooh, getting professional here. Dave (30:44.421) Yeah, yeah, yeah. So, oh yeah, I've listed out, bordering on about eight or nine different key scenarios I wanna do that, you know, like upgrade the app. Does all your content come with it correctly? Do all your MIDI mappings, because that's the thing you can save in the app. Do they all transpose properly from the old to the new? They absolutely should. I've not changed anything about the encoding there. But things like that. Does every MIDI mapping still work correctly? Because I don't have any automated tests around that. I'm going to have to do that manually. That's fine. That's OK. Stuff like that. So I want to make sure it's working as robustly as it can be. And then I'll put it out to test fly. And let some other people kick it around. I'd love to say I'm two weeks away from doing the grand update of all this. I think it's more like, oh yeah, yeah. I think it's more like three or four at least, because I'm going to want to update screenshots and this that and the other. But Daniel, I'm going to call it version three. Daniel (31:42.754) You're always two weeks away from the grand update. Daniel (31:56.972) nice. Dave (31:57.185) If I get, especially if I get the camera import into that version, then I think it deserves me going from, from a big, you know, doing a big version update from two to three. Yeah. Daniel (32:00.928) Mm-hmm. Daniel (32:08.298) Yeah, totally. Fantastic. But this is still Govj, not Govj Pro, though. Dave (32:15.001) That's right, it's Go VJ Classic Original, whatever I want to call it. I've kind of not decided yet. Yeah. Some people still do some quite professional things with it. That's something else, Daniel, I wanted to say on the show. So about a week ago, I was like, oh my God, I'm fed up of all this yak shaving and weed whacking. Daniel (32:22.622) Yeah, go VJ amateur, obviously. Daniel (32:35.051) Uh huh. Dave (32:42.761) And I feel like I'm letting people down because before Christmas, so I stood up the Govj Pro website, asked people to sign up to be updated when I'm making progress on it, and the rest of it. I was like, what have I even got to tell these people? This feels like I've just been wasting my time on the old app, which is totally not true. This all feeds together in quite a lovely way. So one of the reasons I'm doing this is so that I can keep the two in lockstep. You know, I had something to warn the other can get updated and have the benefit. Um, but, uh, the other thing it's letting me do is it's letting me be sure that I've made the right architectural decisions with the video engine that will then work with the pro app. And I can, and by doing this uplift, I'm getting to kick it and testing sooner. Um, Daniel (33:33.01) Yeah, yeah, you can test the video engine, you can play around with it right now. And then if you find something, then you can fix it right now. That's really good. Dave (33:39.043) Yes. Dave (33:43.313) Yeah, yeah, so it gives me that sort of putting it through its paces kind of thing. But I thought about this and I was like, I felt very, very guilty about not having anything to tell and to show people. And then I thought, well, that's silly. I've got this mailing list now with like 250 or so people at least on it. Yeah. Daniel (34:03.654) Oh wow, last time we talked it was like 30 or something. Dave (34:07.565) Yeah, bear in mind I had an old mailing list, so it's the two combined together. They had about 200 people on it. So I've made about 40, 45 signups since the website a couple of months back. But I emailed everybody and said, look, this is what I've been up to. And I was able to take a screenshot of the app with a different theme and put that in the middle. Daniel (34:12.002) Alright. Daniel (34:33.675) Mm-hmm. Dave (34:34.969) and I really wish I had a screenshot to hand to show on the YouTube but I'll talk it through because people listening couldn't see that anyway but the theme is it is a vision Daniel to see um it's bright yellow as a background bright pink as an accent color it looks absolutely like tacky airs right Daniel (34:49.72) Hahaha Daniel (35:03.502) garish even. Dave (35:04.697) Garish, yes. And I did this. It was a Bob Ross moment while I was editing out that side of stuff, right, where I ended up loading in a system color that was just two tones. It was the white level and the white level. And there's another parameter that it receives to then give the opacity of that white level. and the two multiplied together will get you various shades of grey. Right, that's how like the system's secondary background, which is what I was loading through, is formed. And in my encoding for that, it was then getting shoved into the red and green parameters. And so I ended up with bright yellow. Whilst I had a pink accent, it was a happy accident. Daniel (35:50.506) Nice. It was a happy little accident. Fantastic. Dave (35:55.949) Yes, so I've saved this as one of the themes. Like, oh my god, that's gross, but I love it. So I'll keep it just to see. And I put it in the middle of this newsletter, right? Yeah, I put this picture of it in the middle of the newsletter, sort of saying, normally when you do these sort of bits of work, there's nothing to show. The app looks the same afterwards, right? In this case, I was able to add the theming engine and ta-da, here's a view of the app with one of the new themes. Daniel (36:00.59) .. Daniel (36:04.994) Oh my god that's gross a lot. Dave (36:24.301) Now, I know this won't be for everybody, but there's going to be some regular bright color on black sort of themes for the app. I'm. Daniel (36:34.856) Can people actually, where can people sign up for this newsletter? Because that sounds hilarious and you should write more of them. Dave (36:37.745) The easiest way to get on it at the moment is to go to the GovjPro website which is lightbmax.com slash GovjPro and you can sign up on there. Daniel (36:53.95) I'm gonna sign up right now. Dave (36:56.321) But yes, so anyway, I put that out and I've had a reaction from somebody already saying they love that theme. And I'm like, oh my god, okay. There's something for everybody. Daniel (36:59.799) Mm-hmm. Daniel (37:07.622) You should do the do you know the Windows 3.1? I'm trying my it here, but you Windows 3.1 had the had theming and one of the themes they had was the hot dog stand theme and Listener you should Google that basically is white and black and yellow and red if I remember correctly the colors of the German flag now that I think about it and it looks Horribly garish and still somehow weirdly fun Dave (37:21.174) Yes. Dave (37:28.879) I'm sorry. Dave (37:36.533) Yes, yes. I've called this theme on my side pineapple chunks because they're a yeah they're a candy in New Zealand. They're chocolate coated, slightly pineapple flavoured, sort of chewy lollies. Anyway yeah I've called it pineapple chunks in homage to a New Zealand thing but that will ship. Daniel (37:44.258) Oh yeah, I can see that. Daniel (37:50.776) Mm-hmm. Dave (38:04.533) along with a bunch of proper ones, quote unquote. And somebody's already excited for the idea of the pineapple theming in the app, which I wasn't expecting. Yeah. Daniel (38:14.382) Fantastic. I mean, come on, you're a DJ app. Of course, you've got to make a few weird options in there. Like, weird is just part of the job description. Dave (38:22.487) Oh yeah. Part of the fun. Yeah, and honestly, like I've done a couple of things where I've swapped out the blue accent color for this sort of bright pink, and that works really not well as well. Like I look at that and I'm like, yeah, I might leave it like that. That's kind of cool. I'm gonna do a green and a yellow and some other obvious sort of choices. Probably orange for the telemetry deck people. Daniel (38:35.746) Mm-hmm. Daniel (38:38.999) Nice. Daniel (38:49.532) I can give you the hex color if you like. Dave (38:51.645) Yeah, yeah, okay, I might actually do that. That should be quite legit. Daniel (38:55.567) I mean, no one, no one like our, um, target audiences don't really overlap a lot, but. Dave (39:01.717) No, and you're not like one of those companies like the Pantone people. You're not gonna see me for that hex color, right? Yeah. Hey. But one of the things I did with the newsletter, which might be interesting to people on listening to this is right at the end, I sort of said, you know, Daniel (39:12.863) I'm sending it to you. I made it, I put it in my to do things app to send it to you. Dave (39:31.429) Thank you, if you've made it this far, thank you. Please drop me a reply, tell me what you're working on at the moment or request a theme color. And I've only had two replies out of that email list, which is fine, that's like, you know, bordering on 1% of people, so that's kind of cool. But one of them was like a one-liner that was just like, this sounds great, mate. Right, that validates what I'm up to. That's nice. The other was from this chap. I want to say his name's Charles. I'd need to go back and check. And if you're listening, by any chance, Charles, thank you. And if I've got your name wrong, apologies. But it was a massive email telling me all about what he does, how he's using the app, and some links to his own. Daniel (40:02.464) Nice. Daniel (40:17.462) Hehehehehehe Dave (40:28.817) video work and music and this and that. It was beautiful. It was lovely to receive. And checked out his stuff. He's pretty cool. And honestly, I think, I guess I wanted to tell this story because beforehand I was nervous even to email. Like, oh my God, people are gonna be like, where are you with this pro app that you were promising? And the reality has been the opposite, right? I've had some positive feedback. I've had... Daniel (40:46.972) Mm-hmm. Dave (40:57.673) nobody unsubscribed or sent any messages saying where is you know are you going to get on with this thing Dave. It's just been really lovely and I think there's something to that if you've got a mailing list or any other way of contacting people use it don't let it lie and you know yeah use it even if it's just a simple my head's been in the weeds and I've been making all these tests Daniel (41:10.669) Yeah. Daniel (41:16.588) Yeah. Dave (41:27.561) Um. Daniel (41:29.01) Yeah, I totally get it. Like, because we are people of the internet, right? And we see, we always see like angry mobs, just like, for example, like complaining about, let's say Apple, about video game companies that aren't quick enough, whatever that kind of thing, right? You've seen it a million times. And so of course it's inside us to be like, I don't want to be the target of that mob. So I need to be quick and I don't need, I need to be, um, I Dave (41:40.003) Yeah. Daniel (41:56.138) I need to refrain from contacting people and I need to, you know, like not market myself, not promise stuff because I like people are going to hold me to that promise. And I mean, don't lie, obviously, but people understand, like if you don't pretend to be a huge company, like people understand that we're tiny. And when you're tiny, then you can get away with things. You can say like, Hey, I'm tiny. And I'm just like, I'm trying to do this thing. Like Dave (42:02.124) Mm-hmm. Dave (42:13.122) Mm-hmm. Yep. Daniel (42:24.938) for telemetry deck, like sometimes our development is not as fast as I would like. Sometimes all the time I would love to be, I love our development to be way faster, but you know, that kind of thing. And so far no one has really, really complained. Like, of course people say sometimes stuff like, I really like whatever you're doing, but I wish it would go faster, which is totally fair. But no one, like I didn't have, didn't get any hate mail or anything. Dave (42:31.793) Hehehe Yeah. Dave (42:48.227) Yep. Daniel (42:55.118) On the contrary, people, whenever we write a newsletter, whenever I post online about stuff that we're doing, we're getting so much positive feedback. That's really amazing and that's really cool. I like that. I want to continue being honest with our audience, with our potential customers, whatever. For example, look at things there, but just put my to-do in. They put out a new version every 20 decades or so. And they are still like a very successful company. Or look at Ivory, for example. Ivory is just like two guys, I think, Mark Jardine and Paul Haddad. Right. And so like me and Lisa have a very similar situation where I'm mostly the dev and Lisa is not the designer, but like mostly the product person. And yeah, so we're gonna be slower than larger teams. And... Dave (43:25.785) Yeah. Dave (43:31.344) Yes. That's right. Designer and a Dev right? Daniel (43:54.51) Ivory is going to be developed slower than larger teams, and especially also slower than other indies, because they seem to have this quality focus that means that features are pushed out whenever they're really, really done, and not in a, oh yeah, this mostly works kind of way. And I think that's the value proposition that people get from these kinds of apps, and that's fine. Dave (44:11.729) Mm-hmm. Dave (44:20.185) Yeah, exactly. I don't begrudge paying the ivory team my subscription. I know what I'm getting for that, right? And it's a fair trade. I think in my situation, it's probably just that call out of like how you think something's gonna play out in your head. And if that... If what's playing out in your head basically leads you to inaction and not doing the thing, you've got to challenge yourself on that and kind of be like, is that real? Or is it kind of just a bit of fear? Um, in my case, it was like, yeah, I guess I'm holding myself to this standard of big promises and didn't feel like I was making any progress. Of course, as soon as I got the video engine working in the app the other day, I felt like hallelujah, it's all been worth it. I've made all this and it's like, it's about how I'm feeling about my work. It's not about anybody else at that point. Daniel (45:01.969) Hahaha. Dave (45:08.249) And yeah, it was just nice to rip that Band-Aid off, email the list cold, as it were, and cold as I thought it was. And. Daniel (45:17.998) called as like they subscribe to your newsletter, you know? Dave (45:21.777) Yeah but there's been no major contact since the first auto email that they get so no it was nice to check in and I don't think I've had any people unsubscribe which is cool. There's always something like that so you know don't worry about that if that happens but yeah I'll be. Daniel (45:40.79) Yeah, like you said something about like big promises and not holding yourself to them. And I think there's a spectrum there. Like on the one hand of the spectrum, there's these people and companies that promise you the moon and then nothing is coming from that. Like I don't know, certain carmakers, autopilot functionality. And on the other hand, as people who are like Dave (45:45.329) Mm-hmm. Dave (45:55.036) Yes. Dave (46:00.109) Yeah Daniel (46:02.978) they are only ever promising the things that they are 100% sure will happen. So they are always under-promising and then trying to over-deliver. And like, if you look at, and I'm saying under-promising and over-delivering, and then you immediately think of Apple because that's one of their inofficial mottoes kind of thing. But even Apple is promising stuff. And even Apple is sometimes promising stuff that is not getting released, like AirPower, for example. Dave (46:08.881) Mm-hmm. Dave (46:12.279) Yeah. Dave (46:23.801) Yeah Dave (46:32.345) Yes. Yeah. Daniel (46:33.294) or even Apple is taking a long time to say like release logic on the iPad or whatever. And Apple will totally build up hype for stuff and they are very much allowed to. So you listener or you Dave are also very much allowed to move your slider of what can I promise a bit more towards the bombastic. Like you can you can be aspirational. Like no one is gonna hate you for that. Dave (46:38.649) Yes. Dave (46:55.606) Mm-hmm. Dave (47:01.077) I think that's a lovely sentiment, Daniel, and I need to lean into that across the rest of this year with all of this. Yeah. I think this is basically a self-help podcast for us two as well, to check in with each other on these things. So thank you. Daniel, I'm gonna have to wrap up, mate. I've gotta get on with the rest of my day on this side of the world. Daniel (47:07.358) Same, I'm always also talking to myself here. Ha ha ha. Daniel (47:26.52) Mm-hmm. Dave (47:28.741) it's morning here in New Zealand and later evening for you in Germany. So yeah, before we finish up Daniel, where can people find you online? Daniel (47:40.43) please, please go to soci and find me at daniel at soci now hosted by messer.host by the way, finally. And also go to telemetrydict.com for all your fantastic analytics needs. It's the best analytics tool out there. And aspirationally, it supports everything and all the features. Realistically, like give me a... Dave (47:50.009) Ooh, awesome. Dave (48:03.438) Hahaha Daniel (48:09.038) Two more weeks to finish the rights management. Dave, what about you? Dave (48:12.337) It's always two more weeks. What about me? Yeah, you can find me at dave at soci on the Mastodons and the Feddies. And yeah, if you want to see what I did for the landing page for Govj Pro and sign up to that mailing list to see the sort of stuff I eventually Dave (48:41.067) It's LibiumApps.com slash govjpro. Daniel (48:45.774) Fantastic. All right, have a great evening. No, have a great day. I'll have a great evening. You did, like at the start of the show, I was like, okay, you gotta improve my mood. You did improve my mood. I'm way happier now. So fantastic. You have a great day. See you soon. If you listen to this, please rate us, subscribe us, recommend us, and also write us at our socials or at, or what's the email address? Dave (48:50.113) Yes. Dave (48:58.665) Excellent. Nice one. Dave (49:05.552) Yes. Dave (49:10.545) contact at wait Daniel (49:13.302) Fantastic. Thank you so much. Bye. Dave (49:16.473) Bye bye. Dave (49:24.365) Riverside said something was wrong with stopping. Oh, come on. Daniel (49:29.49) I mean, it's better to be wrong with stopping than starting. Dave (49:33.785) Hey, I'm going to end session for all, I think. And then. Daniel (49:39.496) Alright, yeah, look at the notes. I wrote down a huge amount of titles because they were all super fun. You can choose one. Dave (49:50.103) I think always two weeks away is standing out to me because we call back to that a few times. Yeah. Daniel (49:54.476) What? Yeah, that's true. It's not as naughty as the other ones, which is kind of sad, but. Ha ha ha. Dave (50:04.527) You shave one bit. I could go with that because it could have like you shave one bit ellipsis. Daniel (50:08.85) But like, yeah. Yeah, exactly. Um, yeah, I love all of them. Oh my God, that's gross. I love it. All right. Then I think like, what if you just hang up? Like there's a leave button. Dave (50:22.177) Yep I'm going to I'm going to do end session for all and then it should do its thing. Yeah all right catch you soon dude all right take care bye. Daniel (50:28.138) All right, cool. Daniel (50:32.45) See you, byeeee!