The Modern .NET Show

Episode 102 - Photino With Otto Dobretsberger

Embedded Player

Episode 102 - Photino With Otto Dobretsberger
The .NET Core Podcast

Episode 102 - Photino With Otto Dobretsberger

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. An award-winning 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 Otto Dobretsberger about Photino: a lightweight open-source framework for building native, cross-platform desktop applications with Web UI technology. We talked about why you might decide to take an existing web app and use it with Photino to create a desktop application, why you might do that rather than provide Progressive Web App support, and some of the things which might be coming in a later release.

Along the way, we discuss some of the difficulties in creating cross-platform UI-based applications, and some of the things that Flatpack, AppImage, and Snap are trying to solve on the Linux desktop.

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

So the first thing I’d like to say Otto is thank you ever so much for being on the show. We’re across several different time zones. And you know, we’ve had to plan this around a vacation. So I’m sorry for interrupting your day and your vacation and stuff. So thank you ever so much.

Otto

It’s a pleasure to be here.

Jamie

Thank you ever so much. But yeah, so we’re going to be talking a little bit about Photino. I hope I’m saying that correctly. But first, I wonder, would you mind giving listeners a bit of a quick, maybe an elevator pitch about, about you and where you’re at, and the kind of work that you’re doing just to get an idea of a flavour of who Otto is?

Otto

Yeah, of course. I’m originally from Austria, but been living in Texas for the last 12-13 years. Got my PhD in computer science here. And started working in the industry been working as a full stack developer for the last decade now. And interested in variety of languages, technologies, that sort of stuff, typical programmer stuff.

Jamie

Cool, cool. Part of me is thinking, you know how I don’t know whether you see that these kinds of things in the States. But you know, when they, when there’s a job listing, and it says, you know, “a computer science degree or two to three years of experience is required.” And then you walk in with a PhD, they’re like, “well, you know,” you don’t get told that maybe you’re overqualified, or something? Genuine question. I don’t know, you know,

Otto

I don’t, I don’t think so. Because in this industry, really, knowledge and skill outweighs academic degrees, in my opinion, right? It opens doors, of course, if you have it, and I would definitely recommend doing it. But at the end of the day, the that matters is what you can do. And I know people, you know, a lot of people who don’t have a degree and are excellent, high level full stack developer, back end developers, anything. I mean, it’s really just a door opener, I think. But ultimately, it depends on what you’re doing. How good you are at what you do.

Jamie

Sure, sure. Okay. Like, a very small part of me is thinking, “perhaps a PhD might be a bit too much for, you know, if you want to go all the way down that way”. And then, you know, I’m not I’m not trying to offend or anything.

Otto

That’s true. I mean, that wasn’t the plan initially, either. I mean, initially, I got my PhD in computer science with application in genetics and genomics, which is completely different to the industry I’m working in right now. So that wasn’t originally the plan, either. But that’s how it turned out. And that’s where I am.

Jamie

Cool. I like it, it is what it is. So just as a tangential question, then, which is harder: modern full stack development, or doing a PhD?

Otto

That’s a tough question. Because if you consider not things that are just harder, but there’s nowadays, you know, full stack development isn’t just plain programming anymore. It’s a lot of setup, configuration, deployment, integration, code management, git management, that sort of stuff. And it’s just overwhelming for people who get into this industry to be part of every single aspect of a project like this, right? So it’s, it’s insane to be a full stack developer and do all of these things. So I wouldn’t say that it may be harder, more tedious for sure.

Jamie

Okay, now I can I can totally understand that. I am specifically a server side back end engineer, just because, like my personal opinion, and I feel like we can talk about it a little related to Photino, is that like, there are so many front end technologies? Yes, they’re all “just” - and hopefully you can hear the bunny quotes - they’re “just” CSS and JavaScript. But like, you can’t, like how do I put it? A React code base, because it’s attacking the problem in a completely different way to say an Angular code base, you can’t just sort of easily context switch between them, right? It is a skill to be a React developer, it is a skill to be an Angular developer. So keeping up with both of those as they change must be so difficult to do. That’s where like I said, that’s why I’m all I’m like, No, I’m the server side person. That’s all I’ll do.

Otto

Yeah, and it’s not just all the different flavours for web development. Then you have all the different flavours now for mobile development. You know, it’s not just what it used to be, “hey do Java for Android. And you do Objective-C for iOS?” No, now you have just as many different technologies you can pick and choose from for either platform. And you have cross platform technologies that you can pick which are again, different language maybe. So front end development is a broad landscape now a lot of different things.

Jamie

It is it. So with all the different, not just like you said, not just web browser, and, you know, cell phones, mobile phones, whatever. You’ve also got, like smartwatches, and, you know.

Otto

Yeah,

Jamie

All that kind of thing. So many different form factors.

Otto

And not only do you have all these different, you know, technologies and languages for, let’s, let’s say web development; then you have all the different devices that need to run it. So you create a web app that needs to run on a browser, then it needs to run on a browser on a 4k display, maybe an 8k display. It needs to run on an iPad, needs to run on a phone. Maybe on a smart fridge. I don’t know. I mean, all these displays are different size different shapes and your web app supposed to run on everything.

Jamie

Yeah. Iit’s a maddening series of divan, like you said, that’s “just” web, tight. And I’m putting the bunny quotes around that. But like, then you go, “I tell you what, I want to make an app that sits on the device.” So one of the things which I hope we’ll get to when we talk about Photino is that, like, there is no one way to make a cross platform .NET app targeting Windows, Mac and the many Linuxes because that in itself, I feel like is a hard problem to solve. Right?

Otto

Right, right. Absolutely. There’s different things you can do. There’s different technologies can do. They’re all different. They’re all allowed to use different languages. But you know, there is no golden bullet, or silver bullet for, “hey, I want to do this. And I’d want to do it for everything.”

Jamie

Yeah. I mean, API space is different, permissions is different. The way that things are drawn on screen are different. And not just like you call the windows 32 API to draw a window and you call some other API to draw a window on Mac OS. It’s also things like the orientation of the icons, right. It’s like MacOS, your close/minimise/maximise, are in the top left. All, or rather, a majority of other desktop environments, they’re on the top right. And you sometimes find because I use the GNU image manipulation programme a lot. And when I’m on Windows, the Save and Cancel buttons, I think are right and left in the bottom right hand corner of modals. And then on Linuxes and Unixes they’re in the same, like, global position, but like swapped around. So it’s, instead of save on the right and cancel the left, save on the left and cancel on the right.

Otto

Yeah, all these things you have to consider when you, you know, try to work on something that’s cross platform, but looks and behaves natively in the corresponding operating systems. You don’t want to create something that looks like a Windows app, but then looks like a Windows app on a Mac as well. And you want people to think, “okay, that’s a genuine Mac app when they run it on a Mac.”

Jamie

So I guess that leads us into discussion of Photino, right?

Otto

Yeah.

Jamie

I guess firstly, am I pronouncing it correctly? And secondly, what is Photino?

Otto

Well, Photnino, yes. It is an effort that we have started as an open source project, to create a platform that allows people to make cross platform native applications for Linux, Mac and Windows. And not having to use a new language or learn a new language, but use their existing skills in web development to do that. And not just their skills in web development, but even use their existing web applications to deploy them as a native app in respective operating systems wherever they want. And it’s a project that we picked up initially started from Steve Sanderson, and it was initially running on NET Core 3.1, and we took it over and made that open source project, ported it to .NET Five/.NET Six, and open it up to the community; let the community to participate in and move it forward. And are now at a stage where we have people using it we have some people in the industry using it; that use their either their existing projects that they have written in web tech, or that they started a new project from scratch in one of their web technologies of their choice to create this native desktop application.

And the driving force behind it was really that we had, we looked at different options that were out there to create cross platform applications that run on any operating system or available on any operating system. But what was out there always seemed very convoluted, very bloated, a lot of extra stuff, especially when the stuff was there was based on Node js. It’s always a massive package, even for a single small HelloWorld programme. And we didn’t like that, right, we said, “hey, if I create an empty project that says hello world that shouldn’t require hundreds of megabytes of memory, it should be small. And the file size of the application should be small too. I shouldn’t have to download 200 megabytes of files, if I have a Hello World opening in a blank window.” So that’s where we said, “okay, we’re gonna make this make sure it stays small.” The only thing that is required to have it installed on your machine is the .NET Five. And then it’s a really, really small application that you download that uses minimal amount of memory, and you can run your web applications, and deploy them as an executable on Windows, Mac, and Linux. And Linux, I’m not saying Linux as a whole, right? Because it would be a massive undertaking to try it and test it and confirm it for every flavour of Linux that’s out there. So like, when I say “Linux”, I really mean “Ubuntu”. That’s the distribution that we’ve been working with and that we tested on.

Jamie

That’ll make sense. I mean, there are…oh geez, I mean, I’m not going to count them. But if you go to Wikipedia type in “list of Linux distributions”, they have an image which shows the Linux family tree. And it is that big that if you take an 8k monitor and turn it sideways, you still can’t fit the whole thing in without having to zoom all the way out right? There are a million different Linuxes. So it is not an easy or trivial problem, to put Oh, he desktop application on a Linux.

Otto

And I’m not saying you know, it won’t run on any of the others, there’s probably some out there were just created, you know, deployed for a Linux distribution that will run on something else. And then there will be some that it won’t run where you have to, you know, tweak a few things. So, like I said, it’s, it would be too much to test it on every single distribution that’s out there.

Jamie

Sure. Sure, but I guess, and this is not a question for you to answer. But I feel like things like flatpack and app images are helping to solve that problem. So for folks who don’t know, that’s where you take your application, and all of the things that it depends on, and it puts it into a single binary - its kind of a binary and it’s not - which essentially, acts as almost like an image that expands at runtime and runs from that directory. So then you don’t have to worry about “well, you know, my distribution may have version 12 of this library. And your application requires version 14, I don’t need to update my entire system, just to run your application”. If it’s wrapped in a flatpack, or an app image, or even a snap, then you can you can supply version 14 of the dependency with your application. And then at runtime, there’s some magic and wizardry going on around like a dependency rebinding and things like that.

Otto

Yeah, absolutely. That helps making sure things run smoothly whenever you want to deploy it and distribute it to machines supposed to run the application on. Because you know, I mean, that’s the other thing with web applications. It’s a lot of dependencies, you know, always a lot of packages you depend on and then the packages update, and packages upgrade. Ssuddenly, other packages don’t work anymore, your app doesn’t work anymore. Something is broken. So in web development, in general, that’s a problem, right? That you’re dealing with all these libraries, versions, upgrades and all this all the time. So having that in a controlled environment definitely helps with any application that is based on web technology when you deploy.

Jamie

Sure, sure. And like I say, it’s not a problem that’s unique to Photino, and it’s not a thing that Photinio specifically is looking at. But if you’re, you know, if you want to if listeners want to get an idea of some of the problems that are faced by people who want to target Linux as a distribution for your application, take a look at flatpack, app image and snap, and realise that it’s kind of a non-trivial problem, right?

Otto

Yeah. That’s absolutely true.

Jamie

Excellent. Okay. So before we get deeper into Photino, right. If one of the things is that you could take the this existing web app and make it into a binary [that] you can run on your computer. What are the differences between Photino and say, a progressive web app? That’s, I mean, are there differences?

Otto

Well, yes, Photino allows you to first of all get down on a very low level for system calls. So in Photino you have access to the underlying system calls for Windows, Mac and Linux, and you can do very low level operations on it, and have a callback loop into your application that can start to spawn and get responses for. And that allows you to dig into things that a progressive web app can’t do. The distribution, you can you know, if you have a progressive web app, distribution is okay, you have to go to a web address right and run the app and then say, “okay, install it on that machine.” Versus on a Photino you could distribute it offline, so to say too, right. You can say, “I want to send this file to a hard drive, to a USB stick, to whatever medium you want it and distribute it that way,” right. It’s not URL people have to go to to download it and install it.

You can install it on, you know, a device that runs by itself in full screen mode - like think of in the service industry, like restaurants, that sort of stuff, kiosk type applications, right that you set up, you plug it into a computer, you drag it over whatever files, whatever apps you need, and then you run it on that screen. That screen then doesn’t have to have internet connection doesn’t have to have that device doesn’t have to have any connection to the intranet can set that up as an offline app. And have it work as a standalone thing that you set up as an kiosk type application. And Progressive Web App I mean, I don’t know where the trend is going. And correct me if I’m wrong there. But I heard I’ve read Firefox is disabling support for it. Is that right?

Jamie

I’m not sure.

Otto

If I’m wrong, I’m wrong. But I think I heard that right that. So I don’t know where this is going. It feels like it’s a acceptable for solution for, let’s say, apps, right, typical little apps that you have, but not for industry projects that you seriously have driving a business right. Then I don’t feel like that has the power to do it yet. So maybe, maybe not. I don’t know. But right now, I don’t feel like progressive web apps are at a point where they can manage applications on a larger scale that are central to running and driving a business.

Jamie

Sure, sure. I understand that. I think, even like with progressive web apps, the installation process is a little weird. Like, I use a system to track the books that I read, and they don’t have a native app. So on their website, they quite literally says, “okay, open the website on your device. Then hit File, then hit install. And it will install it that way.” And that’s not it’s not a I mean, I guess it’s becoming a standard way to do things. But it’s not like a standard setup for installing an app. And so, you know, if for instance, your target customer is, you know, someone who’s not say tech savvy, or doesn’t, you know, it doesn’t use the File menu in a browser - because let’s be honest, when was the last time you went file open or file anything inside of a browser, right?

Otto

Especially on a mobile device.

So yeah, you’re absolutely right. It’s absolutely not standard way to install things and distribute things.

Jamie

Yeah. Right. Whereas, like, if you’ve got an installer or a zip file that you just need to extract and then run the binary. That’s, you know, relatively trivial for the majority of users, right?

Otto

Absolutely correct.

Jamie

Excellent. Okay. So, you’ve said that Photino is based on an idea that Steve Sanderson had with this web view project.

Otto

Correct.

Jamie

So I guess, the folks over Photino took this idea and went, “right, okay, let’s keep everything up to date in that and maybe build something around that.” So like, listneers aren’t sitting there going, “yeah. But his example was like two years ago. And he explicitly said in his example, don’t use this for production.” I guess you’ve taken on the burden of like, keeping that up to date and all that kind of stuff.

Otto

Right? Correct. Because I mean, another issue back then was Microsoft said, “okay, we’re going away from .NET Framework. We’re doing this .NET Core thing now. But we already know, this is not going to be the end of the road, right, we’re going to do another switch, we’re gonna go to what turns out not to be .NET Five, then .NET Six.

So there’s a lot of things that changed throughout this process, right with the different .NET frameworks until we’ve now landed, okay, we have this one .NET that we all follow, right? We don’t need .NET Framework anymore. We don’t need .NET Core anymore, we just going .NET Five, .NET Six, .NET Seven and so on. So everything has become more streamlined in that sense, you know. The developer community knows, “okay, this is the framework we’re using moving forward.” Of course, there’s some maintenance stuff that’s based on older versions that’s going on in the sidelines, I guess. But yeah, and then, of course, you know, with the technology, it’s based on WebView2 it just tried to, you know, maintain it, keep it up to date, and keep all the dependencies up to date and moving forward. Make sure that everything that changes in the web technologies that we support also are kept up to date, especially with Blazor.

Because with Blazor, it’s interesting, right? Because on Microsoft side, they said, “okay, we can do Blazor for desktop now, right,” where you can do Blazor apps that you can deploy as desktop apps. And so initially, we were thinking, “okay, well, you know, we’re trying to move along and keep up with the changes.” We have sample apps for Angular, for React, for vue. And for Blazor, and we’re like, “okay, well, Microsoft is doing their own thing with, you know, deploying Blazor desktop apps.” So we’re not sure if we should continue that effort with Blazor on our side, too, because it would be you know, kind of alternative, almost kind of competing effort. And to convince people to, you know, use Blazor but use Photino rather than use Blazor that they already have and have a Blazor for desktop deployment instead would be another argument to make.

So we initially did said, “okay, maybe we you know, should drop Blazor support, and concentrate on the other web development frameworks.” And the community said, “no.” The community said they wanted it, there were a lot of people who were using it, and we had some people in the community get involved and keep up to date, keep up with the changes that were made to the Blazor repositories. And Blazor is still in there. So we’re still moving forward with it too. Thanks to, especially thanks to, a lot of people who have helped us in the community; because you know, we’re not doing this is not our job. Photino is not our job, right? This is a open source voluntary effort from us. So of course, we don’t have 40 hours a week to put into this. So we rely on other people to you know, come in and say, “hey, no, we really want this, we’re going to contribute, we’re going to help.” And they did. And so Blazor is still there.


A Request To You All

If you’re enjoying this show, would you mind sharing it with a colleague? Check your podcatcher for a link to show notes, which has an embedded player within it and a transcription and all that stuff, and share that link with them. I’d really appreciate it if you could indeed share the show.

But if you’d like other ways to support it, you could:

I would love it if you would share the show with a friend or colleague or leave a rating or review. The other options are completely up to you, and are not required at all to continue enjoying the show.

Anyway, let’s get back to it.


Jamie

Excellent. Okay, so it supports Blazor, has been updated to like a vLatest stack of .NET. But like, can I literally just bring in any JavaScript, CSS, anything, and it just because obviously it’s “just” a web browser, right? But it’s running that on my machine.

Otto

Yes. You can either start a new project with an HTML file, JavaScript, CSS,. Or you can use an existing project of yours. Let’s say you have a, a vue app or an Angular app or react app or something, you deploy it, you build it into a dist folder, you link that or - you deploy it directly into the we have the www root folder, deployed into that folder - link it to where the entrance file is usually an index. And that’s it, you know. Photino will spin up, create the window, will load your web application from there. And you still have all the web tech help as well in the Photino app. In Photino applications, you can hit F12. Bring up the dev tools. So you can on any operating system. So you can do that still. Right? You can still have all The stuff that you’re used to, on a typical web application, you’re just now having it run as an application in Photino.

Jamie

Excellent. All right. So you’ve still got that sort of modern web front end part, but with also being able to talk to the low level system, right? So you can store files on disk? You can maybe play around with, you know, all the other API’s that you have access to locally, right?

Otto

Correct. Yeah. And you can, for instance, something very conveniently, do like I want a borderless window, right, I don’t want to Chrome around the window, I don’t want to minimise, maximise close buttons. I wanted the app to start up in full screen, cover the entire screen and not give the user an option to close the window. Right. For instance, when you make Kiosk Apps, right like this, where you want people to use this app and only this app, nothing else. Disable other system calls, make the app full screen, disable the Chrome, and then that’s the only thing people can interact with is the application that’s running nothing underneath, right? Very helpful in that sense. So you know, if you have devices where you have a lot of different people using it, you don’t know who’s going to use it, what they’re going to do on it, but you want to restrict what they can do; a very good solution to do that.

And, yeah, you have, you know, the UI, just like you design it in, in your web application, menus, and whatever. But you can also - I mean, that’s something that we’re working on. And that’s in our pipeline, very high up in the to do list is the native window menu management, menu creation. So that you have that typical Windows menus that you can show if you want to the typical Mac navigation and menus, navigation bars, menu bars, and so on that you have for Linux as well. So that you can create menus based on the look and feel of the operating system. But have these menus still talk to your web application that runs.

Jamie

I like it.

Otto

Now that’s high up on our, on our to do list is long, right? It’s a lot of things people request a lot of things that we know we want to do. A lot of stuff is on our to do list, and one at a time we try to work ourselves down this list.

Jamie

Sure, sure. And I guess that’s one of the things that happens with open source development, right? It’s like, a bunch of people come along and say, “it’d be really cool if you could do this.” And you’re like, okay, certainly. But we’re all you know, essentially, we’re volunteers. And, you know, there’s a reason why the response of sure if you want to code it and put it in a pull request, and we’ll take it. There’s a reason why that exists. Right?

Otto

Exactly. Exactly. And we’ve had that, right. It was instances where people said, “hey, this would be really cool to have. Is it okay, if I do this? Would you accept it?” Absolutely. Right. Do it. No, put in a pull request, we’ll check it out. And if everything checks out, it will be in the next release when that stuff happens. So always very glad if people do that, because it will help us and help everybody else who wants to use it also.

Jamie

Great stuff, great stuff.

That’s that’s another thing that I guess a lot of web specific developers don’t really face. So let’s say I want to do a UDP request, right? I don’t want to use sockets. I don’t want to use TCP. I don’t want to use any of those high level abstracted stuff. Or maybe I want to use gRPC. Right. If I want to do UDP or gRPC within React, Angular, whatever, I have to use, like plugins and pull in extra code, and it has to remap stuff. But I guess because it’s running on the desktop using the API’s available for the computer that the operating system is running, putting in a request for a - I’m going to say non standard, but I mean non TCP - a non standard web request is relatively trivial, right? As long as the framework you’re talking to understands it, because that can… yep.

Otto

Yeah. Because I mean, ultimately you have when you do Photino applications, you can you have choice of how deep you want to get into the nitty gritty underlying system development as well. Right. You can use Photino as a NuGet package and just concentrate on your UI stuff right, and do that. But you can also use Photino and get you know the level that’s on the uncoupled level where you get the stuff that’s based on .NET, and work in C# on the .NET level that then builds your Photino application in .NET. Anything you can do in .NET, you know, whatever you want, whatever calls you want to make, whatever services you want to use, you can make those then communicate through the callback loop with your application, right? It’s just the level of - the how deep you want to get into the development on a system level just is up to you. You can either do it very high level, and just get the finished compiled library to deploy your application. Or you can get a level deeper and say, “okay, I’m getting the .NET part of the Photino application, also, I can see the code for it, I can make changes to that code. I can expand it, if it’s something really cool, make a pull request for it, and we’ll adapt it even.” But yeah, and then you say, “hey, I’m gonna, you know, spin up some gRPC calls, do that in .NET. And then have, you know, whatever communication parameters come to and from the web app communicate with that,” of course, you can do that.

Jamie

Excellent. Okay. So what are… let’s say I’ve got this web application, I want to put it into Photino, I want to do some extra stuff. What are some like specific issues I might run into? Because it’s a slightly different paradigm, right? I’m used to, “my app runs in a browser, it talks to an external service, perhaps, or a number of external services, and then does things inside the browser.” If I put everything inside of an application? Perhaps I could put those services inside of Photino with it?

Otto

Yeah, I mean, that it just depends on the level of architecture of your application, and how complex it is, I guess, right? If you have an app that when you build it, and you can build it into a dist folder, and you have an index, where this app starts, once it’s built, and then it starts and builds and runs from there. It will be quite, you know, easy to just say, “okay, I’m moving these contents from my build folder, into the www root folder. From Photino link to the starting file, index, probably.” And have Photino take over from there. Probably very, very few issues.

However, if you have a very complex application, with a very complex build process, maybe have a separate server spin up for your services, you have communication and security levels for … it’s going to be a trial and error kind of thing. How well, it will just, let’s say “just” work or whether you have to make adjustments for it, right. It’s kind of like if you think about it, similar to you have your app and you want to deploy it, right. Let’s say you want to deploy it to Azure: if it’s a standalone app that has one entry point, and everything is contained, and you want to deploy it on Azure, or on AWS, it’s going to be fairly, let’s say straightforward. If you have an app that, you know, spins up and it spins up a local server, and you develop it, debug it, and then you also spin up, let’s say, another node js server for the services with your API’s on and all kinds of communication related things. And then you have to maybe have a third one or another security level that you need to build. And then you have to deploy all of this to Azure, or to AWS. It’s, yeah, you can do it. Right. It’s not going to be as straightforward, though, is the first example that I gave, right. So it’s kind of like the same analogy here. Instead of deploying the whole package to a web server, right, you’re deploying essentially, into where Photino encapsulates it and has it, you know, contained in itself closing the analogy, I guess it’s fitting in that sense.

Jamie

Okay. Okay. So then, like, as long as you are taking care of things like this, you mentioned that, you know, so you have an API for security or a service for security. As long as you are taking care of that, within itself, the service itself, the application itself is written in such a way that it is taking those considerations into, into taking those issues, potential issues into consideration. Then it shouldn’t be a huge problem to lift and shift, but you could run into some issues. It’s worth, like you say, it’s worth trying out. Right. And don’t just go, “right. I will push the button. I will deploy this Photino. And itt’s done!”

Otto

Yeah, I’m not going to make that statement that yeah, you just put it there and hit Run and it’s good. You know, because there were people or companies or organisations out before who have said that, and it just didn’t work. We all know that if somebody makes a statement like this, a bold statement like this, there is - you know, the first thing people do is, you know, find a way to to break it to say, “okay, that wasn’t true, which is it?” So that would be a bold statement to make, but it should, you know, in theory, not pose too many issues in that sense.

Jamie

Sure. And I feel like its on us developers who are using whatever library, framework, or tool or system. When we use it, it’s on us to do our due diligence to actually make sure it works, right. It’s not on the library creator. It’s not on the tool creator. It’s on us.

Otto

Yeah, I mean, that’s really what you know, Photino isn’t going to do a magic management job for your application, right? Your application, your web application is supposed to build into a folder. And that’s the built app, right, the built web app. And if that folder has an entry point, that’s the index, or it doesn’t have to be index, you can call it whatever. If Photino finds or is given such an entry point of, you know, this is where the app launches, then Photino does its job, right? If the app itself then needs further management, or whatever, of course, that’s the developer, then.

Jamie

Sure. Sure, that makes sense.

So what about some of the newer features that are coming down the pipe then? We’ve said, so a little bit of insider baseball. When we do episodes like this, we fill in a little document to talk about some of the features we want to talk about. And you’ve mentioned to me, you mentioned to me a number of new things that might be MIGHT be coming down the pipeline, I’m not trying to hold you to what you’re about to say.

Otto

Yeah, yeah, I personally am very interested in two things. The first thing is mobile support, which is a huge undertaking. And the second thing is Raspberry Pi support. And I just last week, got my hands on a Raspberry Pi Four. And I’m going to, hopefully, this week, if I find the time, start messing around with it and see what we can do. Because I have a feeling it would be a prime example of a good scenario where Photino can make a really, really good case. Because Raspberry Pis, small devices, all you need is a Raspberry Pi and a monitor, and you can run something on it, if I can run Ubuntu apps on the Raspberry Pi, if I can run Photino apps on the Raspberry Pi; this could be anything from IoT devices to kiosk type devices to whatever right. I mean, this is the implmentation or possibilities for application are very, very massive in that sense. So I’m really really personally interested in that. And this could go either way, right? This could be something I plug in deploy, and it works. Or this could be something I plug in deploy and sit there for three or four weeks and try to make it work. And so because I haven’t started on it yet, but I got my hands on that on the hardware. So that’s for me next on my pipeline, at least.

In general, the most requests or most things that people talk is mobile, having iOS and Android support for it. It’s going to be a massive undertaking to do it, but it’s in the pipeline to do this. We just have to find the time right to do it. And to sit down with the whole team. And maybe even get the community involved too, that would be amazing. But that would make a big change as well. We already have released a lot of changes in the version we put out earlier this year. So version two, having mobile support on it would be another massive change. It would be something really, really helpful for a lot of people who want to do to true cross platform, not just for desktop, but then also mobile deployment. So hopefully, also something that we get to soon we’ll see.

Jamie

I like it, I like it because I can see low powered Arm devices being kind of the future for a lot of things. Like I don’t know what it’s like throughout the rest of the world, but especially in the UK as an example. Commerce, right, you go into a store, you go up to either a self service machine or you’re dealing with someone who’s sitting at a checkout. They’re sitting there in front of a full computer that is running - and they’re the you know, not weak computers. They’re really powerful Intel style x86-64 machines sitting there, running what is basically a web app? Right? So I can see that being a great, really quick way for a lot of companies to immediately reduce their power throughput. And maybe even dare I say, CO2 footprint. Because you drop from a super, a relatively super powerful desktop computer that is an office style desktop computer, all the way to - potentially - all the way down to a Raspberry Pi, which is like five volts three point something amps or something like - I don’t know, the actual, please let me know. But yeah, I can see that as being a really cheap way to immediately reduce the carbon footprint of commerce, right? Or perhaps an office right, or something like that?

Otto

Yeah, of course, right. I mean, the thing is also, I mean, in general, the machines in most scenarios are in a lot of scenarios, they don’t have to be as powerful anymore as they used to be. Even in offices, right. Even if you have office buildings, a lot of times it would be sufficient to have a good monitor, and a good internet connection, right. Because if you have a good monitor good internet connection, you can run a browser with a web app that runs on a server, server side web app. The hardware on a client doesn’t really matter.

Or if you have some remote to log into it, if you have a lot of VMs or something to run on. The client machine really doesn’t matter anymore. And here in the US at least, I don’t know if it’s similar in the UK. But in the US, we see a lot of stores have, you know, these self checkout self payment type of things, where you have a screen that you interact with that is powered by a computer, which really doesn’t need a computer like this, right. You need a screen and Raspberry Pi glued to the back, I guess that’s all it really needs t make such you know, grocery stores, self checkout things, or restaurants even - like we have restaurants where there’s a screen on the table, you don’t even interact with the server anymore, you just have a screen where you order. And then in some places, a waiter comes and brings you your order some places, the screen tells you your order is ready and you walk up to the kitchen desk and pick it up yourself. So all of this is just powered by a screen on each table. So a lot of applications, potential applications for this kind of technology.

Jamie

Yeah.

Otto

So that that’s why it’s something that I was very interested in. That’s why I’m going… that’s my next step to get started on the next Photino feature.

Jamie

Absolutely, I like it. I like it. And like we said just at the beginning of this last section, we’re not holding you to account for if this doesn’t ship before the episode does, o before the end of the year. There’s no time limit. This is just things that Otto is looking into and is excited about.

Otto

Yeah, oh, no. definite date on. The date is I’m starting this week, that’s the day to get

Jamie

Excellent, which will be in the past by the time this comes out.

Okay, so what about getting started with Photino then? Is the website the best place to go to? is there a GitHub repository? What’s the best? I mean, I’ll put the links into the show notes.

Otto

So we have a website with documentation on it that lists how to get started. What we also have is we have sample apps that you can get to get started with to get familiar with what the architecture looks like, where to put your app, where to write your your app code, where to write your C# code - if you want to get into the .NET level. So we have these sample apps that you can get. There’s a sample app. Let’s see. I hope I don’t. I mean, if I forget some look yourself, but there’s an Angular sample app, there is a React sample app, a vue sample app, there is a Blazor sample app. There is even a Threejs sample app - Threejs is a 3d modelling, 3d gaming engine in JavaScript, where you can also make games with Photino and we have a little sample where I created a Pong game - you know, with old school Pong bars and the ball that goes back and forth, but in 3d. So I created that and put that out as a sample app for three years. So yeah, people could make you know, games actually using Photino if they wanted to.

And then there is a general sample app that has some of the system calls explained and shown like, “okay, here’s where you make your window, your starting window certain size, how you place it at a certain position on your desktop. When it spins up, how you make it full screen when it spins up, when you want to hide the chrome outside of the window, you know, so people can’t close the window, that sort of stuff,” as long as a sample app on there. So that’s the first thing you can do, you can get your hands on one of those samples.

But of course, you can also go to the repo and get the source code for it and compile it yourself, if you want to get down and dirty, so to say, in the lower level stuff can do that too, right? And make changes there. Play around with that, even to the native project. That’s the native code that then runs or is compiled for the individual operating system that handles all the native communication. So that would be the C++ project, or Objective-C project for Mac, where you’re really at the lowest level to handling, “how is the window even created? Right? Where is the window hook managed?” And that sort of stuff. That’s all compiled into native project. So just depends on how deep you want to get into it. That’s the level of the project that you would get to get get into it.

Jamie

Excellent. Okay. So what I’ll do is I’ll get a link to some of those things and put them in the show notes. What about catching up with you Otto, are are an online person? I mean, some people are some people aren’t.

Otto

Yep, I’m online. Almost 24/7. Yeah, I mean, yeah, we have contact, you can contact if you have any questions, suggestions, or any anything on the Photino website, we have email that you can contact us with one of us will get back to you. You can also find us on Twitter, where you can comment, message, whatever as well. Getting back can back to you can get back at you there too. Yeah. So definitely always looking forward to people with interest.

Jamie

Excellent, excellent. Well, I mean, I’ve had a great conversation talking about Photino with you today Otto. So thank you for being on the show. And I think I’m going to go ahead and start playing around with this afternoon. See what I can build sure that an idiot like me could probably build something with it as well. You know, just create react app hello, world and just put that into Photino and see what happens.

Otto

Of course, absolutely.

Jamie

Excellent. Well, thank you for being on the show Otto, I’ve really enjoyed it.

Otto

It was a pleasure. Yeah. It was very, very nice. Thank you.

Jamie

Thank you very much.

Otto

Thank you, too, and have a wonderful day.

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 Otto Dobretsberger. 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/review for ways to do that - reach out via out contact page, and to come back next time for more .NET 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