Daniel: "I love that it gives you a countdown. I love that it's just like, it's like, oh, the show begins in 5, 4, 3, 2, 1, liftoff." Daniel: "EXPLOSION SOUND!" Daniel: "I'm sorry if you listen to this with headphones, I've been listening to way too many countdowns these days. It is, yeah. So as you may know, I love this game Kerbal Space Program, and recently the successor came out. And it's a mixed bag." Dave: "Oh, is that relating to things with rockets and spice?" Daniel: "It's incredibly buggy, but it has come out as early access, and the developers are really hard at work. And many of the bugs are very, they're rocket bugs, basically, but still, when I look at these bugs, I'm like, oh, yeah, I know exactly how that must feel on the code base, you know? If you build your rocket part normally, it just works, but if you attach it on the side and then add some, I don't know, symmetry or whatever, then it will just duplicate whenever I save my game. So every time I save my game, it takes twice as long, until it's just unplayable." Dave: "I'm sure they'll fix that." Daniel: "But you kind of build this mental map of where are the landmines, where are the tripwires, and how can I step around those? And it's just going to be hard later on when the game is more complete and less buggy. It's going to be hard to unlearn those avoidance manoeuvres, I think." Dave: "That reminds me of using SwiftUI." Daniel: "It is, yeah, basically that. But yeah, it's very fun. If you are new to rocket building games, wait until the next patch, at least. But if you, from the release to the first patch, they already patched like 300 things, and it was an incredibly big step forward in reliability and performance and just completeness of the game." Dave: "Oof." Daniel: "So if they continue like that, I'm pretty hopeful and I'm pretty much looking forward for the game, and I'm expecting it to be done. Because the people who make it are also very nice. So what I tried to do is I tried, because the game doesn't have a story yet, right? So I tried just to visit every single planetary body. And I started with just the regular moon, because I was like, OK, I'm going to land on the moon. All right, cool, that works. And then next up, I was like, OK, let's go to Mars. Well, Mars is called Duna in this game, but it's basically the same. So I was like, OK, I'm just building a lander, and I'm building a mothership, and then I'm building a launch rocket that will launch those two, and then I'm just flying my Kerbal astronaut to Mars. And I land there, well, I arrive there, leave the mothership in orbit, then land there with the lander, and then walk around, and the graphics are incredibly beautiful. And even though your avatars are like little green men or little green figurines, you get out there, and the wind is blowing and howling, and you see these little dust devils, and you look to the horizon, and everything is red. And you walk around, and you realize there's just no one here. It's just, you are all alone on this whole planet. And that was the second where I was like, OK, I'm going to go back to the ship now. And then I realized that I had just not enough fuel to get back to orbit. So I actually had to create a second mission that would also fly out there, and just bring them enough fuel so they could actually come back up. And it was fun. It was really fun. Those are the most parts of KSP when something goes not as planned, and you kind of have to think on your feet and find an alternative route or something." Dave: "I do remember my kids playing the original KSP years ago now. And we kind of joke they've still got some Kerbals, the little green guys, floating out in the solar system. Which they got quite upset about because they didn't understand it well enough to sort of be able to go and rescue them." Daniel: "Yeah, I get that." Dave: "But it's sort of become a bit of a bit of a silly thing. You know, there's several guys just out there in orbit, like still waiting." Daniel: "I mean, they do not age, and they don't need any food or drink, and they're never running out of oxygen. So they're fine." Dave: "Yeah, like gigantic tardigrades, basically." Daniel: "They're a bit cuter, but yeah. Yeah, that's true. Actually, a good friend of mine gave me those for my birthday at one point. So they're tiny. They're like, I don't know, 3 centimeters, maybe 4 centimeters high." Dave: "Yeah, yeah. I don't know, I think they're kind of cute, but in a sort of, oh my god, what is that thing? Why?" Daniel: "T- hat's like around 2-ish inches, I guess. But they are adorable." Dave: "Awesome." Daniel: "So yeah, and they're standing somewhere in my room watching me work." Dave: "We have recently become a Windows machine house again after many, many years without Windows machines." Daniel: "How does it feel? Which windows? Why?" Dave: "Yeah, good, good question. So the short answer is, is that my youngest child is now, well, he's approaching 14 -" Daniel: "Tell me more." Dave: "- he plays a lot of Minecraft and games like Kerbals and things like that. But he's been gaming on a 2013 MacBook Pro 13 inch with the integrated Intel graphics. And it's kind of sucks, right? It's 10 years old this year and it plays the things he's wanted to play, but it's been really, really slow. So yeah, we were in a position to sort of look at sorting him out a dedicated machine. It was a bit of a around the houses process, like I spotted a refurb HP Elite Desk computer, which is like an office machine. But there's plenty of blogs and videos and stuff about buying a low profile graphics card and turning them into a pretty reasonable sort of entry level gaming rig. We thought, yeah, OK, we can we can do that. It's a nice cheap way of sort of sorting this out. And the box we bought was kind of DOA. Like, yeah, it didn't matter what we did with it." Daniel: "Oh, no." Dave: "There's no graphics output. And I thought, well, I'm not putting the low profile card in that." Daniel: "That is exactly my experience with building Windows PCs." Dave: "Well, you know, this was before we'd even built anything or done anything. The build on this was just going to be chucking in a graphics card and maybe reinstalling the OS. But we didn't even get that far. So that went back. I had a very disappointed child and I looked at the numbers and just went, yeah, we're going to buy the bits to build this and do it right." Daniel: "Oh, that's nice." Dave: "So, yeah, that that's what we did last last weekend. We had all the bits and we spent a good, good evening building this PC together, which was such a wholesome like father and son activity, to be honest. And I was I was guiding what we were doing. He was passing me bits. We were talking about how it all works and what we were seeing, which was great. And I want to say this was like first try. I turned it on." Daniel: "Oh, wow, was it though?" Dave: "It was perfect. And it would have been it would have been had I remembered to plug the second power cable into the motherboard because there's a motherboard power connector and then another one for powering the CPU and everything else. And I missed the second one. So it sort of didn't turn on. I was like, oh, no, I see his face like not again. And, you know, we discovered that and that was pretty obvious and sorted that. And then when we plugged it in, everything else was was ready to go. So, yeah, yeah, we it was very much a sort of knock it out the park, really, because that's, you know, a power cable, not messing around with jumpers or, you know, having things connected to the board in the wrong way or anything like that. Like it's it. I've not built a PC now. I've not built PCs in probably 15 years. Thinking about it, I think the last PC I built was actually helping my brother build a machine. We brought all the bits around to our house and we had like a PC building evening. So things have moved on a little bit since then. The tech's moved on, of course, but like the build quality, the way stuff sort of is more even more like Lego than it was back then. You know, it was very enjoyable. And I mean, we installed Windows and I don't think Windows is very enjoyable, to be honest with you. It does what it does, but I don't I don't feel like I can trust it, which probably sounds a bit silly. But I think because, you know, mid 2000s and late 2000s sort of experiences with Windows was such that I ended up using Linux and then ended up bouncing back to Windows, then to Mac. And then if I hadn't done that, like I wouldn't be here. You know, like that's been my my route into Apple development has been through hating Windows. So it was weird. I mean, like Windows 11 isn't bad." Daniel: "Oh, mine was similar, I think." Dave: "You know, like it's easy enough to get around and use. It does what it does all of that. And I think they've probably improved a bunch of stuff, but it's just not my home. So. Yeah, we got that working for him. I got an OEM key at a decent price instead of paying like over. It would have been about 160 dollars at least here in New Zealand to buy him a New Zealand dollars, not US dollars to buy a retail license of Windows. And I thought, what, paying for an OS? I've not done that in years. So we got an OEM key and that's fine. That was considerably cheaper. And yeah, he's ready to rock and roll. Minecraft is running well. Steam is now installed and he's digging into other things like Minecraft is running insane compared to that. That old Mac. Yeah. Yeah. So it's been an enjoyable experience and there's a part of me wishes it was possible to build in that way and use an operating system that I like." Daniel: "Very good. Oh, yeah, totally. I used to build Hackintoshes." Dave: "You know, I understand why people hackintosh. I kind of get that." Daniel: "Back when it was a bit easier to run macOS on Intel hardware without too much futzing around with the drivers and stuff like that. And it was super fun. But at the same time, I have such incredibly bad luck with building PCs. Every single computer that I have built or helped build did have all these teething problems where it took weeks to get it to run properly. Even in the current era, every few years or so, someone is like, nah, something went wrong. But it's not like that anymore. Every time that happens, I tell the person, OK, tell me exactly what to buy. I'm buying the parts, and I'm cooking you dinner while you assemble them." Dave: "Right." Daniel: "And every single time, the thing is just dead on arrival." Dave: "But that makes me think about we have a joke in our household because my wife's effects on computers seems to be to get them into states that I just can't can't understand how it's got there. And I come in and then they magically seem to fix themselves without me. Hardly." Daniel: "Or something doesn't work." Dave: "Yeah. Yeah. Yeah. Yeah. And we refer to this as her magneto powers. Kind of like, you know, magnetizing and messing the machine up. It sounds like you've got PC magneto powers." Daniel: "Yeah, I got those. But only for Windows PCs, yeah? Or for PCs that you built yourself. For Macs, Macs just seem to work for me. But with other people, it's the other way around. So the KSP stuff, I run that on a machine that runs in the cloud. So I have an app on my desktop, and I launch that, and then it basically is a Windows." Dave: "Oh, yes." Daniel: "It's a window with Windows in it. And I can also full screen the thing, of course. And then it just renders it in the cloud and streams it to me. And I have a fast enough connection that it works flawlessly, and it works very well." Dave: "Oh, that's really nice." Daniel: "So I'm super happy with it. It's called Shadow. I can totally link it in the show notes. Why should I actually keep quite?" Dave: "Whoa." Daniel: "They're not sponsoring us or anything. But it feels right to me, and it's good, and the quality is OK. It has Windows 10 right now, but it did offer me to upgrade to Windows 11." Dave: "Yeah, definitely." Daniel: "But I was like, the Windows, I don't care really about the Windows, so I kind of declined it. I was like, why should I run an update on this machine? Because as long as it works, and it runs the one application that it's supposed to run, it's just a layer. Right, exactly. Should we talk about, I don't know, iPhone app development or Mac app development, stuff like that?" Dave: "It is it is using it like a sort of embedded OS almost to just get to the game. We probably should this." Daniel: "Have you done any of that in the recent time?" Dave: "I have been I have been. Yes." Daniel: "Do tell." Dave: "Well, what actually happened is I'd had a change in some medication I have to take. It left me staying up later at night. I was far, far later than than I normally would be because I could not sleep. And that was on a Saturday night. And then by the Sunday evening because I spent a lot of that Sunday working on this as well. I was nearly ready for a test flight release with this little little utility for mastodon. So, yeah, I've called it Topiary. So essentially like, you know, a pruning tool. So essentially like, you know, a pruning tool, because it is for managing your followers on Mastodon. And essentially what has happened for me, and this may not be a very great reflection on where some of the things are at, but a bunch of people moved from Twitter to the 31st back in" Daniel: "Right" Dave: "November, like we had a massive wave. And then of course it's not for everybody, you know. I've found that a lot of the general New Zealand people that I followed on Twitter that moved have now moved back, like there's been this kind of flow. But what I'm left with is I'm following a bunch of accounts that just don't post yet, and I kind of thought, well I don't really want to follow those anymore. It sort of feels a bit like, well they're dead accounts. So I thought, can I make an app that lets me see that and decide whether to, you know, keep or unfollow these people. And that was the premise, right. A tool to sort of manage removing dead accounts. And I thought, well okay, if I can see when they last posted, then I can filter based on whether they've got no posts anymore or whether they've posted in the last sort of 30 days. So that's what I've built. You load it, you run it, it loads your followers from the server. That has to be done with respect and carefulness to the instance that you're on. So it does take maybe 10-15 seconds to load everything because it loads it in chunks and it adds a little bit of artificial waiting time to doing that so that you don't get a" Daniel: "all that's so considerate" Dave: "well, you have to because otherwise the servers may throttle you and say, hang on, you're querying too hard. You must be, you're doing something that's trying to bring the" Daniel: "You are querying too hard. Querying too hard is Telemetry Deck's new slogan." Dave: "server down basically. Yes, please stop. Yes, I'm thinking more like query hard, you know," Daniel: "Whenever something crashes, I will say, oh, I queried too close to the sun." Dave: "like die hard. And then you can have query harder. But yeah, so this was the premise. It goes and loads everything up. You're then able to browse your followers and filter them based on these criteria and things. And initially I did a very basic kind of swipe to unfollow. And because I left it just as you could do the full swipe to unfollow, it was a bit trigger happy and people testing it when I put it out to test flight kind of fed back like, yeah, we need a bit more than this because it's impossible to unfollow people. And I didn't have like a concept of being able to" Daniel: "Oh, yeah, you need that." Dave: "undo. So yes, yes, it's got all that now. So if you unfollow people, yeah, yeah, it's been fun." Daniel: "Oh, fantastic." Dave: "So I've used the library I've been meaning to use in an app I'm going to ship for a while, which is it's called Boutique. And Boutique sits on top of another Swift package made by the same" Daniel: "Oh, yeah." Dave: "person actually made by this guy called I can't pronounce his name from memory, but his handle is merge sort. Yeah, I'll link him in the show notes. He's fairly well known in our iOS scene. So" Daniel: "Oh, yeah." Dave: "yes, yes, really nice guy. And Bodega and Boutique are a means of storing codable data without having to think about the database layer effectively." Daniel: "I think he runs the iOS folks Slack or something." Dave: "Yeah, yeah. And so because everything from to test DK that we give back as data is codable, pretty much this, this opens the door then to sort of going, okay, I've got all your people who you're following. If you unfollow them, then I just chuck them in a boutique store. And then you can go and browse who you've unfollowed and refollow them if you want to. Like that's, that's the mechanism underpinning that." Daniel: "Really cool, really cool layers, to be fair. Yeah, that's really good. And if you like move around, it doesn't have to query the server again or something or" Dave: "That's right. That's right. So, yeah, yeah. And it's, it's a stateful sort of responsive framework." Daniel: "keep everything in RAM." Dave: "So one really nice thing is I've now got this so that when you tap on somebody you're following in the list, it brings up a sheet over the top and you can see all the people that you've unfollowed." Daniel: "So nice." Dave: "So you can see their, their recent posts and some other metrics and bets, and you can unfollow them from that screen. And one of the really nice things is that because of that mechanism, that then enables the button on the screen below to go and browse the people that you've unfollowed. Right. Yes. And it all comes together really nicely. So I've sort of just playing around with it yesterday and going, okay, unfollow you." Daniel: "Oh, because they're from the same source of truth." Dave: "Probably super annoying for the people I'm following or unfollowing, but yeah. I follow you. Of course, I follow you." Daniel: "I haven't noticed you unfollowing me or refollowing or something. Do you even follow me?" Dave: "Yeah, yeah, yeah. No, I might just unfollow and then follow you again just to wind you up later, but." Daniel: "Let me open the – you do follow me. That's really cool. Do that. Do that. Also, by the way, I have news for our listeners. Because, of course, if you love us, you can find us on Macedon and write us, tell us we are awesome and amazing and good-looking and well-spoken and all those things. But so far, you could only do that if you could look at your phone or your computer. So if you're in front of your computer, you can write us. If you're in front of your phone, you can do that. But we didn't have a solution for the people who are sitting in a car right now. So if you are commuting to work or from work, we now have a solution for you. Just put your hand in the middle of your steering wheel and give it a little toot-toot that will tell us that you support us." Dave: "Brilliant. Brilliant. I'm wondering how many people we can get randomly beeping their horn right now. In fact, I'm curious as to who's listening to this while they're in a traveling situation, whether it's by car or, or public transport, or even just walking. Like, yeah, check the show notes at us over on any of the social media accounts that are listed and that'll be great. Yeah, that's a great question." Daniel: "Just, you know, if you like Waiting for a Review, just like toot-toot." Dave: "I'm familiar with the social media accounts that are listed and that'll be fun to to find out what situation you're in when you listen to." Daniel: "We could also do a poll or something." Dave: "Well, maybe check the Waiting for Review Mastodon account because that's where I think I'll post that." Daniel: "Like, in what situation do you listen to, you know? Awesome." Dave: "But yeah, coming back to my pruning app, one of the things I just wanted to mention that's been super cool is I put this out to Mastodon just on my feed saying, OK, I've got a test flight and last time I counted, I think I'd had over 40 people install it, give it a go. I've had a bunch of screenshots and feedback given to me through App Store Connect or directly on social media. And I've really appreciated that. It's been nice to just put something out there. People have found some immediate use to it." Daniel: "Awesome." Dave: "They've also found some immediate things they would rather it didn't do or things they would prefer it to have. And I've been able to implement a bunch of that stuff really, really quickly." Daniel: "Awesome." Dave: "Also, I should probably give a very, very welcome shout out to my friend Kris Slazinski, who may or may not be listening to the show, but he gave it a design review effectively." Daniel: "Oh, yeah, shout-out to Chris." Dave: "So Chris gave it a design review and went above and beyond and gave me like a Figma project back. And I looked and he's like, oh, if you like it. And, you know, feel free to use it. And I looked at this. This album is just like, yep, that looks brilliant. And so he'd sort of taken my first prototype dev view of this thing and put an awful lot of shine into it with a lot of relatively simple tweaks in terms of what I got and sort of where it could be. And the beauty of that was within a day, the app was looking a lot better. Like the next time I got to spend an hour with it and just implement this stuff." Daniel: "Oh, that's amazing." Dave: "So I'm really, really pleased with how it's coming together. And it's one of those like exercises. And I don't want to spend the next six months making this thing. Right. It's a small utility." Daniel: "Awesome." Dave: "That's a bit of a bit of fun for me to build and has a bit of utility for today. Today, it will be more than just something to prune back people whose accounts have died." Daniel: "Awesome." Dave: "It's going to become more of a general, like a follower manager tool, as it were, because there's a bunch of things I'd like to build in over time. But I think it's also going to be one that I'm going to try and ship a lot sooner than I have shipped anything before. So long time listeners to the show will know how long it took me to get to out the door." Daniel: "Awesome." Dave: "When I had my little video to audio utility that was supposed to be quick, I sat on it for months before actually releasing it. I am trying to not let that happen here." Daniel: "Oh, yeah, yeah. Push it out there." Dave: "So, yeah, the goal here is to sort of ship certainly by the end of April, have it out there in the world." Daniel: "That's awesome. Ship it. Very, very nice. How's the other app going? Wait, you have the Photos app. You have GoVJ. That is kind of coasting because it's more or less in a good state. You have Topiary." Dave: "That's right, this feature complete. There's the photos that also have this video to audio utility, but hardly anybody is buying it and it's kind of done for what it needs to do. So I've sort of left that on pause, which makes sense. It's not. There's nobody breaking down my door for new features for it, so it might as well stay where it is." Daniel: "There's the Photos app, right? Awesome. Awesome. Awesome." Dave: "But, yeah, it's Topiary and the photos browsing app is sort of the going concerns at the moment, along with working on TootSDK." Daniel: "Awesome." Dave: "So the photos app will be a longer curve and may or may not wind up in me just making a full Mastodon client, to be honest. Because, yeah, I'm enjoying the space and I'm enjoying what can be done with all of this." Daniel: "Awesome." Dave: "Like it's so malleable and to test itself has made it a lot more like sort of just playing with Lego for me. So when I get into that space, I sort of feel super creative. And what I'm seeing is that every time something irritates me in the client apps that I'm using, I'm kind of filing away that note and going, well, I won't do that. Yeah. So we'll see." Daniel: "Yeah, I totally get that." Dave: "I think let's get the utility out and then let me take a step back and think about what this client really needs to be, whether it's a photos experience or something broader. But, yeah, I think most of the rest of this year for me is going to be spent working with these sort of various things, to be honest, in my spare time." Daniel: "It's the year of the Fediverse. Yeah, also shout-out to design review peeps. My buddy Florian oftentimes does that for stuff that I do," Dave: "So, yeah, definitely." Daniel: "and it's so helpful to have a second pair of eyes to look at these things." Dave: "Yeah, and you know, maybe when you say stuff that are your best Gonna have. I'd say that talking to myself, being open to a bit of it, I do have a bit of that, 100 percent." Daniel: "And you know how it is. Even if you designed it yourself, I feel like it really helps to have a second pair of eyes" Dave: "And when you're even if you've kind of got both of those skills, like when you're in development mode, it's you don't see it." Daniel: "because sometimes you just put the effort into a design or into a user interaction pattern or stuff like that, and because you put in the effort, it's kind of next time cost," Dave: "Yes, for sure, and sometimes it's very easy to spend a lot of effort down one path just because you've like you say, at some cost, you've started when actually potentially the" Daniel: "your brain doesn't want to realize that it's maybe not the right way to go. Not that. Yeah, I know. Actually, I have something about this." Dave: "right thing to do is to just take pause and do, not that, a bit of that, you know." Daniel: "I want to skip forward in our show notes to a similar thing" Dave: "Go for it." Daniel: "because I had such a thing where people have told me, mostly via Mastodon, but also via GitHub and Twitter, like, hey, I don't understand this part of Telemetry Deck. And so finally, I've changed it, and I hope I've changed it for the better." Dave: "Okay." Daniel: "I've just deployed it, actually, and it's about naming." Dave: "Ooh." Daniel: "So there are various ways of querying the telemetry database, and the two most important ones are, I'm not going to use any names for those. I'm going to describe them because it's about the naming, right? So one type of query is, okay, just for each day or each month or whatever, just count all the signals or all the users that just are included in this filter. That's the one. I call that time series. And most people don't have a problem, or actually, I don't think anyone has a problem with the naming of that one. And the other one is, for a given property, what I call dimension, for a given property, give me all the possible values and their distribution. Like, for example, if the property is, I don't know, BetaModeEnabled, then it's false and true, or maybe DarkModeEnabled, false and true. And then you see, like, okay, I don't know, 7,000 people have DarkModeEnabled, 14,000 people have DarkModeDisabled. Or maybe it's the system version, and then you see a breakdown, like which people are using which operating system or something like that. And that used to be called, in the user interface, when creating a new inside, it used to be called TopN because it gives you the TopN values for that property. And where N is right now the maximum amount of values, but I could, in theory, constrain that. For example, if I just want to see, like, the top five operating systems, and I don't want to have an incredibly cluttered chart," Dave: "Oh, okay." Daniel: "then it makes sense, or whatever. Or for my personal dashboard, I want to see the top ten apps that are using Telemetry Deck. But it turns out that no one, well, almost no one, is making the jump from, hey, I want to see a breakdown of the values for system version or DarkMode, to the button that says TopN. So, yeah, in the end, and then I found myself once again explaining the concept of why this is called TopN to," Dave: "Yeah, I could see how that'd be confusing." Daniel: "I want to say, Christian Selig, who makes Apollo, who is amazing and awesome. Shout out to Christian." Dave: "Okay." Daniel: "And then I was like, huh, I should just rename this. So now I've renamed the button. It is now called Values Breakdown, I want to say. The subtitle that says, like, oh, yeah, show all the values that belong, that occur in a certain property. The problem here is this, that at a certain point, if I go far enough down the layers of Telemetry Deck, I reach a layer, if I just reach the raw query layer, basically, where I code every query by hand and whatever, this is where these things are called TopN queries. And not only by me, but also by databases that I use below that, like we use Druid as our database. Druid uses TopN as the correct name. And also other analytics and time series databases also use TopN as the naming. So at some point, there needs to be like this point where I'm like, okay, remember this thing that we used to call Values Breakdown? Now it's called TopN because now you're able to actually define the N," Dave: "Okay." Daniel: "and also we're now in database land, basically. And so this is why I was so stubborn in holding to the TopN name because if I could have, apparently I could not," Dave: "Okay." Daniel: "but if I could have convinced everybody to just learn or learn what TopN means in Telemetry Deck language, then I wouldn't have this break somewhere in the learning curve that occurs as people go from the pre-made charts to self-made insights that they use the visual interface for to self-made" Dave: "Okay. If I take all that in, though, Daniel, I can see that, like, regular users clearly are not going to take this on board, right? So they're not going to learn new language for this. Like, I want to see a breakdown." Daniel: "insights that they actually write the query code for." Dave: "Call it a breakdown, you know, that sort of thing, yeah? And then those that go down into the query language, probably one of the first steps they're going to do is use your builder, which is going to go." Daniel: "All right." Dave: "And when it reveals what that code is, they're going to see top end there. And I guess you can cover this in a sense of kind of anybody who gets to that depth is going to need to learn. And it will probably make a lot of intuitive sense." Daniel: "All right." Dave: "Sort of, you know, in your reference documentation under breakdown, you've got top end queries or however, you know, you need to structure that and explain that to people. I think it's going to be okay. Like, anybody sufficiently motivated or getting into that level is just going to go. All right. Yeah. This stage is called that because we're going to get the top end values for this thing. I guess I think I'm saying not that it doesn't matter, but just that that learning will come in at the level that somebody needs it. And in the general day to day use, you know, somebody just using what you've got on the rails. They don't need that. They don't need that explanation." Daniel: "I guess. I guess. All right. I just checked it is deployed on the server, so it is live now, and it's called, what should the insight be called? It's called Values Breakdown. What are the possible values for a property? So yeah. There's going to be a few steps between like actually actual like writing characters for coding queries and where we are now anyway." Dave: "But I think that's okay. I think like, you know, a high level being able to say your values breakdown is made up of top end queries underneath that." Daniel: "So maybe I just have to have some explanatory steps in there. I guess so. And also it turns out that more people than should really have, like more people than necessary actually didn't get what TopN means, and so they went straight to the, oh yeah, apparently I need to just use the code to code my query step because they" Dave: "That is something you can explain." Daniel: "didn't understand the user interface." Dave: "This is this is a thing with, you know, the things that we we build." Daniel: "So that's also a danger, of course." Dave: "I think if something needs repeatedly explaining, you've got to respond to that. So you're doing the right thing, even if it sort of feels a bit like that's not what it's called. Yeah, but I'm I'm looking at our show nights now and I'm looking at things we've talked about before because I'm curious about something that is a jump away from from naming." Daniel: "Okay. I have. I have. I took a short trip to Android land. So one of our potential customers was like, hey, this is really cool," Dave: "And that is I can see you've done a bit of Android development since we last spoke." Daniel: "but I want to use Telemetry Deck for not only for my iOS app, but also for my Android app. And for that, it needs to support an earlier version of Android. So Android version numbers are kind of numbered. Like you have Android SDK 21, for example." Dave: "Okay." Daniel: "That is Android Lollipop. And previously we supported the lowest possible version was SDK, I want to say 25. And so this person was like, hey, can you try and support 21, which is Lollipop, which is kind of the last. Like if you ever asked me to name a Android version, I would have said Lollipop. I don't know. That's like 2015-ish, I want to say. And apparently this is still on enough devices that it's a sensible thing to support. So last weekend I was like, okay, I could just try to hack this, but it feels like I need a bit more knowledge in how people use this SDK. Otherwise I can't really recommend people to use it, right? And I wanted to write our friend Konstantin, who wrote the original SDK, but he was unavailable, I think. So I was like, okay, I'm just going to sit down. And I actually did Google's original tutorials on how to write Android apps these days, like how to write a modern Android app. You write them in Kotlin, which is a very Swift-like language, and you actually use a framework that the name of which is kind of gone right now. It is Jetpack Compose, right?" Dave: "Have a guess. Is it is a jetpack compose." Daniel: "And Jetpack Compose is not really exactly like SwiftUI, but it feels sometimes like if SwiftUI and React Native had a baby, kind of. Or maybe React, not React Native. And it's all incredibly well-supported by IntelliJ's IDE, which is, I think, the official Android Studio, and I think that's the official way of writing Android apps. And it's all very well-integrated. It has the SwiftUI-style previews. It has really good syntax highlighting and auto-completion. And you really notice that Kotlin, the language, is actually developed by IntelliJ. So they were the people who actually developed Kotlin, I think. So Kotlin runs in the Java VM, but it feels very Swifty and very modern. The only thing that I really disagree with is that Kotlin, by default, a lot of the APIs, they don't have named parameters. The parameters are, well, it's kind of weird, but good, but bad, but weird. So the parameters are named, but you don't write the parameter name. So if I call a function that says, I don't know, follow Dave on Mastodon, and then open bracket, and then maybe I need my account. So in Swift, I would write, like, my account, colon, and then the variable that contains my account. And in Kotlin, I would just write the variable that contains my account. And then the IDE, because it knows the name of the parameter, will insert the name of the parameter in front, but I don't have to type it. And it looks really cool. It looks really cool. It's very readable." Dave: "Okay. Yes, I've come across this. Yeah." Daniel: "But it felt eerie. Yeah, I get that. Elvis operator. Oh, I see. Oh, that's kind of cute. All right. Yeah, pretty much. And the app is just basically three screens, and I can switch between the screens, so there's no functionality there. I just wanted to see, like, does it send the signals? Does it report all the stuff? Like, the main compatibility for Android 21 was that everything below 25 reports its operating system version slightly differently. So I just have to check, am I on a lower operating system version? And if yes, then just ask the operating system differently for its version. So that wasn't, like, too hard. And in fact, then once I realized how that works, and then once I, like, played around with it and everything, and I wrote some code, and then I looked on GitHub, because I wanted to create a pull request, and someone actually had created a pull request for the Telemetry Day Kotlin SDK. And the pull request was named support older versions of Android. Here it is, add support for Android 21. And it had exactly the same, like, down to the letter, the same changes that I had. And it was opened, like, last year or so. So I wrote to the person and said, thank you so much. I'm really sorry I didn't see this, and merged it. So this person, they're called, hang on, what's your name? Stanislas Chevalier. So, yeah, thank you so much for your work. And they actually wrote me a message on there and said, I guess it's fine. It's awesome that I merged it. So they weren't too angry with me." Dave: "That's really cool though. It's I mean, you yeah, you went the long way around when somebody had already given you that." Daniel: "Yeah, but I did enjoy learning all this. In the end, writing Android apps is, on the technical side, it's a lot of fun. The output doesn't really sit well with me, because I feel like, and I'm incredibly biased, of course, but I feel like it's still way, the output still looks way better if you write SwiftUI on Mac or iOS. Because that's just what Apple puts a lot of work into. Like, if stuff appears on the screen, then it should be very consistent and very good looking. And Android is more pragmatic there. It's just like, oh, how do you want it to be? Just tell us, like, oh, you want this color? Oh, of course. So, yeah, it's less opinionated, which is, I don't like it. I don't like that part. But I like the language and the framework, and it was a good experience. Yeah, also, don't do it." Dave: "That's cool. That's really cool. And I feel like I need to spend some time in Android world at some point as well. But I think that if I think about the reality of how I want to spend my time free time over the rest of this year, that's not going to happen." Daniel: "I am very biased, but it feels to me like people are writing even less native Android apps than they are writing native iOS apps, because writing native apps is just a lot of work. And if you have to do it twice, then you have twice the work, which is already bad. But you have one thing that is way worse than that, which is the syncing problem, syncing with a Y. So synchronization problem. Because you will have to synchronize the features between your different apps, and they're never going to be exactly the same. And that is a big problem, even if you have the person power to work on two apps at the same time. And so I feel like people sometimes put in the effort to write an iPhone app, because the people who use iPhones, they value the quality, and also people on iPhones just spend more money, to be fair. But my feeling is that as soon as people think about, oh, yeah, I know I need to add an Android app, or maybe they think ahead, they want to add an Android app, then the chance that they're just going for a cross-platform framework like Flutter or React Native or stuff like that," Dave: "Yep. Yeah, that's true." Daniel: "it just grows and grows and grows. So, yeah, maybe learn Flutter or React Native, if you want to write an Android app." Dave: "I don't know. I don't know. I think I would lean into the Kotlin compose thing if I wanted a native iOS, native Android app even now, just because of everything I've heard, it's piqued my interest. But I get your point. The other more kind of pragmatic use of my time, if it's a Fediverse thing, and especially with where 2TestDK is at and all of that, the more pragmatic use of time could actually be to look at making a PWA and actually making a progressive web app that can be used on the browser in one way or another. That can then also be added to your home screen on Android. That could be another route. Not quite as good as a native experience, I'm sure, but it could be a way of covering more ground, more area with what I'm doing and getting almost a two for one." Daniel: "Hmm. Oh, yeah, totally." Dave: "But again, these are not formed ideas or statements. Really, it's more just a case of these are things that are on my radar of like, if I ever do anything different to iOS development, where would I go?" Daniel: "Hmm." Dave: "And I think PWAs for web and a bit of Android is one route. And yeah, for me, I would probably ignore everything you've said and go for Kotlin and Jetpack Compose." Daniel: "Then, of course, do that. I am not exactly the most experienced Android developer, as you know. So take my opinions with a galactic-sized grain of salt, even. I'll probably have to learn Flutter and or React Native at some point anyway, because those SDKs, they want to be written at some point." Dave: "Yeah, and honestly, Flutter is not bad in terms of what I've seen of it, like Dart isn't a bad language." Daniel: "Oh, no, I hear very good things. But, yeah, also, oh, yeah, if you want to help me out by writing a Flutter or React Native SDK for a telemetry deck, just, like, give us a little toot-toot, you know, with your car horn. So, yeah, or with Mastodon. That would be great." Dave: "One of those things might be more productive than the other." Daniel: "But otherwise, I'll just..." Dave: "Well, Daniel, I am going to have to get on with the rest of my day. It's early morning here in New Zealand and I've got a bunch of work and things to do as usual. We sort of finished the show on this kind of note, but it's been great talking with you." Daniel: "It has, totally. Yes, people can find Telemetry Deck at telemetrydeck.com. But more importantly, they can find me, @daniel@social.telemetrydeck.com. And what about you? Tell us where people can find you and your project." Dave: "Before we go, can you tell people where they can find you online? Well, you can find out about my apps that are actually available right now on lightbeamapps.com." Dave: "And you can find me over on Mastodon/the Fediverse at @davidgarywood@social.davidgarywood.com." Daniel: "We really need shorter domains." Dave: "We do, I kinda messed up with that one. It doesn't help that my username is a mouthful in the first place because it's just my full name. Maybe I'll change that one day" Daniel: "Maybe I'll also use my full name. Daniel Benjamin Felix-Hilg at social... " Dave: "It's so funny because as a username, it makes sense to me, right? I've got the domain, I've got this everywhere and it's like a brand name almost. But then if somebody ever actually says it to me, oh yeah, davidgarrywood, it's like, well, my mum's just called me and told me off." Daniel: "*laughs* Oh, I get that. Maybe you should just shorten it to DJDGW or something like that. But, yeah, it's totally your brand name." Dave: "I guess so. Yeah, potentially, potentially, yeah." Daniel: "It has been fantastic. Have a great day and see you soon." Daniel: "Byeeeee!"