The Modern .NET Show

Episode 82 - DotPurple With Michael Babienco

Embedded Player

Episode 82 - DotPurple With Michael Babienco
The .NET Core Podcast

Episode 82 - DotPurple With Michael Babienco

Supporting The Show

If this episode was interesting or useful to you, please consider supporting the show with one of the above options.

Episode Transcription

Hello everyone and welcome to THE .NET Core Podcast. A podcast where we reach into the core of the .NET technology stack and, with the help of the .NET community, present you with the information that you need in order to grok the many moving parts of one of the biggest cross-platform, multi-application frameworks on the planet.

I am your host, Jamie “GaProgMan” Taylor. In this episode, I talked with Michael Babienco about DotPurple, a cross-platform GUI based .NET application which aims to make it easier to use the .NET CLI, and manage new project templates and global tools. I’ll let Michael explain it in a moment, but it was originally created to help reduce the brain space required to remember how to use the .NET CLI whilst also boosting developer productivity and allowing developers to fall into the pit of success (rather than the pit of failure).

Along the way, we also talked about helping to give back to the developer community, via tools or mentoring. We also discussed the benefits and drawbacks of creating a cross-platform GUI based .NET application and how, when .NET Core was first released there was no cross-platform GUI framework. These days, there are a lot of options, including MAUI and Avalonia (which is what DotPurple uses).

So let’s sit back, open up a terminal, type in dotnet new podcast and let the show begin.

The following is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Jamie

First thing I want to say I always start the episodes like this right? I always want to say thank you to everyone who’s been on the show. So thank you so much, Michael, for taking the time out of your afternoon to come and talk to me about DotPurple. We’ll get onto DotPurple in a minute. But I always like to start with a little bit of intro to the person that’s come on. So thank you ever so much. Michael?

Michael

Oh, yeah, you’re welcome. Thanks for having me.

Jamie

Excellent. Excellent. Okay, so before we get on to DotPurpl and the wonderfulness that is, I was just wondering, could you give us a brief introduction, a little bit about yourself, if you don’t mind? And then we’ll talk about DotPurple in a minute. Is that okay?

Michael

Yeah. So my name is Michael Babienco. I am a software contractor who works in Michigan, in the United States. I’ve been doing a software contract work for actually just about 10 years. And it’s fun. You meet a lot of interesting people that way. I do a little IT on the side, pretend that I know how to use Windows Server, and have a lot of fun doing doing development.

Jamie

Cool. I think everyone pretends when they’re having to deal with Windows Server. Like, even Microsoft pretends if I’m completely honest.

Oh, my goodness. That’s not to say that Windows Server is bad. long pause But we’ll let the listener draw their own conclusion.

Michael

Yeah, we won’t get into that.

Jamie

Yeah, exactly. Okay. So that’s cool. So you’ve been contract based development for 10, around 10 years. That’s, that’s pretty cool. I have no idea what the development experience in the United States is like, and obviously it will be different across multiple different states boundaries. And because of that, I have no idea what the contracting experience is like. So that’s pretty cool. But I’m a contractor myself, so every three months, six months, a year, two years, I’m always meeting a new team and starting a new project or working on something completely new. So it’s cool to be able to keep that sort of constant new project feel. I do have a few older projects to support every now and again, but most of the stuff I work on is sort of new stuff. So that’s everyone loves working on new code, right?

Michael

Yeah, yeah. But the fun part is about contracting, at least in my experience, I haven’t had the opportunity to use new technologies all the time, because often the contractors, at least in my experience, just because of who we’ve worked with, they don’t necessarily have a lot of money for support contracts after. So we tend to use more boring technologies that are more stable. So as much as I’d love to get to know, maybe React or Flutter a little bit more closely than I do now. I haven’t had the opportunity yet. But it’s still fun. Definitely resonate with the new contract, new project idea. Every 6-8 months.

Jamie

That’s cool. That’s cool. Yeah, I before I became a contractor, I, I sort of sated that desire by trying to build new projects in my own time. But obviously, the problem with that is, oh, wow, well, there’s two problems. There’s one, one of them is, let’s go create-react-app, and then find that all of the tutorials are now wrong, because it’s been 30 seconds, since the tutorial was released, right? I feel bad for picking on React. But any technology is like that, right? And then the second one, of course, is that the majority of the tutorials you follow are, “here’s a Hello World / ToDo app.” And that’s it.

Michael

Yep. Yeah. Technology moving so quickly. I mean, you look at iOS or Android, you’ve got new versions out every year, new API’s, new deprecations. And it’s hard to stay on top of all of that.

Jamie

It really is, it really is. I don’t envy. So you know, the the Xamarin team, right? They need to know about these new API’s before the rest of the world so that as soon as the public beta comes out, they have support for those new API’s. And they’ve removed the deprecated APIs - I cannot understand how they keep on top of everything. I guess they get the insider track. But even so that must be really difficult to keep track of right.

Michael

Yeah, especially when things change in the gold master or final release candidates and things like that.

Jamie

Yeah, I don’t think I ever want to write software that requires other software to run other than like a runtime, because that just seems fraught with disaster.

Michael

Yeah, it’s a little bit scary sometimes when you have to do that.

Jamie

Absolutely. Okay. Um, let’s talk a little bit about DotPurple, if you don’t mind. So I know that. In fact, there’s an earlier episode of the podcast where I sort of geeked out about the .NET CLI with Dave Rael. And we just talked for about an hour about how cool it is, right. The difficulty with it as well. sure we’ll come up to this is discoverability. Right. It’s difficult to discover those new commands. But you can just literally do like in the intro to the show I say “type in dotnet new podcast”. That is literally how I spin everything up, when it comes to getting the editing together and doing the show notes and stuff, and doing the transcription and stuff, I literally type in dotnet space, a new space podcast. And everything is done for me. It’s wonderful. But that requires a lot of effort for me to set up, right? But like, and obviously I can’t tie that into in Visual Studio File>New Project, or in Rider File>New Project, or whatever. But what I’ve talked a lot about the CLI just now, right, and I feel like I’m prepping you a little bit. But what Firstly, what is DotPurple?

Michael

Yeah, so dark purple is a well actually if we if we can back up for a minute and talk about the COI a little bit. Um, you know, the the dotnet COI before we say or before, I implied that the dotnet CLR is unnecessary or that it’s too verbose or it’s wrong or something, let’s be clear that it is a necessary tool. It’s wonderful. I hesitate to view an ultimate reality where we were using ms build for everything. And which, of course has historical ties individual studio isn’t, I don’t know if it’s cross platform today nowadays or not. But it it makes it gives developers the feeling dotnet C sharp is Windows only. And so the CLA plus all the work they’ve done on you know, dotnet, standard dotnet, core, etc. has really opened up the dotnet world to other developers, which is fantastic. So I want to be clear that I’m not downing the dotnet COI at all, it’s, it’s great. It’s a great tool to wonderful tool. But just like other other say allies that you’ve probably used in the past, the dotnet sail, like I say it suffers from three problems that pretty much many many CEOs suffer from and one is discoverability, which is which is what you’ve mentioned. It’s a you know, you look at dotnet and you go, okay, I’ve installed it, I’ve not looked at any documentation, what can it do? So you type in dotnet. Okay, there’s dotnet hyphen, H, okay, so you do dotnet hyphen, H and then it gives you all the under commands that you can do. Great, here’s all the things like do. But then you have to run help on each one of those commands, just to see all of that. And so it’s hard to discover everything that you can do just at a glance. The second problem that I sort of see there with CLS in general, is typos. Which sounds like a small problem, until you’re doing a CLR command that takes you know, 40 different flags or some long file path and you forget to paste in something right or you forget quote marks. And and it’s just, it’s just a disaster. And then you’re searching through your small little text there wondering where on earth you you made a typo, like some bad SQL query or something. But the third issue that I kind of see with the allies in general, and I would say the same thing about git, for instance, and Git is a wonderful tool. But the third issue is, you know, user memory. When you have a command line that’s as feature packed as the dotnet command line, you have a bajillion options, you have many, many tools, kind of with all these options underneath each tool, and they don’t necessarily cross pollinate. And so it’s difficult to remember everything in your brain until you do it every day, or you do it every hour. And unfortunately, with a lot of these things are at least one of the main parts of the tools, you know, using new project setting new projects, you don’t do that every day. And so, as far as far as I am concerned, I don’t want to have to look at the docs every single time I use a tool.

Jamie

I mean, that’s that’s totally fair enough. I have to agree with the with all three points, right. Like I said in the previous episode, Episode 15, I think was really the beginning of the show’s history. And if my math is correct, because we record this at a time this will be Episode 82. Right. So it’s quite a while ago. Yeah. And Dave Rael and I we were talking about, yeah, the discoverability is the issue like you say, you do dotnet Okay, show me all the commands. Okay. Right. So now we’re dotnet new that will show me all of the all of the projects I can I can use. Okay. dotnet new MVC. Right. Okay, it takes a bajillion flags that are only like you said, they don’t cross pollinate. They’re only relevant to that one project template, you know, and that’s, that’s a huge issue. And I totally agree with it with the typos right, especially if you have spaces in your file names. Now I sort of I jump between Windows, Mac OS and Linux distribution. And if you if you’re familiar with a Unix like POSIX style files, if you have a space in the file and you’re using bash or whether you’re the go to terminal in Windows, you just wrapped the file in single quotes and it will deal with it fantastic. In in Unix style terminals you have to when you hit the space, you have to put backslash, space and Continue with the violin. So yeah, even even the same CLA on different operating systems can give you issues you don’t even know about. And like you say you’re sitting there going, scratching your head or what? Why? Where’s the rest of the file name? Yes. Yeah, absolutely. Oh my goodness. Yeah. So, so. So yeah, let’s, so that’s the SEO, any, any clo and like you said remembering commands, right? There’s that there’s that stupid meme of, Oh, yeah, I’ll just type in NPM instal? No. And I’ll push up 5000 times, and then hit return.

Michael

Yeah, again, there’s an excellent XKCD comic, I don’t know, if you see XKCD, where it’s where’s the guy is in front of the explosive device. And someone says Help Help. And the other person says, help me. It says enter a valid tar command. And the developer just backs up and says, I’m sorry, I can’t help you.

Jamie

Yep, yep. Yep, I always have to Google how to extract a tarball from from the command line. And, like, I’m forever copying files across the network, to different machines. So use SCP, to wonderful bash, I believe is bash, app for copying over an SSH connection over a SJ connection. What’s great about that is you just use SCP, Target, colon the path you want. And then the file you want to send and it will do it. But the problem is, I can never remember the order in which things got. So I just hit Ctrl R, which is great for Unix style terminals, because it’s like a reverse search at SCP and then hit return, watch it fail, and then go back and change the command because obviously, the file name is different, right. And I do the same thing for our sync. So if I’m copying, I use it for copying across on the same machine, but across different hard drives, because then you get that sort of data integrity check. But I can never remember the command for that. So it’s Ctrl r sync, right? Go that’ll do. And, you know, I don’t want files laying around with, with how to run the command, because then I’ve got to open the text file, scroll through, find it, copy it, paste it, change it, send it and I end up like, end up sounding like a Daft Punk song. But yeah, I mean, the CLR is a group for if you if you are scripting something, you can, you know, take the output of this one CLA command directly into the next one, and chain them all together. And that’s how you get DevOps. I’m pretty sure. But okay, so we’ve talked about ci, as we’ve talked about how bad they are, well, not bad, but how they can easily fall into some certain traps. So is this something that doc purple? fixes? I mean, or is it just he just used our purple as a CI and just don’t worry about it once was the was the was the was, what is purple? And how does that solve that problem? I guess.

Michael

Yeah. So dark purple is a desktop application built for Windows, Mac OS and Linux. And its goal is to help you learn those COI commands and manage your dotnet projects. And you can think of it as a wrapper around the COI, it does offer some more things beyond just the COI. But um, its goal is to remove those issues that we just talked about, you know, discoverability, it’s much easier to see on the screen all at once, what you can do then have to type in help all the time typos. Well, we can’t help you if you type out your own parameter name, but at least we’ll remember your type before you until you fix it, and use our memory, we offer you know saving and loading all your settings and stuff. So we try and tackle some of those issues that the CLR has, not only so that you as a developer can work with your projects better. But also so that new people who are not used to dotnet, or the dotnet ecosystem can start using dotnet and C sharp and F sharp and all those wonderful languages more quickly, and get up to speed more easily. So yeah, in short, it’s a graphical user interface that helps you use the dotnet command line.

Jamie

Okay. Okay. So so here’s here’s a question for you then. Those those issues of the COI to one side, the discoverability, the typos and the user memory, right? If I can go into Visual Studio, and I can go File New, and it does, there’s a wiziwig stuff is I’m not a fan of Visual Studio only because he does too many things. Right? It’s like carrying around a Swiss Army kitchen rather than the Swiss Army knife. Right. And so it does too many things, in my opinion is a bit bloated in that respect. It’s a great tool, but it just does too many things. But if I can go File New Project, do I What do I get out of dark purple that I may not get out of file new bro. in Visual Studio writer, whatever, or in the Visual Studio code,

Michael

yeah, so I haven’t used writer myself. So I won’t speak to that. And let’s be clear. But in Visual Studio up until I think version 16.8, I believe it was, it may have been a preview before that. But it didn’t actually load your, your dotnet templates. It just had the built in, you know, WTF API, MVC, API, etc. It didn’t actually load those at all. And so that was obviously a problem. And so dark purple was actually created before that started to get integrated into Visual Studio. Things have started to get integrated, it’s actually improved a little bit if you now go in version 16.9. If you go File, New Project, it’ll load up some new things. For instance, if you used the box dot templates or something, something like that,

Jamie

that box dotnet. Box dotnet. Yeah, I mean, those are the ones Yeah, they’re great, because they’re sort of opinionated get you started really quickly, you just push a button and you get like, you get the standard ASP dotnet stuff. But you also get like, mapping via models and all that kind of stuff sort of built in.

Michael

Right. So if you have that template installed in your computer, and you go into Visual Studio and you load it up, it will show you some of the options. But here’s the unfortunate side effect of that is that they’re all in one big long list. There’s no nice text wrapping or anything, if you make the window bigger, you can’t really see more unless you have vertical height to share. There’s no help text. And there’s no way to remember what you’ve done afterwards. So that’s a very unfortunate thing about just the dotnet new project. But then, but then if you look at the other parts of the COI, there’s, for instance, dotnet new build, there’s at least 18 options, 18 different flags that you can use for that, run 18 actions dotnet publish 24, we could go on and on. But those aren’t available in Visual Studio. So whatever the reason is for that, you know, maybe it needs to add a new add on to the Swiss Army Knife kitchen. But that kitchen doesn’t have all the tools that we need yet. And so unfortunately, the reality is, is that we just the Visual Studio doesn’t cover all the features that the CLA does. And we’re trying to cover some of those features in dark purple, not only for Windows and Mac, where Visual Studio has been for many years, but also Linux as well. Okay.

Jamie

Yeah. I mean, from my iPad, like I said, you know, Visual Studio is great. It’s a little bit about it. But I did find like when dotnet core first sort of when they were the first grumblings, I like to say about dotnet core, I was already a Linux user, my, my daily driver is a Linux distro, right? So it’s like, finally, I can actually do dotnet development on my Linux based machine and not have to use mono. There’s nothing inherently wrong with mono, except that it suffers from the same problems that Visual Studio does, is incredibly bloated. But that’s my opinion, but you know, Miguel, come and shadow me if you want, but but, you know, I was like, hey, first class support for for this operating system that Microsoft isn’t known for? supporting for a while. Okay, fair enough. And yeah, I got the CIO, Pamela. Yeah, brilliant and Visual Studio code. And off I go. And then a couple of my friends who are windows devs, via Visual Studio, and they’re like, wait, Visual Studio doesn’t have dotnet core is first. Like it’s not first party support. It’s not a first class citizen. What the heck. But I guess that’s because there’s, you know, there’s a billion different teams in Microsoft all working on different products, and synchronising that must be super difficult to do right, if I’m working with a team of five people that’s difficult to synchronise. So if I’ve got a team of 25 engineers who are communicating with 25 other engineers, and we’re working on legacy code bases everywhere, I can understand that things. I’m not trying to defend Microsoft, but I’m totally understand that, you know, they’re there. They’re file new was it needs a little bit of work is what I’m trying to say, in a roundabout way.

Michael

Yeah, yeah. And, you know, it just takes time with these big corporations sometimes. And again, there’s nothing wrong with that. I mean, we’re all celebrating because Visual Studio 2022 will be at 64 bit fine. I mean, that’s, that’s been how many years since people have been asking for that. So these things just take time. And in the meantime, you know, I’m thankful for other developers who create tools that help us get up to speed on things and so we’re we’re just trying to help help people where Visual Studio doesn’t cover. Yep,

Jamie

sure. So let’s say I’ve I’ve gotten created I go I got a load of dark purple. I fill in all of the checkboxes, I push whatever buttons I need to do, I pops my project. I closed our purple and I go away from dark purple forever, right? Because like he said, you know, how often do I fire up a new project? Or is that not the case? Can I do everything from within dark purple was the you know, do I keep using don’t have I’m trying to ask I guess without, I don’t like using the word why, right. But with that being said, Why would I keep using?

Michael

Yeah, yeah. So once you add your project, obviously, that’s, that’s one of the biggest problems with using the dotnet. CLR is making those projects with all the all the settings. But like I mentioned a couple minutes ago, there’s still a myriad of options under dotnet, run dotnet, publish, dotnet restore. And so we offer a graphical the GUI for those items as well. And so let’s say for instance, you want to run your publisher app, let’s let’s go with publishing your app on Mac, and Linux and Windows. So without purple, you can actually set up profiles, one for Windows, one for Mac, one for Linux, and check all your checkboxes differently under each profile, and then click publish all. And it will just do all the work for you in one click. And you don’t have to remember all your flags, you don’t have to remember all your settings. So if you’re asking yourself the reason why keep using it, it’s because of all the other things you do besides creating projects, where you will still be using the dotnet command line, or the features that the dotnet command line offers. But you don’t want to remember all the flags, you don’t want to remember all the new things that it offers the options you have. And it’s an easy way also to prototype. Again, publishing just because that’s an easy one to pick on. For instance, there’s an option for a single file publish, which was updated and improved in dotnet. Five. Well, what if your app doesn’t work with that? What if it does work with that? What if you want to instal a dotnet six preview and see if it still works, or see if it the bug is fixed there? Well, you instal the preview, you check the box, you see if it works, okay, doesn’t work, you uncheck it, you’re done. You don’t have to worry about learning the flags or anything. And so if it does work, you just hit save, and then you don’t have to remember that turned it on. So yeah, it’s, it’s, it’s useful for all the other commands that you do. And, you know, just for fun, the best way to test to see if your your app is useful is to use it on your own project. And so on Mac dot purple actually publishes builds and packages, its own application file, all in one big step. And so it’s useful. I keep hitting on publishing, but it’s useful for other things to show. So

Jamie

now that makes sense. If there’s a, if there’s a path that makes sense to use to show off all of the features of an app, let’s talk about that path, right? There’s, that makes sense to me, right? If you could do all of those things to brilliant, but if, if there’s a complex example, let’s talk about that complex is Apple and publishing is a complex example.

Michael

Yeah, um, you know, just just as another example, we were talking about the custom templates a couple minutes ago. Just Just as an example, dotnet, new MVC has a 21 different options, the box templates for the dotnet core API has 32. And so to sit down and have help text for all of that, on one screen, instead of just one big long list with no text wrapping, or things like that, at least I see that it’s very useful. Sure, yeah.

Jamie

Yeah. And it is. So I’m, I’m a very big proponent that when people say to me, I’m a command, that was the was the phrase that a friend of mine calls a command line Commando. And I’m like, Sure, that’s fine. If you want to be a command line command. Oh, fantastic. But you know what, it’s really easy for me to click on that button there. And it just does it all for me. Right. And, and I’m at a point with myself, where my opinion is, if I’m going to use a tool to increase that productivity, if that tool does that, then let’s use it if it’s more productive for me to do git add file name, file, name, file, name, file, name, 12 db, Julian file names later, return. Or if it’s more productive for me to go into a GUI and go, tick, tick, tick, tick, tick, tick, tick, commit, then I’m going to pick the path that with the least amount of effort required, and those everything I want. And, you know, it sounds like from what you’re saying, though, with the with the dotnet box templates, if I’ve got to remember 34 different switches, and I have to have them written down in front of me. Or I can take a bunch of boxes, add some text and hit go. I’m going to tick the boxes, add the text and hit go. Right. I’m lazy. And that’s that. That’s just me.

Michael

Yeah, and and that’s, that’s also the beauty of being a developer is that you find the workflow that works for you, and you run with it. And hopefully you document it. So whoever comes after you can also do the same thing.

Jamie

Absolutely, absolutely. So one question that I have based on what we’ve said so far, right? Putting the DevOps hat on, right. If I’m going to have if I want to have repeatable builds that I can do at the push of a button, and And I need to remember the 40 different switches for dotnet publish? Can I? Is there a way in that purple to export those? So that makes it easier? Or does it show me the command its running just so then I can copy paste that into my GitHub action or into my ms build action? Or into my Jenkins or whatever? Or is it a case of Is there a dark purple that’s headless, that I can instal there? And then just run it from the command line? what’s the what’s, what’s the path there?

Michael

So dot purple actually shows a console, or a console look alike on the bottom of the screen. And so it actually spits out all the commands that it does just about other than, you know, boring file, copy operations and things like that. So it spits out those operations, so that you can actually copy paste them, like he said, into a GitHub action or something. And that’s also kind of where the educational aspect comes into it. Because you can just fiddle with things and see what happens, you can see what the output is. So as far as exporting things to files, yes, we do offer that, right now, it’s a paid feature, just so that you can share it with people, you know, we have to limit some things just just so we can get some funds back. But yes, you could you could just copy paste, you know, send it over text message, or you know, whatever it is from from the command line right there. So,

Jamie

okay, that’s cool. Because like, that was something that was going off the back of my head, I’m like, if I’m using this wonderful GUI tool, how am I going to repeatedly build that in GitHub actions, but like you say, if you can, if you can copy paste the commands out, then it helps with that. And like you say, it will help you to figure out what the commands actually are as well. That’s, that’s it that’s immediately useful. And if let’s let’s just take another one of those dotnet MVC, right, you go dotnet. So if a listener, if you’re at your computer, bring up the terminal, type, in.net space, new space, MVC, dash H, and watch all of the command options get spat out, right. Now, if you’re trying to quickly iterate on that was one of these No, no, it’s one of those not is one of those. Right? Whereas if you know from what you’ve said, there, Michael, I can fill I can fire up adoptable, check a bunch of boxes hit go, there’s my project. Oh, that wasn’t what I wanted. Check a bunch of different boxes hit go. Nope, that’s still not what I wanted. Check a bunch of boxes hit go. Oh, there it is. That’s the project that I want. Right. Right, exactly. That’s cool. That’s cool. And you said earlier when it has support for those custom templates that people can build as well?

Michael

Yeah, yeah, yeah, um, we do a lot of testing just to make sure that the box templates box templates work. But yeah, it should have support for custom templates. In fact, we rolled out a some improvements to that feature just today. Today, the day the podcast was recording, of course, and we support temp custom templates. And we actually also do a lot of work with helping you manage your dotnet tools as well. So beyond all your cs proj f projects, you know, project files, your code, as it were, dot purple is also very useful to manage your templates, like we just mentioned, as well as your tools, your command line tools. So if you’ve ever forgotten, I remember I installed this tool three months ago, and I used it once, what was the name of it? I can’t remember for the life of me, you can sit down you know, click a button, go to the tools, let’s see, oh, all the all the list of all your tools you’ve got installed or right there in front of you. So templates and tools is the other thing beyond just projects that dot purple is focuses on.

Jamie

That’s really useful too. I have to agree that I’ve written so many single use dotnet global tools for stuff like its facility things like media conversion, right? I don’t want to have to remember FFmpeg input file or whole string of the same argument, right user memory and now it goes a whole string of parameters. output file, I’ve got a media conversion out because obviously being part of the podcast, one of the things you do is you take raw audio, convert it to mp3, right? So I’ve got a I just type in converter space mp3, and it takes any WAV FLAC whatever files it finds that are not mp3 and converts them to mp3 is in that directory. Because I’m I’m not going to remember all of these commands, so that would be useful for remembering they are installed on all my machines. Do I have convertor installed here? Nope. Do I have done that for mine installed here? No. Okay, how do I generate my editor? configs? While as with dotnet, format, let’s create a lease that sounds really useful. Yeah,

Michael

the other the other thing that we put in just just for fun, and, you know, we don’t actually have a lot of statistics on how people use purple because we don’t, I don’t like dragging people. Yeah, so we have very minor analytics. But we also have a list that’s open source on our GitHub of all these dotnet tools on nougat. And so you just load up properly, you load up that list, and you can just search and see what’s available. So for instance, if you search Amazon, it’ll come up with a couple of dotnet tools for Amazon right there in the list, and you can just one click instal them. So it’s great for for discovery. Great for discovery great to get started and see if something is out there.

Jamie

That’s that’s really useful, too. Because I think that’s a problem that I feel Microsoft haven’t solved yet. They’ve said, Hey, Cray all these bubble tools, and throw them up on nougat and Burberry, wherever, wherever, wherever, and then instal it on your machine, right? And it’s like, well, that’s great. But how do I search for the global tools on nougat. org? I go, how do I search for the global tools within the dotnet? COI? I can’t right. How do I know if there is a global tool for converting media? I don’t know. I’ve got it. I’ve got to know it and find it.

Michael

Yeah, I think nougat.org actually very recently added packets, sorry, template searching and dotnet tool searching. But you have to go down into the filters and do it that way. And so it’s not necessarily intuitive to find it. But to Microsoft’s credit, they do have a way to search for that. And I think the dotnet COI might have that now. I’m not entirely sure I, I haven’t used it myself. So well.

Jamie

Let’s say this right? Neither of us know for sure.

Michael

Well, and there’s no way. Right, there’s a clue for how the developer world feels about it. They just don’t know.

Jamie

Exactly. I mean, this is just as to talk in. So we can’t we don’t represent all the developers in the world. But in our opinions. We don’t know whether it exists or not.

Michael

Well, clearly wants to people say something. It’s the truth you posted on the internet. So that’s it.

Jamie

Right? That’s a really good thing. I don’t have comments on the website now. So okay, so we’ve got projects, we’ve got tools we’ve got, we’ve got custom templates. But you’ve said so far, a couple of times, and we kind of breeze past it real quick, just because we’re in that world now. dotnet is now cross platform. You said earlier on, if you’re using ms build, you have this feeling like you’re tied to Windows, but you don’t. And I feel like the to Microsoft’s credit, they’ve done what they can, I feel like there’s a lot of wait dotnet is Windows only sell. So that’s that’s a bit. There’s a bit of a shame, really. But we’re getting there with that. I have no, I have no affiliation with Microsoft. But I feel like we’re getting there as a community of educating people that Hey, no dotnet is this thing that you can run on Windows, you can run on Mac, or pretty much any Linux distribution, but there are some caveats there. Obviously, if you roll your own is likely not going to work. Or if you’re using the bleeding edge or a distro from like, 15 years ago, it’s probably not going to work. But you know, that’s fine. But because dotnet is cross platform, dot purple is as well, because we sort of breeze past it, right?

Michael

Yeah. So dark purple does run on Windows and Mac OS and Linux, although I couldn’t tell you how many Linux distributions that it does run on? Or does it run on, you know, boon to of course, is the popular choice show. But yeah, it does run on all three operating systems. And which is great, because Visual Studio isn’t even offered on on Linux. But it does run on across all three.

Jamie

That’s, that’s gonna have been a difficult problem to solve, right? Because I remember, I remember when dotnet core was first sort of being talked about and everyone was like, cool, we could do Windows Forms on Linux. And they were like, hold on one second here. And there’s still like a, you still can’t do windows specific things on that. And that totally makes sense. You’re never gonna get the windows API’s on Linux. But then, you know, we’re moving forward towards a situation where there is a cross platform, a first party cross platform, UI, in the way of, I believe it’s called marry, which the current version I believe, is just Xamarin so far, but there’s talk of bringing other things in and making you know, lots of things that multi application user interface or multi platform application user interface, I believe is called so that’s cool. Is is stoppable marry or is it something else?

Michael

Yeah, so dark purple was actually around before Maui was announced. It does seem like a great technology. I haven’t used it personally. But dark purple is actually built on two technologies one WP F and we can get back to that. But the cool thing that it’s that it’s runs on is avalonia project called avalonia UI, which is a cross platform desktop, C sharp zamel based development framework, very similar to WTF. And they you instinctively think when you hear cross platform, you wonder, Hey, does it work on mobile too? And the answer with avalonia is it’s in beta, close beta, alpha, you know, maybe, maybe, but as far as desktop goes, it runs very well. And basically, you just you pick, pick your development environment, do all your programming, and you can expect, generally speaking that it will work on the other two operating systems. You know, if you’re on Mac, it’ll work on Windows, Linux, and vice versa.

Jamie

Okay. So, because that was that, is, that’s something that I, like I said, when when it was first announced, they were like, Hey, we need some kind of UI thing for multi platform. And all of the Microsoft folks were like, No, that’s too, too too difficult at the moment, right?

Michael

Yeah, I mean, people are still calling for cross platform WTF. Even today. They and you know, everyone says, Well, you know, it’s dependent on direct acts, and like you mentioned a moment ago, the windows API’s, etc. But clearly, there’s a demand for it. But that demand hasn’t fully been met, although Maui is coming.

Jamie

Yeah, I have looked into avalonia. I’m really impressed with what they have to say, I’m trying to track someone down. So maybe if there’s somewhere on the avalonia team listening in, Hey, get in touch, we need to talk about this stuff. But you know, I’m not as famous as dotnet rocks or hanselman. So, it may be it’ll happen, maybe the one we’ll see. But okay, so we’ve got we’ve got avalonia for Did you say it was just for Mac OS and the Linux is? And the Windows version is WTF?

Michael

Yeah. So dark purple. Okay. Let’s be clear here. avalonia runs across all three, okay? But dark purple is kind of not so secret secret is that actually for windows that uses WPS? And there were a couple of reasons for that. One, WPS is what I was historically familiar with. So I wanted to make sure that if if the whole cross platform thing didn’t work out that we’d at least have Windows software. So that was sort of a business decision at the beginning. But let’s just be honest, you know, and in fact, it runs on WTF dotnet framework, not dotnet core. So it’s kind of ironic, it’s kind of a funny thing. But there are some things about that setup that you can’t that you can’t beat with dotnet core with dotnet. Five plus, my installer for dark purple is like 15. Meg’s right. And, and there’s no dependencies for Windows 10 users to instal because dotnet framework 4.8 comes installed on Windows 10. And so you know, updates are small, it’s pretty stable, it’s very, very stable, I don’t have to worry about it updating every year. So in that sense, dotnet framework, wtf was was a great choice. Now moving forward, of course, now as they’re starting to iterate quicker on dotnet, five, dotnet, six, etc. It’s a bit harder to make that business decision. But you know, back a year, year and a half ago, now, when we were just conceptualising. This made a lot more sense. Back then, when, let’s see, WP f first came out on dotnet. Core on three, version three, I think it was a and so version three came out, I think just a couple months before we conceptualise that purple. And so it wasn’t, we weren’t sure yet if it really should be. And so we decided, let’s do a test. You know, let’s let’s build a main Windows app where most developers are going to be on on WTF, and then use a shared code project and have an avalonia version as well. And so that’s kind of where the WTF windows avalonia, Mac and Linux dot purple came about. And for the record, it does work wonderfully. The avalonia build works wonderfully on Windows, we just choose not to deploy that.

Jamie

I mean, that’s fair enough, right. He, he goes back to the whole the beginnings of dotnet. Right. dotnet was, he was one of those languages that was created as a rapid application development toolset, right? You want to you, you want to get a web server up and running fine. It’s like 12 lines ago don’t. Right. And because before then if you’re if you’re building a custom web server, you either to use someone else’s web server, and modify it, or write it all in C, c++, maybe, you know, one of those languages that are that nothing is provided for, or rather, there are libraries, but hardly anything is provided for, you know, memory management, all that kind of stuff. So let’s get you started real quick with this. You know, it’s memory managed it, it has garbage, why has garbage collection, which is obviously memory management, it’s got all of these libraries already created for you. He’s all built in, and then we’ll get and then in the, you know, behind the scenes, we’ll continue to build our operating system with it. So you know, that sort of proves that have good at it. So when you come to create an initial proof of concept, why not use a pre existing technology because like you said, You’ve got to get it, you got to get to the point where it’s usable for us, right? You can spend months working on a UI, and if it’s not if the software isn’t usable, All you got is a very shiny painting without a wall behind you. Right?

Michael

Right, exactly. And you know, that’s actually where avalonia shines a little bit because avalonia like I mentioned a moment ago and SAML based. And so you can actually take your, your WP if your, your view models, your models, etc. Since it’s all C sharp, it’s not very expensive as a business decision to say, Okay, can we recreate our just our UI and avalonia. And suddenly it’s cross platform? If your libraries are not cross platform, you’re gonna have some different issues. Sure. But if you’re just using core C sharp core core normal, WTF, actually, you can just start building your UI on top of your existing code base, essentially, and then start iterating. From there.

Jamie

Yeah. And that’s just, you know, standard application design. Just how do I put it separation of concerns? Yeah, right. That’s just standard application design stuff that leads to separation of concerns. If you put your UI code in a UI area, and you have your core logic in a core logic area, and you have good enough interfaces, it shouldn’t matter which you were you’re using, because all you’re doing is poking at an interface. And then you you could build up, I suppose, if you really wanted to, you could then go and rebuild the UI in something completely different. Like, maybe electron, as long as you’re using the same interfaces. I mean, yeah, I don’t wish anyone to use electron. But I haven’t had a lot of success using electron in the past, I’m not picking on it. But, you know, if you then wanted to build it in GTK, shop, you just add that extra layer and you’re done. Right? Like you said, if you want to build a Xamarin, let’s say, for some reason, you want to get a working on an Android or an iOS phone that uses some kind of web socket to talk to a server, which has the dotnet COI on it, you could maybe just throw them right in front of it, and you get to it.

Michael

Right, yeah. And so we all know, as programmers that the earlier we start programming, right, the better off we are in the future. And so I really like the concept of what we call technical debt, you know, we can all choose to go into debt as programmers and choose to, you know, just throw everything together in one giant file. And it works. Let’s call it today, let’s never touch it again. And sometimes that’s appropriate. Let’s not, let’s not be wrong here. But oftentimes, we’re going to revisit that code next week, next month, next year. And the more we go into debt and don’t pay off our technical debt, the worse off we’ll be. And the more we’ll hate our future, or sorry, our past self.

Jamie

Yep. Yep, I agree. So then, so then I guess that’s why you guys spend the time to separate out. So you took that core logic, but that’s a one side build a UI in WP f because we can. And then let’s go have a look at avalonia Oh, wait, it’s zamel based it Guess what, I could probably just copy paste a whole bunch of stuff over. Right.

Michael

Yeah, yeah. And that’s the fascinating part. We started when abalone was still in version point nine. They’re currently in version point 10. And so they were still working on porting over some controls like WPS label. But generally speaking, once I got used to it, you could actually just take your zamel wtf, your WPS zamel, copy, paste it over, adjust some things, maybe tweak a few names in case you had to do something, you know, avalonia specific. And then it just worked. It was amazing. And so it’s a beautiful way to expand your WPS knowledge into Mac and Linux, in my opinion.

Jamie

That’s great. I do like that being able to just copy paste, tweak a few things, and then it just works. Right? That was like some of my early dotnet core apps were How do I take this framework thing and make your burn on core? Well, luckily, because I’ve separated everything out this junk works fine. This junk works fine. This Oh, this bit doesn’t work. Okay, fair enough. We’ll figure that out. Right. And I really like that being able to swap technologies without really having to worry about that kind of thing. But I do have a question though. Like, okay, so let’s say we’ve got the WP F and we’ve got the avalonia. Right? Why build two different versions of it? Why not build three? Right? Why not build one? Right? So there’s there’s two questions that are right. Is there. Do you guys envision, Oh, brother to the folks building it envision taking the WP F and the avalonia. And going look, we can have this or we can have this and it will be a smaller code base. I think you touched on this earlier when the windows instal is 15 Meg’s that’s hardly anything these days. Or and then the second question is, why not have a Windows version A Linux version with one of the million different Linux UI tool sets and a Mac version that uses is it cocoa? Or am I talking really old Mac there as a cocoa?

Michael

No, no, it’s cocoa? That’s That’s correct. Yeah, so so great question. And as far as the WTF avalonia thing goes for purple? Yeah, I think once we can make the decision to move everything to dotnet five plus, I think the logical decision is let’s move everything to the avalonia code base, let’s have one single UI front end. There, there was we’ve discussed some of the business decisions before why we chose to do it in dotnet. framework before, one of the other ones that is no longer true, actually, was performance. avalonia has done a lot to improve their performance between nine and 10. And in fact, dot purple, we would, we built it on their master branch against their master branch so that we could keep getting those performance improvements. But they’ve done a lot of impressive work, you know, removing link queries, optimizations, here, there and everywhere. A lot of impressive work to improve their performance in performance. And so I think the logical next step for purple itself is okay, once once everything is ready with avalonia, which it is slash it will be whenever we choose to take the time to do it. Let’s move everything to avalonia. Let’s have a single codebase. Because that just makes sense. From a business perspective, you don’t want to learn to you eyes. You don’t want to learn to use WTF and abalone, you just want to learn to use one. As far as your other question about cross building one software package for each platform? You know, it’s an interesting question because I actually have done that I built a for Windows and Mac we used native applications WTF on Windows and cocoa, for for Mac, and then across platform, business logic c++ back end. So the great part about what that was, was that the business logic was was wonderful to work with, you know, you fix the bug, once it’s fixed everywhere, you’re great. In fact, we use that back in a mobile as well. And so you fix that bug once in the business auction. That’s great. But the problem is, is that in my experience Anyway, once you start getting more complex in the user interface, with cocoa with with WTF with G to GTK. Any any framework, you start to get into those, why on earth is that happening issues, those really quirky workarounds, that you have to do that, where you sit there scratching your head for 30 minutes. And then Okay, you want everything to look the same on every platform. Okay, so now we have to sit there and rewrite the UI in five different ways. And let’s find a library for grid logic. Okay, we use this library for good logic here on Mac, and this library on WTF and this library on mobile. And so it quickly becomes a I hate to say it, but a clergy mess. And unless, in some sense, it’s a business decision, right? If you already have dedicated windows developers, dedicated Mac developers, and dedicated Linux developers, and they’re not going anywhere in the next 10 years. Okay, the most optimal way to write your software would be to have a unique piece of software for every platform, because you’re going to be able to take advantage of the native API’s, the easiest, the native platform optimizations, the easiest, etc, etc. But often, as we will know, in the contracting business companies don’t necessarily have all the money in the world. And companies may not have developers for every platform may or may not want to support further support contracts on every platform. And so that’s where these cross platform solutions really come into play. And why I think, again, it’s a business decision why we should use them?

Jamie

Yeah, again, it makes perfect sense. I mean, I feel like it was kind of kind of like a leading question, right? Almost, almost everyone who builds cross platform apps will take, we’ll take as much of it out to make your cross platform as possible to make our job easier, right? And then, and then, let’s say, you’ve done that where you’ve got WP, if you’ve got cocoa for Mac OS, you’ve got GTK, for all of the Linux is right. What happens when someone brings out a new Linux? What happens when someone brings out a new desktop environment for Linux? What happens when Apple come out with a brand new version of Mac OS and deprecate a whole bunch of stuff? From cocoa, right? Does that mean that all of your users now have to move to the latest and greatest Mac OS to be able to keep using your application? Then as as much as apple? I mean, they do push out updates quite often, but it’s not how do I but it is not enforced upon you as much as say with a Windows of data, right? The macro so they can come out and be like, hey, instal it whenever you want, there’s no problem. Because the majority of developers have had that update for six months but have not actually bothered to update their software yet. And you update and then nothing works. But that happens that does that that I feel like I’ve picking on Mac that is not just an apple problem. that’s a that’s a every operating system ever problem, right? You will get the lazy developers or go nobody’s using my app. Or it’s not. There’ll be no, there’ll be no breaking changes just instal it Oh, great, nothing works. Huh, wow. And I’m getting this really weird exception, or there’s really we won’t be getting a no ref. Why am I going to stack overflow? That doesn’t make sense. all it’s doing is drawing a button. But you’ve used some kind of compatibility API that no longer exists, right? So I think for the majority of developers, it all makes sense to have a, a is perhaps not as well optimised as the native binaries. But a an optimised format that is cross platform that just makes business as it makes developer sense. And it fits with the the the the idea we were talking about earlier on about developer brainspace. Right. I don’t need to remember how to do things on cocoa. I don’t need to remember how to do the Oh, right. My users just installed. Wayland is that have you known that throws everything out of the window? If you don’t know what those things are? Then good. You know that that’s, that’s brilliant. You don’t live in the Linux world, you’d have to worry about that. But then then some brightspark goes, Oh, I want to run it on a server, which doesn’t have a desktop. You know, it all just falls over. But I, I think like I say it was a leading question about why not develop three separate three separate application code bases. I feel like I was going to ask about the pros and cons of using avalonia. But we’ve kind of hit upon that it’s, you know, pros, a cross platform, cons, maybe not as optimised as the default binaries for your operating system. But it allows you to just push a button and outbox your executable. Right.

Michael

Right. And, you know, that is one of the wonderful things about building on the dotnet platform nowadays is, as much as we might dislike the new new versions coming out every year, the dotnet team has made a lot of strides, the last, you know, year or three with performance. And the fact that we now have a UI framework and upcoming Maui and things like that, that just run on top of that run on top of all those improvements. You can basically as long as all the compatibility stays the same, get better performance, with very little effort. And so it’s it’s it’s wonderful to be able to use the dotnet ecosystem in that way.

Jamie

Absolutely. I remember when I was talking to JD of the Regenexx team, that’s a Nintendo Switch emulator written entirely in dotnet, which makes it inherently cross platform. And he was saying that the team that worked on Regenexx, we’re feeding back to Microsoft saying, Hey, we think that because obviously when you’re emulating a piece of hardware, speed is of the essence, performance is of the essence, right? So they were feeding back with hints and tips about, hey, point your profilers at this area of dotnet. And you’ll notice it’s not running that great. And then Microsoft go or the open source folks that work on it, go and, and make those changes. And then guess what, we all get that performance benefit for free. So we’re not building we may not be building emulators for handheld consoles, we may be building business line ups or like you, Michael, we may be building GUI applications that let us that those build our templates out and manage our tools are better. But we’ll get those performance upgrades if we want them for free. And I absolutely love that. One of the things that is that there’s there’s there’s the developer maximum of three difficult things in development is naming things, cache invalidation, and off by one errors, right. But we all know that updating your software is nigh on impossible. I was wondering whether you could talk to us a little bit about how dark purple is updated, right? Because either I just download the exe or run it on my computer. Oh, well, I go back to the website at some point in the future. There’s another exit downloader running on my computer, right? That’s how it works. Right. That’s how all our software updates work. Right?

Michael

Yeah, if only it were that easy, you know, if only if only everything was managed automatically for you. We didn’t do that’s your browser, your your software as a service system. So obviously, a desktop applications have a whole nother world of, of running updates, keeping your software up to date and getting your users to actually update your software. You know, Mac has actually had a great solution to this for a long time. I think over a decade, although I could be wrong on that point. Many apps that you use on Mac will use a software platform called or not software platform, a software library called sparkle. Maybe many users out there have who use a Mac might have applications that make use of sparkle. It’s your very simple. Upload your your application file up online, upload your release notes, your software checks an XML file checks the binary hashes downloads it instals the update and it just works. I remember the first time I integrated sparkle into some software from zero to done in working with two hours. Wow. And I never used it before. I mean, it was it was really impressive, really, really impressive how quickly and easily I was able to integrate it into my software. But the unfortunate part is that that is native Mac binaries, libraries code. And so dot purple on Mac actually uses sparkle, we figured out a way to get dark purple, or the the dark purple C sharp code to call into the native binary and run things normally. And so that works really well. It’s battle tested, you know, sparkle library is battle tested. But for Windows and Linux, it’s kind of a different story. So I’m actually also the maintainer, slash sort of author of a library called net sparkle updater, which runs on dotnet core. So it’s all three platforms, and it’s there to help you manage your software updates. Now, we all know that Windows, Windows is a nightmare when it comes to installing software. I’m not, I don’t do it every day. But I know you know, pushing out updates the software and everything. On Mac, you have a single file, essentially you have your dot app file, you just shove it over you copy paste, it works. Everything is self contained. On Windows, you have E xe, you have MSI, you have electron apps, you have apps that Put yourself in my documents, apps to put yourself in roaming App Data etc. And so it’s basically a nightmare. So, net sparkle, this library that we use on Windows and Linux is less concerned with actually installing the update, and more concerned about getting the update for you and checking for updates. And so it does a very similar thing to sparkle. You give it your your XML your app cast URL, you give it your your private key public key pair, and it generates the files for you that you need to put on your web server. You put them up on your web server netsparker will check for updates. Tell the user Hey, there’s updates Do you want to download it here are the release notes. You hit yes, I want to download instal it downloads. And then you as the developer, hopefully have rigged up a uninstaller that works on Windows for your software. You know whether it’s an MSI, or an E xe whatever it is, I use, I no setup just because it’s again, battle tested, it works great. And so it just downloads an i o setup installer, and instals. And I know setup takes care of restarting soccer for me. So we use net sparkle updater for that it’s a great little library. Of course, I’m a little bit fond of it, because I helped I maintain it. I say I wrote it. But that’s not exactly true. A guy one time ago in a galaxy far, far away, wrote it, but then stopped maintaining it. And it got forked on GitHub, and then that fork got forked. And then that fork got forked. And finally I said, Okay, enough is enough. And I kind of took it under my wing. But that’s that’s what that purple uses for its software updates. Again, a true cross platform software update framework would be really hard just because there’s so many intricacies in distribution formats. I mean, Mac, you have app notarisation that’s a huge issue. And if you don’t know what that is, and you don’t have to deal with it, please don’t Google it, you’ll get into a deal. So there’s a lot of difficult things on each platform that you have to worry about. So it’d be really hard to have a true cross platform plug and play that work perfectly everywhere. If Microsoft wants to hire somebody to do that. Great. More power to them.

Jamie

Yeah, again, that totally makes sense, right? The three major I don’t like to you like to refer to Linux as an operating system, but it kind of it fits when I say the three main operating system, right? Windows, Mac and Linux distributions. Even within the Linux distributions, they all have their own ways of installing software, right? If you follow the Debian path where a boon to lives, then you’re using their packages, right. But you know, we’ve got flat packs, we’ve got my goodness, app images, we’ve got snap packages. Now. There’s, there’s hundreds of different ways to instal software all each with their own caveats, strengths and weaknesses. And that’s great. But then, like you say, managing that upgrade path for one application becomes more difficult. And all you’re doing is so getting one look as the Linux distributions, right? You then targeting that one format for one of a better phrase. And that becomes a trivial problem in itself. And then you throw in Mac and you’ve got like you said, the app notarizations you’ve got, you know, if you want to go down the AppStore route you then that may be have to start charging to cover that. But and then then you get windows which is a completely different other beast. And like I say, I’m not trying to pick on any of them. But yeah, it’s difficult to maintain. I do remember watching a friend of mine, try and then struggle to get there, get something with squirrel working. And that was a multi week job. And then they ended up giving up and just like we’ll get them to sign up to a man Last time, we’ll just email them when a new version comes out. Because that seemed easier and quicker.

Michael

Yeah, and you know, that’s why with net sparkle updater, that library that C sharp lib, we decided not to handle the actual update itself, we just handle the, let’s check for updates, let’s find the RSS feed or whatever it is, let’s download the update. And then the developers in charge of actually running that update. Just because it’s going to be different everywhere. And for every piece of software. Sure, sure.

Jamie

So there’s there’s lots of I don’t want to say moving parts, I feel like that’s the wrong word to use, but maybe is the right word to use with dark purple, which is And here come the bungee cords, just an application that wraps around the COI red. Hopefully you all heard those bungee cords because it’s there’s a lot more to adoptable than that we’ve already discussed there. There’s a lot of different parts that you’re touching on that maybe a standard enterprise level application should be taking into account. It’s it’s got full cross platform support, it’s got separating the logic, the core logic from the UI, it’s got a an automatic will. Well, there’s a question, is it an automatic updater or manual of data, right? I’m using purple, it’s running. And then all of a sudden an update is pushed to the server. The my doc purple talks to the server and says, hey, there’s an update. Do I then get old? Or does it just automatically update when the next reboots? What was that path? Like? I mean, you said there is it’s up to the developer to handle that. But what’s the path like for adoptable?

Michael

Yeah, so for dark purple, it’ll actually tell you, it’ll pop up a little window. And you can actually say remind me later, if you don’t want to instal it now, that way, you can finish up all your work, the library does have a very dangerous option of quit kill your software and reinstall without telling the user. And you know, there’s warnings and whenever in the docs, but dot purple, it warns the user, you’ll know when you instal an update, if you don’t want instal an update, you can avoid that for whatever reason you choose. Sure.

Jamie

Okay. So that’s that’s it then. So you’ve got cross platform, cross platform UI, with currently the windows UI on a Mac and Linux UI, you’ve got an auto data that can auto update, if it wants, but it lets the user know, these are things that I feel like enterprise applications should know about, especially a desktop style enterprise application, something like Chrome or Firefox that cannot be in the background. These are things that I would expect those those applications to worry about, and not necessarily hear that, hey, come up with those protocols. Again, a, just an application which wraps around the CLR. What I’m getting at is I’m really impressed with the way that at least from the way you’ve described it that this, this application has been engineered that you’ve come across these problems are gone, right? How do I solve this? How do I get past this? Right? Okay, here’s another problem. How do I solve this? How do we get past this? And it feels from the way you’ve described it? Very much like it’s less the one single file, get it on technical debt? Don’t worry about it, we’ll solve it tomorrow. And I’ll hate myself tomorrow, because I created all this technical debt, right?

Michael

Yeah, it’s, you know, I don’t know if your listener base is more beginners or experienced programmers or whatever, you know, I appreciate your, your compliments. That’s very kind of you. But a lot of that just comes with time and experience. You know, many of us, we don’t know how to solve a problem until we actually solve have to sit down and solve the problem. And we hope that Stack Overflow has the answer for us. We hope that we can bet that the solution is just a Google away, or just a being away or, you know, ask jeeves if you’re really old school. But often, that’s not the case. And so, as software developers, I hope you understand that, you know, we enjoy solving these problems, and then sharing that knowledge with others. And so it’s it’s fun to have an open source library, like net sparkle that helps people solve those issues. But it’s also a lot of fun to help people with their software solutions when and where you get the chance. So it’s, it’s, it’s been a long road, you know, I’ve done desktop development for too long. And longer than I know, well, it’s going to be less than 10 years. But, um, which there are probably some people listening who have done it for 2030 plus, so I’ll sound like a young guy. But you know, just over time you learn, and you grow. And it’s up to us as software developers to help others learn and grow as well.

Jamie

Absolutely. So that that goes into a question that I have that you talked about, it’s up to us to sort of help give back and help the those those that are junior to us to help them sort of figure out how these problems and the solutions come about is that purple open source, because you mentioned earlier when there is a paid version, I can imagine that having an open source and a paid version with difficult to manage as it is.

Michael

Okay, yeah. So dark purple is not open source right now. And that was a decision business decision made by the company that I that I contract with that it’s a small company at a university to the subcontracting. And so I built it for them. And it costs money for me to build. And so we have wanted to recoup those costs. And so for that reason, dot purple is a, you can purchase a licence to dot purple, however, and it’s not open source. However, things like your custom project templates, your tool management, your template management, your running, building, publishing, etc, a lot of the features, most of the features are free. And so we really offer the paid licence as a way to support us as a way to further development. And as a way to just say thanks for for what we’ve done. And so you know, of course, I’m gonna sit here and say, you know, please support us. But at the end of the day, what I really want is for people to enjoy the software to be able to learn from the software and to be able to get their development work done more quickly. So unfortunately, right now, it’s not open source, you know, if someone wanted to donate a bunch of money, so that we did open source it, please get in contact with me. But right now, it’s not open source.

Jamie

I mean, that’s, that’s not a problem. But he, like you say, represents a significant time and technology investment from the people who are involved with it. And so, you know, you don’t necessarily want to give that away immediately, because there is this time technology and monetary investment involved. I’ll totally make sense. I’m, I’m very much a very much a proponent for open source, but I’m also very much you know, I sit here and go, if everything’s open, who gets paid? You know, and so, you know, I’m not against costs or software, not at all, if it gets the job done, then here’s some dollars, help me get the job done. You know, that’s, that’s not a problem at all. So yeah, I like that. I was just thinking maybe, from an education point of view, maybe, you know, folks could learn about how it’s all put together. But I mean, maybe maybe that could be something you could do as a talk, or maybe just some documentation, hey, here’s how we hung it all together, we’re not going to show you the details. But here’s how it hangs together. And that could be as valuable as showing the code, right? If you’ve got a junior who’s like, brand new to development, and they’re staring at 5000 lines of C sharp code, some people will go, Ah, and just close the browser.

Michael

Yeah, yeah. And, and that is something that I’m really passionate about is the education. I guess, it doesn’t matter that I’m passionate about it. But you know, when we are able to pass on our knowledge to others, we’re not just showing that we know more than you, that’s not the goal, we’re actually helping people to become what others have helped us become. Because we all had people above us back in the day, who taught us whether that’s your professors, or your senior engineers, or whatever it is. And so it’s, it’s, I don’t want to say it’s our moral obligation that seems a little bit strong. But um, it’s our it’s our benefit and privilege to be able to teach others and also not waste our company’s time by them fiddling around and not knowing how to do anything. Show from a practical business perspective.

Jamie

Shall I agree, I agree. And, yeah, it just makes sense to be able to, to mentor or to to someone and say, hey, look, like when I first got into dotnet, stuff, Link didn’t exist, right? And now, Link exists, I got to dotnet. Four before I’d use any link stuff. And a developer that I really respect came to me and said, Look, okay, you’re, you’re doing a lot of stuff that you could do with, with link with Excel with these extension. Everybody thinks the link is the extension method, stuff, the dot where dot site, but actually, it’s a different, it’s slightly, there’s a link to SQL links, or whatever. But he came to me and said, Look, first of all, let’s learn extension methods. Secondly, let’s learn what these link extension methods are. And thirdly, once you’ve done that, you can figure out how to do funk t ball, right? And now that you’ve done that, you’re now a wizard. I mean, it’s a little bit more complex than just those three steps. But he took me through those three steps, and got me to the point where I’m like, oh, cool, I get that now. I totally get it. I get how that those projections work, I get how the dotnet runtime figures out what I’ve typed in and how that make that work. So I’m completely with you there. I think that being able to share one’s experience and knowledge with someone who is open and receptive to that will allow them to then go Oh, wow, this is a whole new world has opened up for me I’ll go have a look. You know, he regardless of whether they use that knowledge

Michael

Yeah, and you know, if it’s not you To us personally, you know, we can always post a self answered StackOverflow question.

Jamie

Absolutely. Excellent. Excellent. Okay. So as we sort of get to the point where we’re wrapping up, where can folks go to learn more about dotnet bubble? To learn more about you and learn about all of the related technologies, we’ve talked about the, the the net sparkle, that kind of thing. And avalonia I guess, I know, you’re not a representative of avalonia. But you mentioned it a few times, maybe you have some resources for people to get started.

Michael

Yeah. So my, for myself for the software first, I guess, our website is.purple.io. So d o t, p, r, pl, E, full stop IO, or just google dot purple, one word, you’ll will come up with our website. On our website, there’s links to our Twitter, where you can communicate with us a little bit more easily, as well as our GitHub where that open source tool list is if in case you want to submit your tool so that it’s a fee, or not featured in the software, but available in the software list of dotnet tools. So that’s not purple. For myself, you can find me on GitHub or Twitter, my alias is dead pickle, and I’ll spell it for you d a, d PIKLE. There’s no C in the word pickle. It’s a long story. And so get and get in touch with me their net sparkle updater is available on my GitHub, you’ll see it it’s right in front and centre. So if you want to get involved in that, in that project, please contributions are very much welcome. all open source MIT licence avalonia is available at avalonia ui.net. If you Google that as well, I’m pretty sure their their GitHub will pull up. And at the top of their README on GitHub is a Gitter chat room. They have a discord and a bunch of other resources for you. It’s a super friendly community. I know that when I was developing a lot purple, I ran into some issues, and ask some questions developers were answering back, they were really good about talking really friendly. And if you have the opportunity, you know, you can also contribute back because it’s open source avalonia is completely open source. And so if there’s something that’s missing, well, why not go build it yourself?

Jamie

Sure, that sounds good, I’ll make sure to put links to all of these into the show notes. So it won’t be the show notes that relate to your pocket. So when if you are listening to this, click through to read those. And they’ll be a link to the full show notes for this with a a full transcription. Unfortunately, some machine transcriptions or parts of it will be wrong. And then at the bottom that there’ll be links for resources and stuff. I don’t think it’s called links for resources and stuff. But it’ll be called something like that. And they’ll be all of those links that Michael just mentioned, I’ll make sure that they are in those show notes. So then if you’re driving, you don’t have to worry about how to write this down. If you’re up for a jog, or No, I haven’t got a pen and paper or whatever. You don’t have to put yourself in danger is what I’m saying. All of that will be stored for you. No, no worries. Excellent. Okay. Well, I guess all that really remains to say, Michael, is that thank you ever so much for being on the show, for talking about our pebble giving us a little intro to avalonia talk about net sparkle, talking about segregation of concerns, like all the things that you’ve talked about. Thank you ever so much for being on the show and talking about it?

Michael

Yeah. So thank you so much. I really enjoyed being here on the podcast and enjoyed being able to talk with you. Thank you so much for your time and for your efforts in putting out this podcast. Really appreciate it.

Jamie

Not a problem this, this is why I put the show, right. I love to talk to people who are passionate about the stuff that they make, and that they can they can use that as a I don’t want to say excuse but use that as a great way of teaching other people and showing people how, like you said, How do we hang all of this stuff together and solve all of these problems? So great way to do that. But yeah, so thank you very much.

The above is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Wrapping Up

That was my interview with Michael Babienco about DotPurple. Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and full transcription of the interview. The show notes, as always, can be found at dotnetcore.show, and there will be a link directly to them in your podcatcher.

And don’t forget to spread the word, leave a rating or review on your podcatcher of choice - head over to dotnetcore.show/subscribe for ways to do that - and to come back next time for more .NET Core goodness.

I will see you again real soon. See you later folks.

Follow the show

You can find the show on any of these places