Herding Code 246 – David Ortinau on .NET MAUI

Jon talks to David Ortinau about .NET MAUI.

Download / Listen: Herding Code 246: David Ortinau on .NET MAI

Link: Introducing .NET MAUI – One Codebase, Many Platforms (.NET blog)

Transcript:

Jon: Hello, and welcome to Herding Code. This episode is being recorded May 16th, 2022. Today I’m talking to David Ortinau now about .NET MAUI. Welcome David. 

David: Hey, good to see you. 

Jon: Okay, so let’s start with the basics. What the heck is .NET MAUI? I, I mean, I know there’s kind of Xamarin thing out there forms and now there’s .NET MAUI.

David: So .NET MAUI, it stands for multi-platform app UI. And it is really the evolution of Xamarin. So Xamarin is it started, you know, like 10, 12 years ago, Mono framework, Mono Touch, Mono Droid it was essentially saying, Hey, let’s take what Apple and Google are doing these mobile platforms that are super cool, and let’s bring it to .NET developers.

And it was an open source thing, you know, at least as far as the runtime and things like that go but it was kind of out there in the community. And then what, six years ago, Microsoft acquired it. and then five years ago, I joined Microsoft to be the program manager for Xamarin forms, specifically, the that, you know, we favor XAML, but you can totally just use C# or F# actually to write your mobile applications, but it was a very mobile focus thing. Right? So, we have been doing in the .NET space over years is, unifying, taking all these things that were disparate, they all had different routes in terms of where they started, but .NET You know, we anything with .NET and be able to reuse not only the technology, but our skills. So. you know, dot .NET framework turned core .NET five shipped five unified, some of the model pieces and some of the BCL pieces BCL standing for base class library.

And then, grandiose that was when Xamarin would also become really a core part of .NET, 

however pandemic things you know, best laid plans of mice and then things didn’t quite go the way we want. 

Jon: Well also, plus it’s, it’s a big job, right? I mean, like uniting everything and you’ve had like .NET and C#, or like there’s similar specifications, but like the whole way that, that mano and Xamarin worked always seemed like it was amazing to me that it actually worked right. 

David: Yeah. It was the ingenuity of some very smart people that made it at work. But you know, outside of Microsoft’s doors, really, even before everything was mostly open-sourced there was a lot of duct taping to make things work. Make it a good developer experience. So we’re now able to in the open source era and as part of Microsoft kind of rectify some of those things. So, you know, we’re adopting SDK style projects, the same project system that the rest of .NET uses. And, and we’ve also added platforms. So now. Give a first place support to Windows and Mac desktops. So that’s a big really have. I mean, we kind of had UWP but that really started because we had this. Windows phone thing. You know, and I don’t want to like trigger anybody, but it was pretty cool. 

yeah, so, I mean, yeah, you’re absolutely right. Tons of stuff that, that have ne has needed to happen under the hood from the runtime, the base class library, unifying all the API APIs and. In terms of Xamarin, there’s some things that we did with types for end, float and end and things like that, to, to make things work with apple that are non-standard dot .NET things.

So in .NET 6 we unified our types, which, you know in the short term, there’s definitely some pain, not gonna, not going to sugarcoat that but in the longterm, you know, we’re going to see some nice gains, and consistency across the whole thing. So very excited that we finally, after years of transition we’re bringing.

To full GA fruition here in .NET 6 Well, as part of the, as Scott, hunter would like to say the .NET 6. 

wave, I think wave works really good with the name .NET 

Jon: Oh, nice. Nice. Okay. So, so the. 

Top level I’m totally not even a .NET developer. I haven’t been keeping up the high level is I can write C# or .NET code and I can build applications. That’ll run on Android, iOS, Mac, and Windows. 

David: Exactly and their native applications. That’s a key differentiator. So that means that when your app runs on iOS or Android or Windows or Mac, it’s using the same premiere 

UI toolkit that the manufacturers say, this is the way you should build apps.

Jon: Okay. So it’s not like a, cause I think that’s been as a workaround for a long time, people are building, for instance, like. Electron apps or stuff like that. Right. Where, so you, it technically will run cross platform, but it’s really running a browser and it’s running like, it’s, it’s not that like native or even going way back, like Java or stuff like that.

Right. But you didn’t have this like native app. 

David: Yeah. Yeah. You run into, what’s known as the uncanny valley in some situations, depending on how well that technology is able to mimic the platform.  you know, there are certainly other you know, platforms out there are frameworks out there that do a really good job at it. However yeah, the hybrid thing, which we typically call those as hybrid frameworks  you end up needing to make some compromises in terms of what you can access on the native platform or what kind of UI experiences you can create.

But you know, with straight MAUI, you don’t have those compromises plus you get to use .NET. So it’s one language, right? You don’t have to drop into objective C swift Java or Kotlin your code. You know we’re very open, you know, opened to using whatever technologies that you really want to be able to use.

 But in addition, all of that, we actually do have a really cool hybrid story. So you are a web developer. You’ve heard of this thing. 

Jon: Yep. 

David: Yeah, yeah. A little familiar with that. So what’s really interesting to me about this and it seems to be resonating with some of the early adopters of MAUI a Blazor or just a Blazor component and you can drop it into a native MAUI and it does run in kind of that hybrid context. However, because that code gets compiled as. C code. There’s really not that same browser interrupt barrier that you would normally and again, because you know, some UI frameworks such as Blazor do a really good job with helping You style your UI.

You don’t end up so much in these uncanny. And you can use it for what it’s appropriate for, but then if you really need that native UI experience, MAUI controls are right there in the same application. So you can quickly stand up an application, share your code with web and you know, sky’s the limit.

So really cool to see. We’ve even seen some, just some apps shipping to the app stores already using that Blazor hybrid with MAUI scenario. And

Jon: So it, so some of that seems like W you mentioned the word hybrid and you know, some of it seems like it makes me think of, am I paying like a big performance penalty or is it, you know, like how does it compare to what I guess part of my question here is what apps are not a good fit for that hybrid scenario. The Blazor hybrid scenario.

David: Right. Yeah. So, The browsers have gotten really good at, you know, execute. Quickly. So I, I think that that, that window of what’s not a good application is getting narrower and narrower. whereas, you know, a few years back we would have said, well, you know, if you adopt phone gapper or Cordova over one of those, early hybrid frameworks it would be much better known.

What’s not a really good application for it. I would think that Anything that’s heavily graphic intensive may not be good. anything with heavy animation may not be good. But again, there’s, there’s gonna be  exceptions to these rules. So the good news is, is that if you stand up a MAUI app and you start building in one direction, let’s say that you like, Hey, I really think I’m going to be able to get away with Blazor and it’s going to accomplish all of my needs.

And you get, you get a couple miles down the road and that’s not working out. You don’t have to trash your application. your .NET code will work just, just swell without that browser context. And you can stand up native UI in its place. Without starting your application over again without, you know, starting from scratch. So I think that’s a, that’s a pretty cool way to think about it is, you know, don’t overthink the approach that you take. But also you know, within within a Blazor Hybrid scenario, you still have access to all the non UI stuff that a Maui application provides such as sensors file System access notifications, local notification.

 System tray, you know, all, all the things that you would want to have access to in a native application is all there at your fingertips, even though you might be standing up UI that’s HTML and CSS. So yeah, I don’t, you know, I don’t have specific examples for you. We’ll see what people do. 

Jon: Yeah. Well, and a lot of it, right? It goes into like, you test it and you see what works. And I, like you’re saying browsers have gotten, we’re recording this, this podcast over video in a browser now. Right? 

David: Yeah. 

Jon: The thinking of doing that years ago, it would be like, that’s just ridiculous. And it’s like, and now I guess most platforms don’t have to spin up a whole browser. This there’s this like web view to are these native built-in browser controls. 

David: Yeah. Yeah. So WebView2 is, is something that we actually use on the desktop. We use it on, on Windows right now. So when you are building a a hybrid application Blazor hybrid application with Maui, you’re going to end up with web V2 on, on Windows on, Mac you’re going to use w was it WK with. And I think that’s the same thing on, on iPhone. So, I know that a WebView2 is coming to more platforms. we see. don’t have any announcements, I’m not announcing anything. But I’m pretty sure that that that’s out there. So, you know yeah, they’re, they’re super performance. You can bundle it with your application.It can be acquired separate from your application depending on what the OS allows for. So there’s a lot of things you can do with the browser these days. And, and even on mobile context, they can run super, super.

Jon: So a lot of what I think of mentally. I still am in this, you know, MAUI and I’m feeling, I initially think of mobile apps. but, but I have to like reset my brain because going way back when that .NET first chipped, and it was like, cool, I can build, you know what wind form applications. And, and then people are like, can I run it on Mac?

Well, you know, and it’s like, yeah, with mano sort of, you know, but not really, you know? And so like Can I really build like a full featured, like desktop application and it runs on Windows and then I can ship it and it runs on a Mac too. 

David: Believe it or not. Yeah. Yeah. And you know, so we, we have done several things that are different than Xamarin to enable those, you know, desktop scenarios that differ from mobile. So one of those is multi window. So you can have multi window applications when you want to. We are working with several customers that I cannot name, but really cool customers to build out new desktop application experiences. And, you know, their requirements are pretty demanding in terms of performance, in terms of multi window custom MDI. Implementations MDI is multi document interface, something I didn’t learn until we started doing Maui and realized that we needed to do desktop things. So I needed to learn what, what is a desktop thing, you know?

 And so, you know, that’s essentially MDI is the kind of thing you would experience in Visual Studio where you can dock and undock panels, and you can have things all floating around inside of Europe. Your primary window. So, you know, then mouse, gestures and pointers and not pointers, like, You know, sciency pointers, but, you know, your cursor, You know, I want that to be a finger, I want that to be a hand or whatever. So all of these things are new in MAUI. And that’s not to say that we’ve got everything immediately at GA that you could ever imagine for a desktop application, but that’s where, you know, our vendor partners that build awesome components step up and because, you know, sync fusion to lyric dev express, I, you know, I could go on and on.

Have desktop components and widgets and they can adapt them for MAUI and they are, they’re doing just that or they’re building new controls. So so far we have not hit a limit or a blocker in terms of What we can Do for desktop. What I think is really cool is, I mean, I don’t know, years ago, and you’re given that you’ve got, you know, web developer experience. Do you remember the whole mobile first design? Kind of wave that happened there and it kind of swept the world. It’s like, okay, when you’re going to build an application, that’s going to run multiple places. Start with your smallest screen. We build out from there… 

Jon: That was actually, my next question is like, how that runs well on a phone and a, you know, huge desktop, right. 

David: Well, I mean, the good news is because  the Xamarin has always been and and now MAUI of course, inherits is it adapts to different screen sizes and resolutions? So all from one project, you can have one set of images and SVGs and raw assets and And then you, you stand up your layout with the appropriate constraints and it will adapt to whatever screen you put in.

And then we’ve got a whole host of solutions for, you know, markup extensions so that you can do on platform for, you know, Hey, if it’s running on Android, do this one thing, or adaptive triggers, you know, if I, it, which is a akin to a media queries right.

Jon: Okay. 

David: So essentially, you know, if, if the screen gets to be larger than 1200 pixels, Add another column to the layout, or if it gets below that remove that right-hand column, because I don’t have room for it anymore.

 That kind of stuff, super easy to do with, with .NET MAUI, or idioms, you know, like, Hey, if I’m running in a desktop context to use a menu bar, if I’m not running in a desktop context, do a fly out menu or, or however you decide to design your application. So. Tons of options. pretty Much you can do anything you need to. And if and if those things, you know, start to make your, your UI super muddy, you can always say, Hey if I’m running on desktop, use this desktop specific layout it’s a separate XAML file or whatever. And then, you know, if I’m running on mobile, I’ve got a separate iPhone or, or mobile layout. So tons of ways you can do it.Plus we support multi-target. I could go on and on. 

Jon: tell me about multi target in there. 

David: so-so with and this has kind of been supported, Claire Novotny RO a library. I don’t even remember what exactly was called. Was it SDK mobile tools or rescue? I don’t know. but it was a way in which you could use this underlying multitask editing functionality and .NET, where with some conventions.

 You could say, Hey, I want this file to work on this platform. And I want this file to work on this platform. And they’re basically sharing an interface or they’re sharing the same class at their partials.

Jon: Yeah. 

David: And, so it allows you to do these multi-platform. From a single project typically. Prior to that, you would end up writing all your Android code, for example, in an Android specific project.

And then you’d have a separate project for all your other platform stuff. And you know, this is just a nice way to bring it all into one project. As developers we’re focused on our app. We really don’t want to be thinking about as cross-platform developers. We don’t want to be thinking about each individual platform.I have to worry about four things, four different platforms. The less I can focus on the value of my one app. So that’s what we’re able to do now. We’ve kind of taken everything that, that Claire, and in that, that library supported and we’ve worked closely with the project system teams and all the other stakeholders within Microsoft to say, Hey, let’s bring this up to snuff for what we want to do in MAUI.

So now in MAUI, you can do all those things. You can have all your code all in one. No matter which platforms it needs to compile for, you can use conditional compiler arguments. You can use file name conventions, you can use folder conventions, and the build system will pick up the right things and do all the right things.

So your Android code runs on Android, only your iOS runs on iOS only, and it works in Visual Studio and they’re adding support for it in Visual Studio for Mac too. So that when you’re looking at a file, for example, you can go up to the top of that file and say, okay, Show me what this looks like for Android.

Show me what this looks like for iOS, and it changes your code to show you this is what’s going to run when you’re on that platform. And this is what’s not going to run, et cetera, et cetera. So it’s very powerful. Very cool.

Jon: So let’s say I’m developing, like right now, I’m, I’m doing this podcast on Windows. I have my laptops, a Mac. Do I need to, if I’m developing across all these different platforms, do I need to be jumping around and testing and you know, running on each or what’s the, like, obviously it’s important to test on the actual platform you’re shipping for, but I don’t want to be doing that all day long.

So how, you know, what does that experience feel like? Is there anything we do to make it easier so that I’m not having to run around in 19 different devices and test everything all the time? 

David: Right.

So on Windows the story is really cool because you of course can be building for Windows. And actually when you start up a new MAUI application, Windows is the default target these days. This is a change we just made previously, it had been Android. And so that makes for a really there’s, there’s two reasons we. One it’s the faster build cycle, so you can be more productive and, to, it has the least requirements in terms of setting up a bunch of other junk. So, so you immediately get

Jon: I D I just have to say when I’ve like, been like, okay, today’s the day I’m going to be a Xamarin developer and I would get started. It’s like, I would get sucked down into Android developer to all hell a little bit. Like, it’s fine. I know I got to get there eventually, but I don’t want my two or three hours to be spent, like messing with Android builds. Right. So that actually sounds. 

David: Yeah. So there’s still more work coming to kind of smooth out the whole Android side of the setup process, because it is quite a few steps. But yeah, so… 

Jon: I’m sorry to interrupt you here too, but there is, there’s this Android sub system for Windows sort of thing too. Is that part of that story or like, I know you can do it manually, but is that going to be like part of the actual main flow in the.

David: So it is not part of the main flow right now. It is something that we think would be really cool to add to the main flow in the near future. and we’re talking and we have had conversations with the team that kind of owns that to say, Hey, what can we do to make this a better developer experience? Related to it.

I happen to have seen a, a, an extension for Visual Studio that hopefully will be available in the next couple of weeks. Not on an official one, it’s a community one. But essentially it will help you to very quickly get your Windows subsystem for Android started. Added to Visual Studio as a device target.

 Because you have to go through a bunch of steps right now to get it to work, right? You have to go figure, you have to go, first of all, install it. Then you have to era how to get it started. And then you have to go figure out what your IP address is. And then you need the magical incantation from ADB, a specialized Android command line, only tool to connect. 

Then it’ll show up in Visual Studio. So this, this extension for Visual Studio, we’ll do all of that for you. 

So, You know, you combine that with Android, mobile and tablets, and then you also have the Windows, which is your default, but then you add onto that we have this iOS hot restart feature enables you to take your iPhone.

With the little cable that you probably bought it with and you plug that puppy into your computer, your Windows machine. And it becomes a target directly from Windows. Just all you need is the the iOS device and your Windows machine. And we guide you through the process of making the connection and you can start debugging right from there.

So really from Windows, the only target you cannot Actually interact with you can build, but you can’t interact with would be a Mac desktop application because we can’t emulate. At this time. And then then the additional scenario, which is also super useful from Windows is the iOS remote build host or the Mac remote build host.

So this is, if you do have a Mac, you can do. After the side, lid closed, if you prefer. And you can connect to it from Windows and it will actually show you your simulator directly on your Windows UI. And we actually in the upcoming Visual Studio release have. Represented in the Visual Studio UI as part of our XAML live preview.

 And what’s super cool about that is we’re adding the ability for you to actually inspect the UI of your running application and that will navigate to code for you. And just really this is, this is what a lot of us have been waiting 

for 

Jon: Yeah. 

David: All that ruling right back to the running applicant. Cause like XAML hot reloads. Great. But then if you want to go to the UI and be like, Okay. I see it on my screen. Where is that code Where’s that coming from? Right. and with this functionality, you can poke at it with your cursor in visual studio and that will navigate to your code And then you can go make your changes. And so yeah, to have a go to  devices. 

Jon: okay. So that is really good. And that’s the development experience? What about the like testing, like CGI kind of thing? What do you recommend for. 

David: Yeah. So in terms of what we recommend really doing on-device, unit tests is, is the biggest bang for the buck. there’s also the ability to do on device UI testing. However, that tends to be quite costly. and sometimes flaky. So the return on investment there is not awesome. so the more unit tests that you can be writing and then getting them to run on devices, you’ll see, good results there.

 With With some of the app center and Xamarin UI test things, which some of that though, some of those libraries still need to be brought up to .NET six. but then you also have other open source frameworks, like Appium. You can utilize some of those even on your local machine. but You know, with, with that coolness comes complexity.

So really, you know, unit tests are the way to go. and if you need to run across a breadth of devices, then the app center test cloud is available.  If you’re willing to pay the pretty penny, because, but then, but they, you know, they have tons of different devices and we utilize that. to run tests against MAUI, and our control gallery and all the tests that we have. But we’ve kind of shied away from doing UI tests these days more towards doing on device unit tests.

Jon: Okay. So what’s the let’s say I’m solid now. I want to get into this. I’m assuming this comes out right after, you know, after the announcement at bill, you know, so what, what, what do I actually need to do in order to get started building now? Yeah.

David: Yeah. So the best way to get started is to download the Visual Studio preview that will be available at build the preview channel, a Visual Studio will carry the GA bits of .NET MAUI and it will give you everything you need for Android, iOS, Mac, and Windows right there. And so with that simple install, Check the .NET MAUI box at the install. You can start developing right there. It’s file new MAUI application and you’re off to the races.

Jon: Okay. So, you know, going way back, we talked about like open source background and open, you know, Xamarin being open source and stuff like that. If I’m not using. Visual Studio what’s. Am I still able to get the bits, you know, open-source and do a little more work to get things done. 

David: So with Xamarin, that would have been a hard, no but the cool thing is, is that because we’re now part of .NET, you can install MAUI directly from the command line using .NET itself. So we are, what’s called an optional workload, in .NET. So we are part of that .NET. but we’re also Because we are gigabytes of things. You know, we don’t want to force that upon everybody that just wants to install that .NET. So you can install .NET with the installer, from the .NET website, and then you can go .NET workload installed. MAUI and .NET workload installed MAUI. We’ll go ahead and grab all the things that you need to be able to build and run from the command line. And then you could use, you could use Visual Studio code, you could use another editor of your preference. they will all have differing support for C for XAML, you know, so you’ll have to decide are those things worth it? you’re definitely going to get the best experience in terms of hot reload .NET, hot reload, which also works with MAUI Blazor hot reload. And if, I don’t know if that’s actually the term we use for it, but you know, the hot reload that works with the Blazor and the CSS things, 

Jon: Yeah, prettysure that’s hot reload to there. 

David: Yeah. Yeah. I think that that will work, in some scenarios, outside of Visual Studio with like the .NET, what does it a watch or whatever that works for those scenarios, but that does not work at this point for MAUI scenarios. 

Jon: Okay. And the, like, I always have to remind myself and think through this. So there’s hot restart, which is detects code has changed and restarts the application. And that’s okay. But I lose my state. I have to wait while the app kind of restarts. I have to get back to where I was. And what’s crazy about hot reload.

Is it actually updates just the code and injects it in. Right. And I don’t have to restart my application. I don’t have to click through the app to get where I was. It’s just updates. 

David: Yeah. Yeah. So it reapplies that code. And then reapplies the state that it replaced. So yeah, you don’t, you don’t lose your, your navigation, you don’t lose your view state. it’s super powerful. And I think that a .NET Hart reload which does a method, body replacement, essentially. So,  and I’ve had really a lot of fun with that over the past week, building out samples and changing code and, very rarely do I have to restart my application.

Hopefully in the future, I’ll never have to restart my application. I can just keep coding. But yeah, there’s a lot of different things you can do with it. And the hot restart the way you described it as definitely accurate the the additional nuance to it is when we talk about iOS hot restart, we’re essentially taking that same concept, but applying it to the ability to, to plug your ILS device into your. A Windows machine. So we can, we can take that same hot restart concept further. We actually use it under the hood on Android development for fast deploy. And we could use it on other platforms as well to 

tighten up the developer loop so that you have to do less restarting of your application, less rebuilding of your application. 

Jon: Yeah. Yeah. W and that, like you said, that cycle of like building and re, like, it’s got to be compiled for that platform and it’s gotta be shipped over, they, you know, install 

David: We’ve developed applications like that for decades, you know? Like, but now, like if, if, if I get up in the morning and start to build an application and my hot reload doesn’t work, it’s like, ah, scrap it. I’m not working. We’ve become spoiled.

Jon: Okay, so I’ve just got a few more questions. One is, so the obvious kind of like selling point for me is I’m a .NET developer. I can use my C skills. I can use my familiar tools. I can use my libraries. I can use code I’ve written and all that. And you get packages. That’s the main selling point for me.

Is that really, like, if I’m, if I’m talking to other developers about like, Hey, Maori’s awesome. Is that kind of the main thing? Or are there other, you know, like things that, cause there are, like you mentioned, there are other things that we talked about electron there’s like flutter there’s, there’s some other options.

So like how is there anything else I should think of beyond that. 

David: So it is .NET. I think one of the other major selling points is You can stay within one language. You don’t have to go out into objective C and swift. You know, I know that one of the reasons that a lot of developers love Blazor is the hatred of JavaScript. Or, or you just don’t feel comfortable with it, or you just

Jon: you know, I got, yeah, I got to say that because. I think people get allergic to like, oh, hey, you know, like your web developer, you should know JavaScript. I can do Java script. I can write Java script. It’s not going to be the best JavaScript. It’s not going to take advantage of all the, you know, it’s like, so like in cases where I’m writing business logic, I think I’d do better in C sharp with that. You know what I mean? 

David: Yeah, I know for sure. and you know, I, on a personal level, I’ve, I started out as a web developer. So ASP and access databases, and then graduated to SQL servers. And you know, I started way back, man. So. I have a I have a lot of appreciation for, all kinds of different languages, whether it was VB VB script, vb .NET.

 C I certainly love and I advocate for, but yeah, so, you know, being able to maximize the languages that, you know, and have mastered I think is, is awesome. One of the other great things that you get from MAUI is accessibility. So accessibility is something that is a. It’s a pretty hard to understand and get up to speed on topic.

 We, we realized the importance of it has developers many times, but we don’t know what to do about it. So the great thing about MAUI is because first of all, it uses native UI controls. You get the native platform, accessibility features by. But also on top of that, we’ve added semantic services that enable you to more directly control your accessibility experiences,  whether it’s auditory, visual, et cetera. That’s something that’s a pretty cool advantage. And then because we are also using a native UI if there are other native libraries out there, you can bring them to .NET. So we have a couple of different patterns for doing that. So let’s say that you had a cocoa pod, or you have a Java library out there and it’s super popular in the ecosystem and we don’t have a comparable offering for it in .NET.

You can totally. You can use it either just by invoking it from .NET, or you can write a binding around it, whether it’s a small API that you 

surface or it’s a full API that you service. Like for example, I was looking on Twitter and there’s a library called… Are you familiar with Lottie?

Jon: Oh, yeah, yeah, yeah. 

David: Cool animations, right? And so so this library is, has been out there for a long time with a, with a, binding for Xamarin, but nobody has done any updates to it for .NET 6 And so this one developer says, Hey, well, I just did a, what’s known as a slim binding which essentially is I just need to be able to call this one method and use this library.

And so you create the wrapper around that with .NET, you invoke into the native code and you’re up and running with a a Java library. essentially. or if it’s on the apple side, it’s, you know probably a swift or an objective C library. So you have that capability as well. And you can stay in .NET, but use not just what you get on NuGet, but you get all the other stuff too.

Jon: Oh, very cool Okay. One last.

David: you think of more, if you gave me more time.

Jon: Yeah. Yeah, I know. I D partly why I set this up is relatively short. Cause I’m like, this could go forever, right? There’s so much cool stuff to talk about. One last question is, can you kind of summarize where we’re at today? Like May 2022, what shipping today? What’s in the future?

David: So, you know, as we kind of started off at the top, you know, this is a huge transition in the .NET ecosystem. It’s a unification of this Xamarin technology and, and all the things, the build systems and everything with .NET itself. so we recognize this is also a major transition for the ecosystem.

So we’re shipping a GA SDK here. And that’s going to give you the ability to build Android iOS, macOS, and Windows applications. We have seen, since we did our C just a few weeks ago, a lot of libraries updating and starting to ship. So the ecosystem is starting to make that transition. And we anticipate that we’re going to see several. If not a long tail of that, as libraries are like, oh, I really need this. I really need that. And they start bringing their stuff and recompiling with .NET 6 targets in mind. and so, You know, we’re encouraging developers right now. Bring your libraries to .NET MAUI and .NET 6 Now is the time. We’re ready for it. You’ve got a GA product, you know, you can depend upon it. Microsoft supports it. We have a, we have a very public support policy, you know, so, you know, you can depend upon it, you know who to call if you’ve got problem. And it’s going to be around for a really long time.

And then as we get later in the year as tooling become stable, because we’re going to ship previews of tooling. With the GA SDK when tooling becomes stable. And we know that we can depend on being more productive, little bit later in the year, then we’ll encourage more Xamarin applications to migrate.

 And we’ll, we’ll go broader right? With the call for. You know, come be productive, building your awesome apps with .NET. But the first phase really is let’s energize the ecosystem to start making 

this transition. Some people were just waiting to know, is this a real product that we can take a bet on? You know, which is a realistic thing. 

Jon: And when Microsoft ships something as GA, like you said, that comes with a support policy and Microsoft’s kind of famous slash infinite, infamous for supporting things for a very long time. Right. So it’s like, once it’s shipped, like that’s a commitment for Microsoft and to something as a customer, you’re like, okay, it’s actually a real thing now.

David: Yeah. and you know, a .NET, we just celebrated 20 years, out, out in the world. We’ve got, we’ve got ourselves, a, a young adult and,  and you know, Xamarin, like I mentioned has pedigree that goes back, like at least 12 years to some early models. So, you know, while MAUI is a brand new first GA it’s also an evolution of a product that has been around for quite a while.

 And so the commitment is there, there is definitely proof in the pudding that this ha this word. Like we Xamarin forms. It survived seven releases of Android, seven releases of iOS. It went from round beveled, edges and gradients and  Whatever that design pattern was called, where things were like leathery and stuff.

Jon: Oh, 

David: And then it went many more design and simple and flat. 

Jon: Yeah. 

David: And then there’s like, new amorphic skewism, blobbity blob, you know? And so, as you know, the great thing is, is if you had built your application at the very beginning, you wouldn’t have have, to have, you know, been forced to rewrite it. That whole time, because Xamarin forms prove that as a pattern, as, a technology it can do that for both, you know, line of business, enterprise applications, as well as, you know, we’ve got customers doing commercial, uh e-commerce, you know, straight to consumer stuff and games, you know, people build games with it, you know, so tons of stuff you can do with it. So. It’s a GA product. you can take a bet on it.

 There’s a support person you can call and you can, and they can help you with your stuff. It’s pretty awesome. 

Jon: All right. I think you just committed to helping me with all my problems. Awesome.

David: along commitments from people with more power than me. 

Jon: Where, where do we, so where do you go to get started then with MAUI? You said download the preview. 

David: Yeah. Yeah. So, so Visual Studio.com preview we’ll have the, have the bits you can install. We actually have our own websites, so probably direct everybody to our website. So dot.net/maui. That that’ll get you to our MAUI landing page. I think we might be taking over the .NET web page com GA. I don’t know, I saw a beautiful design, Maira showed me a cool design. I was like, oh, that looks really nice. So yeah, from there you can get all the activation tutorial and it’ll walk you through installing everything. Of course, I’m, I’ve got, I’ll have a blog post out. That’ll give you all the dirty details.

Jon: Cool. I’ll get that all linked in the show notes. So, all right. I’m out of questions. I’m ready to wrap up. You got anything else you want to say?

David: Hey, man. Thanks for having me on it’s the first time I’ve done a podcast with you. I hope it won’t necessarily be the last, but I appreciate you having me.

Jon: Cool. All right. Thanks a bunch, David. Okay.

Herding Code 245 – Catching up on Java dev with Bruno Borges and Mark Heckler

Jon talks to Bruno Borges and Mark Heckler about Java development.

What? On video now?!?!

Download / Listen: Herding Code 245: Catching up on Java dev with Bruno Borges and Mark Heckler

Links:

Transcript:

[00:00:00] Jon Galloway: Hello and welcome to Herding Code. This episode is being recorded on March 11th, 2022. Today I’m talking to Bruno and Mark, and they’re going to teach me all about Java because I don’t know a thing about it. So welcome folks.

[00:00:22] Bruno Borges: Hey, Hey, Jon, how’s it going? Thanks for having us.

[00:00:26] Jon Galloway: Yeah. And so can you introduce yourselves, tell, tell us tell us your background.

[00:00:30] Bruno Borges: Yeah, I said something, you go first.

[00:00:35] Mark Heckler: Well, hi, I’m Mark Heckler. I’m a Java developer for well, a long time now. Java champion Kotlin developer expert. We won’t talk about that too much today, but but deepen the JVM and, and loving it and still loving it. So, and I, I work, I guess, on, on the, as an aside, I work in developer relations here at

Microsoft engineering cloud advocate for a Java and JVM languages.

[00:01:00] Jon Galloway: Cool. All right. And Bruno.

[00:01:02] Bruno Borges: Yeah, I’m a PM manager at Microsoft. I lead some of the projects on the BM side, like Microsoft to beautiful JDK and Microsoft’s involvement in the Java community. Like our work with the consolidation process. I am also a Java champion. And for those who don’t know, Java champion is a program similar to Microsoft MVP, but for Java developers and yeah, it’s, it’s, it’s been my career for, for a long time too long, I would say.

[00:01:33] Jon Galloway: Okay. Well, let me start off with just when one thing, which is like Microsoft Java, how does that fit together? Like why, why is that a.

[00:01:47] Bruno Borges: Five to 10 years because. Because of cloud computing, right. Developers wants to bring stuff to the cloud and Microsoft became a cloud vendor hosts any kind of application. And that includes Java applications. Right. But it’s also through the history of Microsoft. And I don’t want to go back in time too much because like some experienced Java developers will remind a few things, but in more recent times in the history, Microsoft did a welcome some companies and came up with some solutions that ended up either being developed in Java or using Java based technologies.

So. The big, big data exploded about a decade ago. And in projects like attaching spark and Hadoop that are implemented in Java, ended up being used by every major company, including Microsoft. So, so those systems are in, used in use internally whether it’s Microsoft being service or office or Azure infrastructure to behind the scenes, we see those Java based technologies in use.

I’ve actually cost them more recently. So, so Java and the Java ecosystem and tools are needed for scalable systems. And, and that happens to Microsoft as well. And then Microsoft also welcomed LinkedIn and . And those are technologies that are heavily implemented in Java with thousands of Java developers that now work here in the conflict.

So not only Java is a matter of like, we use the technology, but we also of course offer our tools and services to the customers outside. And the way that they host applications is through Azure at the end of the day.

[00:03:41] Jon Galloway: Okay. Yeah. I was going to say that the big, my main exposure to job over the past several years, thinking about it has been helping my kid with Minecraft, like when she wants to install all the mods and all that kind of stuff. So

[00:03:53] Bruno Borges: Yeah. And the interesting thing is Minecraft today, if you’re playing with Minecraft Java tradition, the binary of Java that that is shipped with Minecraft is actually the binary that we build ourselves, the Microsoft beautiful and it’s players and developers. Are in sync with their release. They will see that monograph is running on Java 16 already, if not 17 on I’m not sure if the 17, but they did two 16 at the end of last year.

So it’s pretty modern, pretty up to date with the Java release history.

[00:04:32] Jon Galloway: Okay. So you mentioned open JDK and what’s kind of the, what’s the ecosystem like now, as far as like who’s developing Java.

[00:04:40] Bruno Borges: Primility who develops. Java is still Oracle. Oracle is the steward of the technology and the platform is the steward of the open JDK. And open JDK is the open source implementation of the Java platform, which enclose the Java language specifications, the JVs pacification, and the Java API. So those three things combined to form the Java platform.

It opens you the key is the open source implementation GPL. But there are lots of contributions. Red hat is a major contributor to the opening, to the key project. IBM Azule systems, bell soft Twitter did some contributions Ali-Baba of Amazon Google in the past. And now Microsoft in, in recent times companies that we imagine like they were, you know, competitors, but still because they saw this technology as a great piece of, of software to do several things at scale, they all got together and said, Hey, let’s, let’s make something.

And the open JDK where it says a true open source project with a very high quality professionals evolved in major companies behind supporting its development.

[00:05:51] Mark Heckler: And if I can interject something here I, everything is in terms of Java kind of builds around and revolves around the Java community process. And that’s not just in names. So you have a lot of, a lot of participants at an individual and corporate and organizational level that kind of come together and help guide, steer, develop specifications and you know, kind of suss out and test out different technologies as they start getting incorporated into Java the specifications. So specifications, I should say. So it’s, it’s very community driven Oracle kind of services that the central point and, and kind of is the force behind continued development. But there are a lot of, a lot of contributors to that entire process start to finish.

[00:06:33] Jon Galloway: Okay. So let me ask, w let me tell you what I did trying to like get up to speed a little bit with Java, and you can tell me what I should have done. Instead. I am Googled around and I, I saw a Microsoft Java get started, whatever, and I went over to the vs docs page and I installed, or excuse me, the vs code page.

And I installed the extension the Java extension pack, and it installed a bunch of extensions. And then I. a new project. Well, first I went on and I downloaded the open JDK just to make sure that it was installed in the newest thing and stuff. And then I also played with J hipster a bit just cause I’m a web developer and it seemed fun and I was pretty impressed with all of it.

I, you know, there’s the usual kind of trying to figure out what is, what is Maven and what is grateful and what is, where’s my Java home pointed and that sort of stuff, but it was pretty smooth. And you know, a couple of hours, what, what do you recommend for people getting started with Java development?

[00:07:35] Mark Heckler: That’s all, I’ll start off with this because that’s something that I feel like, and we’re certainly not alone in this, but I feel like we could do a better job on getting people. That, that kind of, that first experience you, you, you did a lot of good things there. I don’t know that I could necessarily suggest improvements just because there are some rough edges there.

I mean, when, when you’re talking about a build tool, if you’re not within the Java ecosystem, and if you’re not within the Java realm, you’re like, what’s Maven. What’s great. All, you know so you know, vs code with the with a small handful of plugins knocks down, a lot of those mirrors for you if you install the JDK, that would be something that would be kind of awesome.

If we had some kind of like drop this in and everything just works, but there are a couple or three steps that you mentioned I know some folks are very, very fond of rebels and, and J shell and, you know, et cetera. But but ultimately I think it comes down to just finding some good materials that you can kind of get at that gentle introduction, you know, a step at a time.

And it sounds like you’re already there. And if, of course, if you have a frame of reference that you’re going from, like you mentioned J hipster, which by the way, a Julian Dubois, who is well, my manager is the lead of that project. You know, so he’s, he’s a Microsoft in as well and heavily involved with community.

So that’s that’s something that is, if you’re coming from a frame of reference, it should be easier to pick up in that regard, but everybody doesn’t share the same frames of reference. So that’s part of the, I guess, struggle that we’re all trying to help help solve, help make better.

[00:08:58] Bruno Borges: Yeah. Ecosystem can be frightening. After you spend an hour

reading blogs and articles and try to make us some sense out of it because, because it’s a. Diversified equal system. There’s no single technology vendor for any component in the Java ecosystem. Oh, I need, I need the JDK. Right? That’s the basic component you need.

There are seven vendors, right?

[00:09:27] Mark Heckler: maybe more

[00:09:28] Bruno Borges: Or, or, or, or more, oh, I need a, I need an IDE or EDS or, well, there are five options out there. Right. And then I need a framework to build my application. Well, there are probably two. And then finally, okay. I chose, I selected my JDK, my enter, or IDE I have a framework in mind.

I still don’t know what that means, but it has some pity and meta choice, but it’s there. And I see me to build that project, so I need to build. Right. And there are actually more than two Maven in great are the most, most used ones. But is that true? Important too. There is a patchy and Apache Ivy and, and babble or not double, sorry, something like

[00:10:14] Mark Heckler: I’m going to paraphrase. We don’t talk about those

Bruno.

[00:10:17] Bruno Borges: too many, too many. So it can be frightening. But what

Mark said, I think it touch if a person doesn’t know, doesn’t know anything about Java. Just go online search for something that says getting started with Java and something that does not involve building a level of education on the very first step and then get started with that.

Okay. Here’s my first job application. Here’s my first hello board application. And if a developer is already familiar with an IDE or editor, try to see if that’s technology supports Java. And if it does use that once you got a good sense of here’s my hell award application, I’m reading a file. I’m counting lines in the file, or, you know, doing some math, get some sense of the language.

Then next step is okay. I actually want to do a web server. I want to get each to be required to then provide HTP responses. Then there is again, a multitude of frameworks that can do that, because that is ultimately the majority of systems that are built today, but just go and get started with anything and then start learning from there.

And once you pick a framework and you feel like, oh, this is interesting. This is cool. And your criteria was probably, oh, this is the most usable, or this is, has the nicest website. I don’t know, whatever criteria. Right. And try to dive in a little bit on data, want to understand concepts and understand what are the features capabilities.

Cause the reality is most frameworks can do the same thing. Last there’s a lot of overlap of features and, and, and back to what I said before, it can be frightening because yeah. Dot net is awesome because you know, it is opensource, but it’s also coming from a single company, right? There’s no, you don’t how many web frameworks aren’t out there for.net it’s it’s not there, right?

[00:12:13] Jon Galloway: There’s a few, but you’re right?

It’s basically there’s one.

[00:12:16] Bruno Borges: Yeah, exactly. So, so that can help for, for beginners and developers that have to get through that barrier for the Java ecosystem. For sure. So follow Mark’s advice. So if something gets started,

[00:12:30] Mark Heckler: Yeah. And I don’t want to chase this down this rabbit hole too far, but I mean, what are the, I mean, you, you always, what you’re familiar with, you always see the, the pros and you also see the glaring. I hate to say deficiencies, but you can see the gaps. right.

So one of the strengths and weaknesses of Java is exactly what Bruno said.

You, you know, oh, I need a JDK. I need, I need a version of Java. Well, what version and where do I get it? Which one? But you have options. And, and the good news is that means it’s open. I mean, you can, if you want to use the Microsoft, build them up in JDK. If you were using yesterday, if you’re using somebody else’s new swap in this one and it’s like, wow, it just, everything just works, which is amazing.

But when you’re coming at it fresh and you’re new and you’re like, okay, where do I go to get this? Well, pick one. Oh, okay. Which one do I pick? And why? You know, so it it’s, it gets a little weird at times. Bruna mentioning the tons of frameworks and stuff. I mean, we’re not JavaScript, so there’s not a new desert every day and, you know, 22 of them who die the next day, you know, so I guess there’s that.

But but yeah, it’s the same things that make it so flexible in, in many ways, make it a little more imposing for somebody coming into the ecosystem new, but, you know, I mean, like every ecosystem, we have tools that help with a lot of these things. I, I couldn’t live without SDK man, so I can choose between various different SDKs just with, you know, a simple command at the command line.

And then I’m using something else or somebody else’s built or a different version or, or whatever. And it just takes a lot of the pain out of that. But again, if you’re new to the ecosystem, you’re not aware of that. So then you’re manually doing some of the steps that you wouldn’t necessarily have.

[00:14:08] Bruno Borges: Yeah. Mark mentioned the command line tool called SDK man. And it’s one funny enough. It’s one of the many tools that we can use to manage JD case. So, so there are actually important online. So there’s always that meme, right? These 14 standards are bad. We need a new one. Now you have 15 standards. It’s the same thing, the Java ecosystem.

But the, this goes. Well, all the way back to in Java store and Java became open source with with Eva actually, before Jon became open source, because the way the Java was offered by some of Microsystems as a, as a free technology from day one, not necessarily open-source, but free for production allowed developers in the world to build products on top of Java.

And that’s why lots of libraries came to B to B, lots of build tools were got created and frameworks for applications that stuff, applications, lab applications of all kinds, they were bored. So that, that allowed this ecosystem to exist the way it exists today. And it only gets better for whatever definition of battery or you look for.

[00:15:22] Mark Heckler: 15 standards.

[00:15:23] Jon Galloway: Yeah. Yeah. There you go. Yeah. So, so like he came in and that makes me think, like there’s, you

know, Python as virtual environments and, you know, NPM that’s got accommodate, like, is that the idea where you’re setting a, like for this project or this directory I’m using this SDK.

[00:15:42] Bruno Borges: Yes.

[00:15:42] Jon Galloway: Okay,

[00:15:43] Bruno Borges: Yes. That’s the, that’s the idea. I’m not sure if that’s he came in and has that capability right now. I would double-check but there are some other projects that allow the jams is another command line tool that does exactly that. I want to say this folder here. I don’t want to use that command that JDK.

So Jones is a shell snip that configuring your shell, and it will update the JDK based on your current directory automatically. So there is a dear AMS, which is another generic tool for doubt. And you can do the same thing for Java, with your amp and clutter tools.

[00:16:22] Jon Galloway: let me see. So, so then we, you know, we did talk about like there’s Maven and Gretel. Is, is there like a cliff notes for like, is it just pick one or is there a significant difference between them?

[00:16:34] Mark Heckler: my goodness. You don’t want to get in the middle of that.

[00:16:38] Bruno Borges: I want more. I want, I want, so let me get started. Both tools are great. First of all, both tools are great. They will deliver what the developer is looking for. If the developer doesn’t know what they are looking for, but if they do know what they’re looking for, it’s either one or the other. So Maven it starts with convention over configuration. You define your build using XML, and it’s very descriptive of the things that you want to do using the XML specifications of the build file

[00:17:17] Jon Galloway: Was that the pom.xml file that I…

[00:17:20] Bruno Borges: yes, correct. So you can, you can use a variety of plugins that are official plugins maintained in the Apache project or third party plugins maintained by other folks outside the catchy foundation. And then there is great though, which is a default on Android studio. So Android developers that are already coding in Java, and now they want to do a server side application.

I highly recommend that they use a greater for that because you’re already familiarize with the deal tool in greater has some interesting capabilities, like a built cache that builds demon that is running in the back in the background. So your compilation that happens a lot faster when, whenever you’re rebuilding your project.

But great is a little bit different when you, the way you configure your build file, it comes with a programmatic way of doing things. It uses a language called groovy. And with that, you can write code with the instructions of how you’re going to build. So it’s, it’s different. Even know how to use it. You go to the documentation, just copy and paste, make it work and learn along the way.

And for an exit for XML and Maven, it’s more like, yeah, this is the only way of doing it.

[00:18:34] Mark Heckler: yeah. I I’m going to jump in and correct Bruno and it’s some things he got all wrong. No, I’m kidding. No, I’m going to expand on something like what it’s kind of interesting because the, the two approaches are pretty different because Maven is more declarative and in, in the era of, of Yamhill and Kubernetes and, and a much more declarative infrastructure as code type of mindset the Maven mindset fits a lot better in that, because it is, you, you, you literally lay things out in XML, as Bruno said, and it’s just, you’re declaring it.

And then it does the rest. Now, Maven is pretty pretty minimal. It’s the plugins that really do a lot of the work. for a developer is largely irrelevant. You just want to make sure your stuff gets built right. But a great or actually uses either grooving or Kotlin depending on, you know whether you, which script you use, groovy script Kotlin script and, and Greeley, or excuse me, a grade.

As Brenda mentioned programmatic. So it’s a, it’s an execution of a program that if you have a very simple build is very clean, very elegant. If you have a very crazy complex bill, it can, as Bruno also mentioned dramatically, reduce your bill times. But the, as they say, the devil’s in the details, it’s a program.

So there are ways that things it’s hard. It’s easier to get things wrong. It’s easier to mess things up. And, and in many cases hope I’m getting mad at me for saying this, but when, when versions change with, with grateful, several times, you have folks who have issues very quick to be resolved and stuff typically, but with Maven, again, being more declarative and you typically don’t have a lot of those.

So everybody’s got a very strong opinion. It appears either one of the others, you get this really hard partisan fight, but they’re both excellent tools that both enjoy very wide industry support. And you know, they, they just work generally. So.

[00:20:19] Bruno Borges: Yup. Yup. If the development doesn’t like XML using greater, if the

[00:20:24] Jon Galloway: there you

[00:20:25] Bruno Borges: does it block, doesn’t like to write codes to do build, then go back to the XML.

[00:20:31] Mark Heckler: Well, knowing your love of XML, I’m sure that you always use maven, right?

[00:20:38] Jon Galloway: Because. XML is like, you know, considered old and busted whatever. But as you’re talking about the more declarative style of con configuration, now it’s kind of come back around to that. So it’s funny. I’d be surprised if there’s not like some Yammel based configuration way for, you know what I mean? That compiles, that text ML for you or

[00:21:01] Mark Heckler: Oh, Jon, no, that’s a bridge too far.

[00:21:04] Bruno Borges: But I can say that. I can say that unfortunately, there is a product out there called poli holy Gluck maze, which you can use Jamo the finder Palm Todd.

[00:21:20] Mark Heckler: no. Nope. Nope.

[00:21:23] Jon Galloway: So you mentioned Groovy and Kotlin, and I think part of the, the thing that I’ve heard about JVM, that’s interesting. Java, but then you can run multiple different languages on the JVM. And that’s something that, you know, you technically can do in.net, but you don’t see it as much as I’d hope, you know?

But so, but, but like Kotlin and groovy are both like they’re full. Like my understanding is Android development is basically all on Kotlin now. Right. Or

[00:21:54] Bruno Borges: not really. Costly coddling wants to the teams behind the teams at Google and Jack rains that develop Android studio and costly. They’re the reason intent on making clear coddling the default language of Android applications. But there’s also floater and darts

[00:22:16] Jon Galloway: wow.

[00:22:17] Bruno Borges: and other languages. So sort of that intent got fragmented with multiple choices now as well for Android.

Right? So Java remains the primary choice for the majority of Android developers. We can see that just by looking at stack overflow tax for Android. But the, the interesting thing about genre, as you were saying the JPL actually for any developer, who’s documented with the JVM, but is familiar with web assembly these days. It’s the same concept. You’re right. SEM coach. And then your rights, a compiler that translates that into a buys code. And then the JVM interprets the code, just like web assembly. Was invented in 1998 and Weber sander was invented like five years ago, et

[00:23:02] Jon Galloway: yeah.

[00:23:03] Mark Heckler: that’s, that’s all fair. That’s all fair. And that you took that in a different direction than what I was kind of thinking. So I’ll, I’ll concede that to you. However, that that’s it, you did make one misstatement, which is interprets because in, in the original or early stages of, of Java, everything was interpreted, therefore it was slow, but we have now just in time, compilers ahead of time, compilers and things that make it actually very competitive with native code, sometimes faster, sometimes a little slower. We have actually native code compilers now. So Java has and I know that was just kind of you know just a conversational thing, but I want to make sure that we know it is not an interpreted language per se in the same vein as things like Python. Although again, I know exceptions even there, so it gets tough to know about this stuff.

[00:23:48] Bruno Borges: Yeah, we can say, we can say Java code Java. I write some Java code that code can either run in interpreted modes initially, and then getting native compilation with Justin time. Compilation. I had a time, which is native all the way from, from the get go actually not really actually still compiles into byte code and then the byte code compiles offline into native code.

And then you run ahead of time. But those are the models. And for, for a hell of time, there is another project. And then you’re just getting to the rabbit hole of the Java ecosystem and a project called So grow all the Alma is a product from Oracle that combines open JDK with a truffle framework that allows code to be compiled natively.

And even the truffle knocks are not truffle. Truffle is a framework that allows any language to run on. Yes, so they’re all the homies is a virtual machine that is polyglot. The tropical framework allows that, and there is truffles for Ruby, for pricing, for JavaScript. And then there is the native image program that compiles code into native and grow VMs, that feature.

So if I’m a Java developer, I can run Java coding several ways. And it’s really about use case, understanding the scenario, understanding the needs of where this code will run if it’s in the felon or, or on the server on a desktop or on an embedded device, all sorts of targets. It really yeah, it’s confusing. I’m sorry, folks.

[00:25:27] Jon Galloway: So that’s interesting too, because like, you know,

the stigma of Java, it can be that it’s big, slow bloated enterprise, whatever for big servers. But like you’re saying, it runs on small devices, it runs on phones, it’s all sorts of things. So you really do need to have a small, tight battery, efficient, all those sorts of things.

And so yeah, I don’t do you. And so that’s something you basically are right in the same code. And then the compiler is kind of handling that depending on where you’re deploying.

[00:25:59] Bruno Borges: Yeah. I mean, th the way the JVM works, the GVM is this, there is a specification of the JVM on how the JVM needs to behave, but you can actually write a JVM in any language. As long as we implement the instructions as per the specification. And there are JV hours that were developed for different kinds of hardware, of different kinds of resources, embedded devices mainframes AIX, for example, right.

Or Solaris. So also does a hardware gods, a JVM implementation with different, sometimes you’re different, even constructions. W once you write that coach, the Java code, according to the Java language specifications that code wants compiled can run in any JVM that implements the JVM specifications, mapping out to that same version of the Java language specifications.

So that allows them. Jonathan Barbara can write Java code for pretty much any Cod deployed anywhere. Now there’s lots of gotchas and exceptions and you know, maybe this doesn’t exactly work as you think you, but that is a principle and it’s been working quite well since the beginning of the technology.

[00:27:15] Mark Heckler: Yeah.

And just to add onto that a little bit generally, when we talk about Java developers or Java development and, and deployments. So the deployable artifact typically you’re talking about deploying, using a Java virtual machine, a JVM, and that’s where you sometimes get the whole, well it’s. Larger.

It’s a bigger footprint. It’s slower startup because when you start an application, it has to spin up that and warm up that JVM and, and execute the application. It does a bit of you know, again that just-in-time compilation and kicks things off. So that’s kind of the large majority of the use cases.

When you want to build native code. That’s, that’s a, maybe a small subset of all use cases and the reason because Java, well, again, excluding for, for the moment, any mobile and Android you’ve got a large preponderance of job applications, which are enterprise applications. They are robust. They’re, they’re always running they’re out there, you know servicing.

Gazillions of requests every, every minute. And, and, and when it comes to applications like that, whether it takes five seconds to start up or one second to start up, it doesn’t matter. Cause it’s going to be running for days, weeks, whatever, and processing millions and millions of messages and, and your, your big focus is not on the, the four seconds you can save on start-up it’s on throughput and it’s on, you know, making sure that, you know, continues to run well and, and whatnot.

So there are different use cases that necessitate different tools, but generally speaking for that, kind of the vast majority of use cases, you are talking about the standard JVM,

which is fast and garbage collection. It’s fast on response and, and having, you know, high on.

[00:28:50] Jon Galloway: Okay. Yeah. You mentioned garbage collection and that’s something too where people worry about that

for performance. What’s the, is there anything kind of new on like when I follow.net releases, they’re working on things to do like multipass or, you know, to like continue as over the, what is it PGO PA or performance guided optimization or things like that.

Is there, is there new stuff happening or happened recently on garbage collection performance?

[00:29:20] Bruno Borges: Yeah.

[00:29:24] Mark Heckler: No. Well, I was going to hit him that the whole different in terms of different JD Ks, because the community, while I say community in general, but different different builds different approaches to garbage collection can be employed by different different JDK. So if, if you want to have very exceedingly low latency maybe that won’t be necessarily as efficient overall, but it keeps things moving along faster for things like stock trading and things like that.

And you may have others that are a little bit longer pause for a, an overall, slightly higher level of efficiency might make more sense. So you have options in that regard. That that was kind of all, I was going to say, Bruno, if you want to take it from there, but that’s, again, one of the strengths of, of various different,

Builds of JDK, you can, or you can choose which One suits your particular use case.

[00:30:12] Bruno Borges: Yeah. One of the interesting things that,

Actually discussed this recently, the GKN specifications doesn’t say anything about garbage collection. It’s it’s, it’s, it’s, it’s one of the interesting things that people think, oh, this JV, I must have this garbage collector, actually, no, it must run the Java code.

Garbage collection is not part of this specification, which means, which means you can implement a JVM and not collect anything. And not only that, there is actually a garbage collector that red hat Rhodes that does exactly that it’s a garbage collection that doesn’t collect anything. It’s only for, it’s mostly for testing purposes.

But, but, but there are multiple garbage collectors in, in, in, in the Java ecosystem. That’s the reality in the open JDK project itself, there are five or six garbage collectors that you can choose. Open J nine is a different implementation of the Java virtual machine specifications done by IBM and the consolidation.

And also has they have their own garments collection implementation or multiple implementations. Zol systems has a garbage collection called zinc, also a different implementation. And I think that’s, that is technically a commercial product that they licensed to you. But at the end of the day, there are multiple choices in customers and developers do need to understand if they want to go down that path of performance tuning, they have to understand how the garbage collector works about their workload is behaving and work.

Are there requirements in terms of like business needs and SLS to make the right choice in the right tuning for their application? So this takes us back to the question like is Java slow. It can be, if you don’t do the right thing. Right. But he’s going to be super fast once you have those understandings and we can be extremely fast. Okay.

[00:32:13] Jon Galloway: What you mentioned earlier, some of the Microsoft and Azure? support, like what, what is the Azure? Are people running Java workloads like containerized or what, what’s kind of the main the thing that you see people doing

[00:32:28] Bruno Borges: Mark. You want to

[00:32:29] Jon Galloway: is there like a standard kind of, like you mentioned some of these big, you know, like LinkedIn and you know, like large applications, is it pretty standard now to be running those containerized?

[00:32:39] Mark Heckler: I mean, we have different ways you can, can do that. And of course I suppose like Java developers and environments are all different. Use cases, needs desires but you can containerize them. You can deploy from code via in, into containers, VMs. You can run and managed a platform, something like Azure spin cloud.

So you have, you have a lot of different a lot of different ways to get there, I guess, for lack of a better way to put it. And, and everybody seems to, depending on where they are in their, their journey, I hate to put it that way, because it sounds almost like where you are. Isn’t the final end point.

And maybe it is. And there, there are people who are maybe where they want to be and for the next well for the foreseeable future, but that if you are embracing. Moving things to Azure, let’s say, and you have a significant kind of center of gravity in house or in a private cloud, whatever. You’re probably going to try to mirror your existing setup and that may involve VMs and that’s fine.

You know, we fully support that, but we also have the ability to containerize, to to use something like app service. Bruno, what am I missing? I mean, th the, the upshot, I guess, is that we meet you where you are, and we offer options for where you may want to go.

[00:33:48] Bruno Borges: Yeah. Once, once an application is computerized, developers can deploy that container to five services on Azure, actually six, depending, depending on the application. So, so Azure BMS, Azure, Kubernetes service, Azure container apps, Azure app service as a spring cloud five and actually six, because it gets a function designed application.

You can actually also apply to Azure functions. So, so there is a huge interest in containerizing applications. So you have that flexibility wherever you want to put in, take advantage of the services that your business may need. But from the developer standpoint, it’s still just a container and application.

And that gives that flexibility of deployment model. Now. Yeah. Now just putting a job application inside upon painter is sounds simple at its beginning, but it can be, it can be very tricky once you go to production, but I will pause there. What’s up, Mark.

[00:34:56] Mark Heckler: Well, no, I was going to say because both of us have kind of failed to mention that we actually do have partnering agreements with, with companies who offer applications, servers. So we, we fully embrace and support that as a destination for job applications as well. If you’re using something like Javi Jakarta, EE in terms of enterprise Java, obviously if you’re using spring boot applications, it’s a little different or significantly different a story, which is kind of where we’ve spoken to up to now.

But we also support things like Jay bossy, AP WebSphere WebLogic, and things like that. So if you’re coming from that kind of an environment we have a home for that as well.

[00:35:31] Bruno Borges: And I did forget to mention that as a red hat OpenShift, which is another service also for containers. So when, when, so he’s speaking a little bit more about containers and Java and we have documentation coming soon. I don’t know when this blog is going to be, this podcast will be live. If you’re watching this check out documentation or listening to this checkout position, maybe this is already published, but we have documentation about how to containerize job occupations and the things that you should watch out for, especially in terms of memory constraints and CPU constraints that are applied to the computer and how that impacts performance of the JVs

[00:36:09] Jon Galloway: Okay.

[00:36:09] Mark Heckler: using an older version of java, just I’ll leave.

[00:36:14] Bruno Borges: that.

[00:36:14] Mark Heckler: Yeah, I’ll leave that out there. You know, obviously everybody wants to be on the latest, greatest everybody’s should be on the latest greatest, but there are a lot of times constraints that keep folks from, from again, if they, if they’re migrating something that maybe an older, steady, reliable application, it may be still using Java eight, but you know, it’s so, so the considerations are different as you advance because Java is

advancing and getting better and better about that. as you might imagine. So

[00:36:38] Bruno Borges: yes,

[00:36:39] Jon Galloway: You mentioned the application servers, what, what’s the, what’s an application server? What do I need that for?

[00:36:49] Mark Heckler: I do do I, do I.

[00:36:51] Bruno Borges: I can. So I worked, I worked, I worked at work when I was one of the

PMs where WebLogic and application server is actually very much like two parties, but. In a way that only talks to job, it’s not polyglot, right? Well, at least not polygon in terms of language, if it’s a Java JVM based language, like Scala and closure, coffee still works.

But it’s, it’s a Java based runtime,

but an application server has capabilities like deploying multiple applications having a cluster with lots of nodes managing resources, managing. Connections with databases and messaging systems and identity systems, all of that. So that these applications, once they are deployed, they may have access to these resources more easily.

And the application server manages these resources for the applications. It’s not as simple the application managing those resources. And that is what made the application server model very broadly adopted a vacuum today’s because it was very good instill is a very good model for many customers that are not sitting themselves with these needs.

I will have to go Cooper needs. I want to go from painters. Some customers don’t have that. It’s not like a must do you got to have the business needs? So that’s why we have these partnerships with IBM and Oracle to drink this and rent a house to bring this traditional application servers to Azure as a manager.

So they can, you know, lift and shift as, as executives, like to say, Marketing, lift and shift applications to the cloud more easily.

[00:38:37] Mark Heckler: Yeah. I mean, it’s, it’s one mechanism for

deployment, right? So you have people who love it. You have people who hate it, sort of like the Maven and cradle thing, really. But oh, go ahead, Bruno.

[00:38:46] Bruno Borges: Yeah. There’s there’s a new project called dapper that is, is that you’ve developed with microservice and with vapper. If, if your micro service needs to talk to a database, it actually talks to a sidecar off dapper. And then dapper does a communication with a database. That model is what application servers. But but dapper happens to be the sidecar off dapper happens to be a component inside the application server and application server happens to be Kubernetes at the end of the day.

[00:39:22] Jon Galloway: Okay. So you mentioned things like deployment and, you know management of your application part, like I’m thinking of deploying updates and, and specifically this kind of brings to mind for me, like, like a log for J like recently there are a lot of people needing to kind of patch and maintain an update.

What’s what is the I don’t know, like, what is the approach for managing and maintaining and what was the impact for things that you folks saw with like log for J and needing to make, make these updates?

[00:39:58] Bruno Borges: So funny enough, the, the love for Dave issue was so. Basic. It was not even necessarily a security vulnerability per se, not a bug, actually, it wasn’t going to be ability, but it was not a bug. It was actually a feature by design that was being abused by a separate attack. Right. So because of that, it was actually pretty simple to, to update Java applications or even just secure the feature without even updating the library version.

And when it comes to jumping consistent in general, that happens it did happen pretty fast. The resolution of the problem. But now you’re looking at a very long tail of people that are not completely aware and a sonar type of home managers, Megan central, they have a dashboard that shows number of downloads per log for J version and the affect affected versions are being still being the loaded too much.

The number of downloads of insecure log for J versus these two van high.

[00:41:13] Jon Galloway: yeah.

[00:41:14] Mark Heckler: Now I will say this. I, because I’m more from the spring side of the Java ecosystem and spring’s default is logged back. So unless you specifically over write it, do use log for J this was largely a non event so that, you know, obviously we have good partnership and as your spring cloud, and we, you know, we, we’re a great destination for spring applications, and that was almost a non-issue for a good chunk of the job applications that we, we host and manage here because of that.

It just wasn’t. I mean, it’s something everybody was very aware of and, and wanting to make sure that we were all safe and everybody’s happy and all that, but in many cases, it just, wasn’t an issue.

[00:41:51] Jon Galloway: Okay. I wasn’t aware of the Azure spring cloud. That’s pretty cool. I’ve I’ve heard about spring boot generally. Like there’s a dotnet project to implement. Was like interrupt Steph with spring. So I’m, I’m familiar just from that point of view, but I I’ve heard, I hear a lot about spring boot, just kind of in general, is that still pretty active and.

[00:42:13] Mark Heckler: oh, gosh. Yes. I don’t, I don’t want to you know, push too hard on this because obviously lots of choices in the ecosystem, which is a good thing, but a spring boot is wildly poppy, wildly popular, a spring in general, spring technologies, you have a spring data, spring security and a lot of different spring projects.

And over half of all Java developers, enterprise Java developers. Some or many parts of the spring ecosystem. So yeah, it’s, it’s a, it’s rather huge. And, and I, you know, we at Microsoft should be very proud because we work really well with the spring team first with pivotal and then with VMware, when pivotal and VMware came together.

So yeah, we, we offer, you know, Azure spin cloud is something that nobody else can really there’s no parallel outside of outside of our world jointly developed, jointly supported. And, and it’s just kind of that natural home for spring applications. So yeah, it’s kind of a great success story

for both companies and that giant ecosystem that our spring developers and spring applications,

[00:43:14] Jon Galloway: Okay, I’m going in a totally different direction. Way back when I first looked at Java and experience work with Java was actually desktop applications. And that was a thing, you know, early on, it was like, Hey, we’re going to have cross platform desktop. And I haven’t really like, you know, now it’s all, basically you see electron and you know, you don’t see Java, desktop apps.

I randomly, like I did looking in loading plugins and stuff. I saw Java FX listed. What’s kind of the current state of Java for client and desktop application development.

[00:43:53] Mark Heckler: Well, I’ll, I’ll start off on this Bruno and then you can correct me where I go off the rails here. But you know, again, I think everything has shifted to the, well, okay. Not everything many things have shifted to the browser and, and extensions of said construct. But but there are still some things I know Bruno and I both know folks who work with with NASA and, and with a trading company.

Where you have desktop type of applications or desktop applications, I should say in some capacity that it’s very important to have that raw processing power to have the full control over the rendering that you just can’t match. It’s still unless you do a desktop type of application. So Java FX it certainly doesn’t have a massive Market share, but it has a very strong vocal and an important niche that it fills.

[00:44:41] Bruno Borges: Yeah, not only not one Jon offense would swing is to a critical component for Java graphical development. There is, there is a, there is a software commercial software called spine, and it’s a 2d animation editor. And when you look at the interface, you don’t, you don’t tell it’s Java, but it’s actually a Java based application.

When you’re, when you I think I, I’m not sure which bank or financial corporation in Canada has a, they do have a trading. That is written in Java as well. So you go to their website and downloads, it’s a Java app. It comes with the JVM. My exact job edition is used by mediums off gamers into word, and it’s a Java stuff application and actually 3d Java based application.

Just, just to make sure that people are aware of that. And as, as, as Mark said, in the trading in finance industry, in, in, in manufacturing government agencies in general, we do see that number of Java, desktop applications. They just don’t happen to be something that you download for your parents at home or your brothers and sisters in school.

It’s something that employees actually end up using, or researchers in academic academic world end up using NASA has lots of tools internally that are reasoning Java, but you don’t see those published if you ask for because they are internal use. Right? And I can say there is a big movement, even for EMD gamers in indie games that are using a library called L w X JG.

Something like that. It’s a lightweight L w G Alibaba. JGL lightweight rascal library for job. And it’s used for games. There are some games that are published on steam, perhaps for their reason in, in Java with, in combination with that library to use use open GL. So, so there is a Market for graphical Java applications.

There are a great software libraries and tools to do that, but it’s not, it’s not where startups and companies are doing cloud development. I mean, if it’s a cloud development, it’s going to end up in your browser. Right. But, but there is, if the question is, is there, yeah, there is.

[00:47:06] Jon Galloway: Okay. You had mentioned earlier big data and like Apache spark and that sort of thing. And so that’s, that is a big area of Java development, right? That’s including inside of Microsoft.

[00:47:19] Bruno Borges: Yeah. They, there is a big deal for Java because Java is one of the very few runtimes that is super easy to write an application that will come. A huge amount of data and the JVM will manage that data in memory for you. You don’t have to write codes to deal with that. The JPM we’ll deal with that for you.

And actually the garbage collector will deal that for you, Oracle and red hat are working with two little vertical vectors that can handle very massive heap sizes of object allocation in memory. Oracle has one collector called CGC and XE stands for near zero latency near zero pause time of the collection.

And, and they did publish a benchMark recently in Java 17, where CGC running on a machine with a heap size of 128 gigabytes. That’s the amount of memory reserved for all objects allocation. They had paused times of less than one millisecond. So imagine like real time data, big data, and you need your application to not pause, right?

So CGC achieves that red hat has a not a girl toilet go Shenandoah, and it comes with similar capabilities and a near real time float execution. So, so those are impressive numbers. When we think about the business needs of different companies, especially the world of machine learning AI, you need to process that data and, and Java systems end up being a great option because.

You just need to write the codes that will compare the data process, the data, you know, but you don’t have to manage the memory or manage cleanup and all of that, but you would have to write in C plus plus or other languages. And there’s a lot of projects that are already implemented in Java. So you don’t have, you don’t have to rewrite anything as well.

Right? So you just use Cosco, just use Apache Pino and several other projects that have been written quite a while. And they only benefit from newer versions of Java that gaps more performance improvements. So it’s the same code running on a newer version of the JVM with better performance. You don’t have to rewrite the code. You don’t have to recompile the code. You just need to deploy that same code already compiled or that new version of the JVM and you get better performance.

[00:50:06] Jon Galloway: okay. One more question. As we get close to wrapping up here, what’s what’s new with the Java language itself. Is there, is there much going on with that?

[00:50:16] Bruno Borges: Yes, there is in I was talking to Mark before it is. And Mark said who I want to talk about field classes. I don’t think it would seal classes. Please. Go ahead, Mark. Talk about sealed classes.

[00:50:28] Mark Heckler: Well, that wasn’t exactly what I said. Okay. Let me set this up a little bit because in the old days, and, and prior to what I want, I want to say like three years ago now I’d probably a little longer than that now, because time is kind of fluid over the last couple of years, but but in the, in the old days of Java, typically it was several years between releases.

So you had these big dropped releases, which had a lot of, well, potentially had a lot of changes. And then you waited and you waited a long time and the, you had different patches and updates that came out throughout several years. After that

a few years ago, we went to a six month release cycle with Java, which sounds insane when you, when you’re coming from a three, what?

Three to four year Bruno, I I’m going back. Off the top of my head, a release cycle. So six months, that’s crazy. What can you get in there? But, but what it actually has done is allow us to I say us, I mean, it allows the the JVM designers and maintainers to go ahead and drop things in for kind of a preview type of functionality.

So you have long-term supported releases and then you have in-between those every six months you have these kind of interim releases, if you will. So, so Java 17 is now out, but Java 16 was six months before Java 17 rolled out jive. 18 will be six months after that. 18 will not be a long-term supported release, but we’ll have a few new things in there.

And, and it allows you to iterate and get feedback and Kind of hone things before they become production features. So with Java 17, I was telling Bruno that and to be very specific, the big things that I kind of honed in on where the sealed classes and the better pattern matching with in terms of the switch statement.

So, so some of these things when, when they, they hit production, if you will aren’t huge features, but they are huge time savers. They kind of the fact that they’re small, but incredible useful or something that you wind up using over and over and over again versus like the graphics stuff for Mac.

I mean, that, that may be something that it’ll be nice, but it’s not something I will go, wow. That that’s a, that’s an upgradable thing, you know, but something I’ll use every day for every application I write that’s small feature, huge impact. So with seal classes you can define. The ability or it defined a class and a set of child classes.

And that’s it, you can’t extend that any further than what you’ve already defined the ability to do so upfront. And of course better switch statements where you can do pattern matching on that. And, and more it leads to more concise code. It’s, it’s small, it’s compact, but it’s very easily readable in terms of the choices that are available to you when you’re evaluating something.

So those are, I think those are the things that kind of bubbled at the top of my head with Java 17, because I see them having an outsize impact just because there’ll be so commonly used.

[00:53:17] Bruno Borges: All helpful new point and exception. Any experience of a developer will be like a thing saying thank you. Whoever had this idea and wrote

[00:53:28] Mark Heckler: That is true.

[00:53:30] Bruno Borges: you know, when you have a change to calls like a dot B dot C and you call different methods and attributes, and then you’d have so many chains that you don’t, there’s a no point, et cetera, on that line, you don’t know which part of the chain is no. So, so this contribution is actually written by SAP. SAP is a contributor of the open JDK and they also built their own OB JDK binary. And they wrote this feature and upstream to the project. So now, if there is a new pointer exception or a new value in that chain, their message will say, there’s just a part of your statement.

That is actually not. And everybody was like, oh my God just saved my day. Another interesting feature is records of records have been in development for a few releases already, but if it became final GA on Java 17 and it records, you can basically define a POJO of plain old Java object or I’ll record a class that will hold some attributes.

And you don’t have to write gathered SAPs in equals and hashcode and strength. All of that will be generated by the compiler. You just say public record. And then the attributes that you want, strength name and to germ age and that’s it. And everything will be generated by a compiler for you. There is another one.

Interestingly solve text blocks. Multiline texted blocks. I, my very first application was actually to generate some HTML code. And I can tell you that was not pleasant because you have to break down the string and plus signs. Concatenates the strings, every line it’s super annoying. But then it’s actually even bad for database out applications where you have to write SQL queries, right.

And you have to break that down and multiple lines. That’s super annoying. So now you actually have like three quotes and then you write your text and you multiply the daily closing with three quotes and doc is the support. What else we’ve got here? I, I have a cheat sheet that I’m looking at.

[00:55:29] Mark Heckler: In fairness, while you’re looking up, the next thing some of these things have been in previous releases, but this is the first long-term supported release Java 17, which rolls them all up together, which is, so this we’ll have this, we’ll have the higher adoption. This will have the higher impact just because people are working in a large corporate environment or a government or whatever.

They’re not going to go to the six month release cycles in many cases, because they’re going to wait for that LTS release to make that transition. So that the, even though some of

these things have been incorporated in earlier versions, this is the, this is the money release, I guess you’d say so.

[00:56:03] Bruno Borges: Yeah,

[00:56:04] Jon Galloway: Cool.

[00:56:05] Bruno Borges: there are two, I mean, there’s a bunch of KPIs that change. There is a, there’s a left

side job on the neck that shows all the API changes between virtues. And but there, there are two of the jazz everyone’s off is one. There is now an actual HTP client API that is part of the Java platform.

So if you want to call an HTP and flight arrest, endpoint, Java has that API already implemented in India. And the other one, which is funny, it took this long, but now we have a class that helps you format X of decimal to throw max a decimal, but it’s there finally.

[00:56:45] Jon Galloway: Yeah, well, you know, it is nice to see like, you know, going back to what you were mentioning, Mark, but just the, these quality of life things, you know, where it’s like, you just, some, some things like, I’ll see what that man is like, okay. You’re finally out in this while I’m still happy to have it, you know, but

[00:57:04] Mark Heckler: yeah, it’s weird. I always, I always feel weird when I say something that, something that just is really a minor thing, but you’re like, this is, this is amazing. And people are like, are you out of your mind? No, because I can see a bigger impact even though it’s, you know, a small impact. If you multiply that by a million, it’s, it’s huge.

Then, you know as the old joke goes about a million here, a million there, pretty soon, you’re talking real money. I think upon some talking about it like a government budget or something, but, but at the same thing, if you, if you have a very small feature that is immensely useful and it’s everything you write, it just has an outsize impact.

So, so that the other stuff is really cool and really amazing in certain contexts for the people who need it. But

that for almost every application, there are going to be little things that touch all these apps that that’s what I get excited about. So.

[00:57:49] Jon Galloway: Cool. all right. Well, I think we’re at a good spot to wrap up. Is there anything big

that I forgot to ask about or we didn’t talk.

[00:57:56] Bruno Borges: I’m pretty happy. Like this is a great opportunity to share a little bit about the Java ecosystem with you and the folks that listen to you. I made from, from Microsoft, what I can say is Java learns from dot NACHC dot that version of Java. All these programming languages at the end of the day are ways of protecting people, but also tools that enable these people to develop nice things.

And if, if, if ideas here can go there and make everybody happy everybody benefits from, so we’re getting a good, good shape with, you know, the stories of java.net and JavaScript and calculating enclosure in Scala and Ruby and python PHP.

[00:58:39] Jon Galloway: There was a little pause before a PHP, but yeah, you know, like over, over time, it’s like you know, earlier, earlier on in my career, it’s everyone wants to battle it out. And my, my language is the best or whatever. And it’s kind of nice to be at a spot now where it’s, like you said, we learned from each other, there they’re more tools, especially as things are like, you know, containerized or like you can, you can interrupt back and forth.

And so it’s, it’s fine. You know, it’s not strange to have, like, I was working in an application recently and it had Kubernetes going, I had several, you know, Java Docker instances and say, you know, like in.net and they’re just rest calls back and forth and it’s all, you know, we’re all playing nicely together.

[00:59:21] Bruno Borges: yeah, there is another there. Yeah. Well, the time there is a motor in topic, definitely for another podcast under another session, but I feel if we are not in the debate of languages versus languages now, it’s, I think it’s more runtimes versus runtimes and trying to identify ideas. One time is better for DCS case.

Then when time is better for that use case, because language at the end of the day gets compiled to something that will be Tobar dead or natively compiled later. And we saw this weed growth, you know, left sharp and seashell or JavaScript and TypeScript closure in Scala and coddling and Greedo and Java logs of languages.

But the number of wrong times is actually a lot smaller. So I think we should, I think we should consider starting, comparing round times in terms like use cases instead of languages. I think languages is important because you want to develop, you have to light on something. Right. But when, when the application actually goes out, what matters is if the language, or do you run time for the use case?

And there are use cases where all runtimes.

[01:00:29] Jon Galloway: Yeah. Well, I liked the way you say that too, because it’s, it’s not, which is the best it’s which is the best for a use case or which is, you know, and, and, and, you know, you can build anything in any language, you know, it’s just some, you’re going to have a better time or it’s going to run a little faster or whatever, and,

[01:00:47] Bruno Borges: Yep. And, you know, they say, if it’s going to be a routine in JavaScript, it will be written in JavaScript.

[01:01:02] Jon Galloway: there you go. All right, well, that’s, that’s a great place to wrap up. Thank you. Both of you for your time!

Herding Code 244: Ben Scheirman on SwiftUI and Combine

Kevin, Jon and Rob talk to Ben Scheirman about developing user interfaces for the Apple platform with SwiftUI and Combine.

Ben screencasts at NSScreencast and is the creator of the Combine Swift course.

Download / Listen: Herding Code 244: Herding Code 244: Ben Scheirman on SwiftUI and Combine

Links:

Transcript:

Herding Code – March 5, 2021 – Ben Schierman on SwiftUI and Combine

Kevin: [00:00:00] Hello, welcome to another episode of Herding Code , our quarterly episode here. This is being recorded on March 367 2021. And today we were talking to Ben Schierman. Ben runs NSScreencast, which is a video training site for all things iOS and Apple development, and Ben’s going to talk to us today about SwiftUI, a relatively new UI framework from Apple for writing Apple platform applications. So thanks for joining us, Ben.

Ben: [00:00:40] Well, thanks for inviting me. It’s good to be here.

Kevin: [00:00:42] So why don’t we start with the sort of high level, you know, what is SwiftUI? What makes it different? Like what, how is it different than what came before it.

Ben: [00:00:50] So there’s a lot of history and the Apple development community. We’ve had AppKit for 30 years now which follows a kind of model view controller based approach. And then when the iPhone came out, they, they sorta took lessons learned from that. And. And created UI kit. And so when you look at creating apps for the Mac or apps for the iPhone, if you squint, they’re extremely similar.

But app kit has that, you know, 20, 30 years of legacy cruft that they just can never throw away. And so you know, things are a little bit different. Like, you know, you have UI color versus NS color UI being the UI kit version for the iOS. And, and then you have things like the coordinate system on the Mac is.

The origins in the lower left corner, which hearkens back to the, I guess the, the way they used to send commands to the printer or something, I don’t really know, but on iOS, the, the origin is, is you know, top left. And so there’s, you know, minor differences here and there, but ultimately you’ve got views that know how to draw themselves they’re object oriented.

So you can have a subclass of a view that is a button or a label. And you know, the API is, are, are pretty strong, but There’s there’s always, you know, as our applications get more complex sometimes people complain about the patterns not being enough. And people joke about MVC standing for massive view controller instead of model view controller.

Because, you know, when you give somebody a pattern and say, this is where you put your logic, they tend to put all the code there. And anyway, so last year wait, Time is meaningless nowadays. This is, you know, at least five years ago in, in COVID time Apple released a SwiftUI, which is kind of a radical new UI framework for, for writing in air quotes, cross-platform applications.

As long as your platform comes from Apple it will work on T V U S and the Mac and the watch and the iPhone and the iPad. And SwiftUI takes just a totally different approach to, to writing user interfaces. So instead of model view controller, instead of your views being object oriented you know, and the model view controller world you would typically have of you that you would create say, I’m going to create like a new UI label and I’m gonna attach it as a sub view of my main view.

And then I might read a model. In order to tell what the text property of my label’s going to be. So like on a viewed load, I could say, okay you know, a model dot first name, I’m going to assign that to my labels, text property. But there’s nothing in that relationship. That’s going to continually keep that up to date.

So I have to respond to events and note or re sort of update my model again. Well, SwiftUI is totally different where the view that you create in SwiftUI, Is a struct it’s, it’s meant to be thrown away and recreated anytime the model changes and it’s balanced to the model. So you can say that I have I have this object that I’m going to observe, and whenever those properties changes, I know I need to rerender myself.

And because it’s a struct and everything that we’re building is value types. They can be thrown away and recreated really quickly. And so it’s a totally different approach and kind of, you know, from a traditional model view controller mindset. It kind of bends your brain to think about how, how you write this.

That said it’s pretty amazing because they have you know, the support in Xcode is you’ve got your code on the left and a UI preview on the right. And as you type, it shows you what you’re building. And so you can kind of flesh things out, like really quickly without even hitting, you know, you don’t have to compile it just updates.

And so these live previews that you get when writing SwiftUI are just really incredible. And it’s, it’s one of my favorite features in doing this because the feedback you get is so rapid.

Rob: [00:04:17] It sounds like they’re trying to do a more of a functional approach if they’re using strucks and like immutable data. I mean, is that how it feels to you?

Ben: [00:04:27] Yeah, absolutely. It fits in really well with like there are, there are things that you just don’t really. Like most, most of the examples are like, if I have a user object and I’m going to create a screen that shows like a profile view, I can, I can create an image view and I can set the image property to the, you know, some URL that came from my model.

And I can set some text labels to, you know, the properties from my model as well. And that all works really well. But then you have these other things that don’t really seem state driven. Like I want to present a modal screen on top of this, if the user’s account is delinquent or whatever. So that modal sheet presentation is usually like some imperative logic that would happen in you know, in a method you would just check for the condition and say, Oh, I want to present this now, but in a functional world, it’s all state-driven so.

Instead you’d need a source of truth that says like, is the sheet presented? And that’s like a property on your model object that you then mutate. And because you decide to, or when you want to to show that sheet, you have to set that property to true, which, you know, it just, it’s like a, definitely a different style of thinking.

But as you start to build your UI where everything, every interaction in the UI is driven from state. You know, it starts to lean straight toward the functional style of building applications and having your UI sort of just be a function of the state.

Rob: [00:05:57] Interesting. You know, like in my head, I’m imagining a kind of render pipeline process pipeline that you’re going to send an NSMonad through. I wonder when that’s going to happen. Yeah.

Kevin: [00:06:10] It’s too early in the conversation to go to monads.

Rob: [00:06:14] How long ago did they speak functional? Monads got followed within two minutes.

Ben: [00:06:22] I don’t even know how to follow up with that.

Rob: [00:06:25] And thank you. This is Rob’s podcast. Interview ability right here. Just created the interview straight away.

Ben: [00:06:31] So I would say that rather than, than focusing on the, like the functional nature of it, it’s, it’s definitely leaning more towards the reactive nature, which I think a lot of people are familiar with. We have frameworks like reactive JS and the whole reactive ecosystem. Reactive Swift is are pretty popular or RX Swift, RxJS, those, those platforms I don’t know if you call that that’s more of a framework, but those are pretty popular and Apple just released their Combine framework, which is basically the, their take on a functional, reactive framework for processing streams of events over time.

And I’ve dug in deep to combine and I find it, some of the aspects of, you know, porting my event driven code to combine has like, Just change the way I write software in general and combine and SwiftUI kind of fit hand in hand, it’s like peanut butter and jelly. It it’s like when you start using one, you’ll probably start using the other because they just, it, it makes things so much more decorative.

And so it being a declarativeframework that tends to like drive how you write your application from the get-go because. Things aren’t so imperative. There’s not like one place where like, okay, here’s where I write the code. It’s like, you’re you’re instead you’re thinking more about models and state and then building up your views around that.

Jon: [00:07:53] Sometimes when you move from an imperative style to a declarative style, like 90% of the time, it’s awesome because it cuts down your code and it like allows you to describe what you want to happen. Sometimes it can be a little tough to troubleshoot what the heck is going on because things may have side effects or, you know what I mean?

You change one that you’re not sure what is driving an update. That sort of thing is, is that a, is that a problem you run into with this.

Ben: [00:08:20] Yes. I think that’s probably a universal truth that like the more declarative and the more like magic you get, the harder it is when something breaks down and. And trying to figure out what, what is going on, what I found to be really helpful. Just in general, on the Combine side of things you have it’s basically like a functional pipeline where you say, like, let’s say I have an array of characters from a movie or whatever.

I can filter the array. I can map the characters to their last name or whatever. And I can add delays and debounces and stuff like that. And then when you think, well, it doesn’t really have to be an array. It could be a network response, or it could be user tapping on the screen. Right? Any source of events can be transformed in the same way.

And so they have some tools that you can just insert in the middle of this pipeline to say, I just want to print out and know when this is happening, or I want to insert this little side effect block. That’s just going to sit in the middle and let me set a break point or you know, print out values or whatever.

And I’ll just delete that when I’m done, but it doesn’t affect the chain. It still passes the values downstream. So you have some ability to diagnose like the data flow on the SwiftUI side I find that to be also true, where you’ve got a lot of things happening and the more complicated review becomes, you know, true strives you to say, okay, I want to make this a smaller thing.

I want, I want to design things at really small, granular level. And I mentioned the the SwiftUI preview you know, on the right side of the editor, you can create previews for whatever you want. It doesn’t have to be an entire screen. So I can have say we’ve got a screen that has like a, that avatar that that we want to, you know, round the corners, make it a circle and put a border around it and a shadow or whatever.

I could just like. Create a new SwiftUI view avatar view and just zero in on just that one component. And then I can see how it looks on large screens, how it looks on small screens, how it looks in dark mode how it looks if we have accessibility, like low contrast settings turned on or whatever, and I can have all those previews up at the same time when I’m working on that one component you can also do.

Interactive like user interaction in these previous as well, because it’s running a simulator iOS simulator behind the scenes. So if I’m doing a button component and I want to be able to tell like, okay, here’s the button in? Like it’s 12 different States. I’ve got different background colors. I’ve got one that has a spinner embedded in the, in the button.

And I’ve got like depressed States and highlighted States and, and disabled States and all that. And I also want to be able to like animate, you know, maybe when he, we push the button, maybe we want to animate that the shadow kind of gets smaller or whatever to indicate that the buttons kind of going into the interface a little bit.

It’s, skeuomorphism, it’s coming back. Things like that, I think are it’s, it’s real, it’s really just not fun to be designing something like that. And it’s like that button say is like two screens deep into your UI. And if you run, you have to build and run the application and like, okay. Click to the screen, you know, just that turnaround time.

It’s just. Not fun and the faster I can get to, I would just really like to be able to click on it right there inside of Xcode. And SwiftUI previews lets me do that. I can actually run the preview, which runs an instance of SwiftUI standalone and then, you know, click through and toggle it and be able to design these things at the small level and then use that in a bigger context.

So I think, you know, to, to circle back around to your question, like when things don’t go right. Or, or confusing. I tried to like zero in on little components and try to make their you know, the data flow more obvious and, and to design the UI in a, in a way that I can start small and just grow out from there.

Kevin: [00:11:52] So when I’ve, when I’ve done a little bit, I’ve done a little bit of SwiftUI and I definitely have hit situations where that preview thing sort of breaks and you can’t really tell why, and I’ve never been sure if it’s just me doing something stupid or, you know, I’m hitting some, like, you know, I’m trying to do something in my view that just not supported or is that a, is that a common problem or is that something that.

Ben: [00:12:14] it’s a common problem, but I’ve been able to get around it. Again, just going back to the, make things simpler, you can comment out stuff and, and until it renders, all of a sudden will pop in. You’d be like, okay, it’s something with between this part. And this part, there is a Little like a little diagnostics button, that’ll say like the preview agent crashed and you can click diagnostics and it literally never tells me anything helpful.

But if you go to on a Mac in your home folder, library logs, diagnostic reports That’s where all your crash logs show up and Xcode will have a crash log in there. And so I just keep that window open. And so when the preview stops loading it’s because they tried to run the app and I did something I’m not supposed to.

And anyway, so usually I can go in there and it literally the crash log shows me the line number of the problem. So Xcode has all this data at its fingertips. It’s just not quite right. It’s not quite helpful enough to tell you exactly where the line is in the editor you’re using. But I think that will improve over time.

Jon: [00:13:15] You mentioned components so different, there’s different. Like it’s useful to build with components and stuff. Is there actually like a, an ecosystem? Do people sell components? Is there like a packaging and distribution thing for components?

Ben: [00:13:28] So we have Swift package manager, which is just starting to become useful. Before that we had a couple of, you know community driven efforts to bring independencies. Nothing like what I remember when I used to be a .NET developer where people would sell like package products and they come with support and stuff like that.

There’s, there’s not a lot of that happening in the Swift community. I can think of one success story. And I’ve met the founder and he’s he’s a good. He’s a good guy and he’s built a huge company off of PDF controls and rendering and stuff like that. So if you’ve used an app that, that embeds like PDF editing or scanning or whatever, chances are, you probably use his component.

And that’s a PS PDF kit, but outside of that, I’m not really aware of like a healthy ecosystem for like selling those types of components. But if yeah, open source, we can definitely see You know, bringing in a Swift package and being able to access all of its functionality, whether it’s it, whether it’s like talking to services or if it’s UI based.

I do think that in the iOS community in general, and I suppose this is probably more of a a community where you deploy software onto people’s devices and they may never update them again. You’re generally a little bit more conservative over throwing other people’s code. Into your projects. And there have been some in the early days especially there, there were some pretty bad horror stories about frameworks that did too much or had bad code in them and stuff like that.

And they might cause your app to crash and it’s, you know, it’s not your fault, but it’s your problem type of thing. And, and so I think that there are pockets in the community that are just like no dependencies ever which that extreme I don’t agree with. But but I do think that the, you should take dependencies like that with a healthy dose of skepticism.

And you should be able to read the code if possible and make sure that you’re comfortable putting it in your project because you are going to deploy it onto, you know, hopefully lots of devices and, and you have no control at that point. You can’t force them to update. Whereas, you know, I also do web development.

So if you make a mistake there, you can always push again. Right.

Jon: [00:15:38] You mentioned  like the reactive Swift and  there’ve been things out there for awhile.  So Combine is new and from Apple, is that the main difference is that it’s now like in the box and official?

Ben: [00:15:50] Yes. Yeah, so I just recently launched a course on Combine and it’s at CombineSwift.com. And in, in the course, it was basically like why now? Like these open source has shown that this is not only a popular choice for iOS developers, but across many platforms that RX star ecosystem is huge. And they generally follow the convention.

So if you’re familiar with one on JavaScript, for instance, you’d probably be quite familiar with it on Swift. The, the differences is that, you know, when. Like for instance, I I’m a consultant, so I’ll go work on a project for six months or something, and then I’ll help them hire a team or, or whatever.

And at some point I’m going to be giving this code to somebody else. And I always felt like that decision, that sort of like the calculus of like, is it responsible for me to choose like insert fringe framework name here? I want to make sure that I enable my clients to be successful. And while I personally think that those frameworks were interesting.

I never came across a situation where a client was asking for that. And especially if you’re trying to hire from the broadest pool of developers unless you’re willing to train them on a topic, I think this would probably be different if it was like my team, my company, you know, I would decide on what tools to use and train the people who are gonna to work on it.

But, so I think that there’s something to be said about kind of sticking with the middle of the road. You know, I, you know, my, my web development platform choices, rails, and in rails, there are strong opinions and they’re strong conventions and I get on a new you know, I’m on a project right now and it’s very complicated, but I can look at their rails app on the backend.

And I. Pretty much know how to read it. And I know where things are and I know how to, you know, so there’s something to be said about sticking with those kind of norms. But now I think it’s different because Apple is committed to supporting it right there. They’re going to be making sure that, you know, it doesn’t break with a future version or they don’t bring out some new technology.

That’s just completely incompatible with that style of development. And so I think that’s where the difference is. There are some. You know, probably some growing pains that they have to go through making the framework as robust as RX Swift, for instance. But the majority of the pieces are there and, and you can build the ones that aren’t.

Jon: [00:18:09] Hmm. Yeah, that’s something I. Working with the net team at Microsoft. We struggle with this all the time. Right? It’s like there can be a popular opensource thing out there for awhile. And then people enterprises, you know, want an official thing in the box. And it’s always that challenge of like, what do you ship in the box and what do you not, you know, rely on

Ben: [00:18:32] Yeah. And I’ve worked for an enterprise insulting and the dotnet space many moons ago. And they had a blanket yes. To anything that Microsoft. Gave us and a blanket. No. To anything that was outside that. And Rob, I don’t know if you, you probably don’t remember this, but this was like eons ago and I wanted to use subsonic on this project and they they said, no

Rob: [00:18:54] What is SubSonic again?

Ben: [00:18:57] I don’t remember.

Rob: [00:18:59] You know, I still get pull requests. I still get pull requests.

Jon: [00:19:03] Yeah. Would you approve mine, please?

Rob: [00:19:05] No, I’m…

Jon: [00:19:06] It makes sense. It runs!

Rob: [00:19:07] Got right, Jon. You’ve got to learn to write you to tests.

Jon: [00:19:11] It’s a fad.

Ben: [00:19:13] Yeah, it’s definitely like, I take caution and saying like, it’s good because it comes from Apple because it’s not necessarily true. You know, I like apples frameworks. I like the platform a lot. But when, when something does come from the company that you. You know, your product is based on, there’s a sense of certainty and that it’s going to be more mainstream for other developers as well.

Rob: [00:19:37] So…

Ben: [00:19:38] Not just a fringe thing.

Rob: [00:19:39] I’ve mentioned, I have a question on that. I, I think you and I talked about this when you were launching your, your service, the CombineSwift.com and, and you were asking about platforms and whatnot and you ended up writing own, right?

Ben: [00:19:55] Yes.

Rob: [00:19:56] Yeah, no. So, I mean, I’m, I’m, I’m sitting here on the site, CombineSwift.com.

I’m looking at it. And this is a, you wrote this, you wrote this with rails. I find that just fascinating. Like we’re having this discussion about. You know, platforms. And what about you is whatever you went with, what you knew and you wrote what you knew. And for me, I sell books, I sell videos, right. And like try and figure out how to try and figure out the mechanism to do that is such a challenge because

Ben: [00:20:23] Well, I wouldn’t necessarily recommend it.

Rob: [00:20:25] But it’s beautiful.

It’s wonderful.

Ben: [00:20:29] The reason why I say that is that I, I am incredibly picky.

I find one thing, you know, I like, I looked at teachable for instance and I know some people have launched stuff on teachable and I don’t even, I couldn’t even pinpoint right now what it was that was like, nah, but it was just one of those things.

I’m like, I it’s it’s, I guess it’s the curse of like, I know how to write this stuff and it’s also fun, at least in the moment to be writing it now that I’m paying for it and supporting it and. I’m having to deal with some stupid web packer issue right now. It’s like, I’m like, why did I choose to

Jon: [00:21:03] it off.

Ben: [00:21:03] Yeah, it’s definitely a trade off.

Rob: [00:21:06] Well, I do find it interesting that, you know, when we’re talking about these things about, you know, what you’re willing to accept or not, I mean, you just leaned into rails and you built the thing you wanted, and I fully agree with you. I started on Kajabi was it a year ago trying to do this thing? And yeah, it took me about three months to realize it didn’t do what I wanted to do.

Same with podia, same with like so many other things. And so I ended up just writing my own I using Firebase and you have pages for mine and it works great in view, I should say there is, I mean, I hear what you’re saying. It’s, it’s troublesome, but at the same time, it’s rewarding when you know the platform, you know how to solve a problem because you can get in there and solve it.

So I don’t want to take us to too far on a tangent, but you brought up rails. And I think, like you said, you know where the code is, you know, where the thing is, that is huge. A year down the line when you’re like, why didn’t this thing work? Well, I’m going to go right to the spot because I know that’s where it is.

Kevin: [00:22:02] So when SwiftUI first came out, it was pretty bare bones, pretty rough, as I recall. And then the last, the last big upgrade, they added a bunch of stuff. I’m like, where is it in terms of maturity? Like what kind of apps would you build with it? What kind of apps would you have not built with it?

You know, whereas it, it sort of in its life cycle,

Ben: [00:22:21] So I would say I’m both a extreme optimist and also somewhat pessimistic. If that makes sense at all, like the 80% you, it is unbelievable how fast you can get to the 80%. Like it’s, it’s so enticing when you see how fast it can be to develop things as small components. And when you think about Like there’s, there’s some ceremony and stuff like that that happens.

Like when you, when you’re building like a to-do list app on iOS and all of those things make sense when you’re building like a big project and you need to you need to modularize your code and you need to like isolate things. So you’ve got, you know, a controller and a view, and that view has subclasses for sub views and things like that.

But Sometimes those things are just there because you need a view to go in that spot. It’s not like you don’t necessarily need to create, like, how do I say this? Sometimes there’s just too much ceremony for the level of application you’re building. If that makes sense. I like that kind of a fine grain structure and, you know, attention to detail and the ability to split things off into components when my application is complex enough for that.

But if I’m building it to do app for, for instance, my screencasts that I do, like all the time, I kind of get frustrated with how. Mundane like creating a, a collection view for instances like there’s, there’s just a lot of steps to it. And I find that like in SwiftUI, I can get, I can get there in like 10 minutes, like full to do full, to do app.

I probably shouldn’t have said that cause now Rob’s going to challenge me to do it. But I just feel like there’s like the easy stuff is so unbelievably easy. That said the remaining 20% is sometimes you hit a brick wall and I’m working with two apps right now that I one is just a personal project of mine.

I’ve been struggling with tinnitus for like a little over a year now. And I decided to build an app that would help with this particular type of tinnitus therapy. And so it deals with audio and it’s like, it’s super fun. And I decided to do this, like a bouncy little wave form animation to sort of give you some visual feedback as you’re changing the frequency and the volume of your of your tinnitus frequency.

And it looks pretty amazing and I’m very happy with it. But it crashes in a way that I can’t reproduce, and this is the only thing preventing me from shipping it. And so I just kind of put it on the back burner for now because I’m like, I got to ask, I think I’ve got to ask Apple about that one.

Cause I, I’m at a loss and I don’t want to ship something that I know crashes. So anyway, and then I’m working on another app with a designer friend of mine. I know, I know the podcast, people can’t see it, but it’s basically, there’s this book that he wrote full of these puzzles and the puzzles are called the Rebus puzzles.

And so they have like these icons and your job is to figure out what it is. So, yeah, so I’m holding up this book and it has a spider and a man icon. And then the other one is a bacon and eggs on the top and a golf club on the bottom. So that’s breakfast club. So this is all movies, right? And so the idea is for it to be kind of like a, a puzzle app that responds to texts and voice and stuff like that.

And it’s pretty amazing, but I’m starting to hit those edges where like those quick wins are gone. And now I’m like, I don’t know how to hide the navigation bar when I scroll up because, and this is like the stupidest thing to get hung up on. Right. But it’s because I don’t have the hook that I need. And there, there are things like that, which I get kind of frustrated with.

So I wouldn’t like say a hundred percent SwiftUI all day, every day, but I would say that, yes. Whatever project I go with from this point, onward, a significant portion of it would probably be in SwiftUI UI.

Rob: [00:26:09] I have a question. And given, given that all of y’all have done this right. It’s I swear to God, I’m not trolling anyone here, but in you describing, I think what you said was I can build a, to do app and, you know, and you said to, Rob’s going to make me do it. No, it actually made me think of. ASP.NET 2.0, where you could drag and drop your data sources and line stuff up and bang stuff out so fast.

And then I, you know, my, my brain kind of locked onto that, but then all of the things that you’re describing now, but the fringe cases, I can’t quite get the property hook. I can’t quite

Ben: [00:26:48] Yeah, this is not a new problem at all.

Rob: [00:26:50] Yeah. Well, it’s funny because like, sometimes I think about this and, and you know, of course maybe it’s just me being an old guy.

I don’t know. Dude, what we had with web forums was insane productivity. It was insanity, of course, right. There’s a bunch of problems with it, technically speaking and testing and all that stuff. But I mean, sometimes I think about this, like you want a sortable draggable droppable grid that has search built in with a, you know, an event hook that you can go and do stuff.

I think about that. And I just keep thinking, like, sometimes all of this stuff just seems so sickly. So anyway, the reason I’m bringing this up to you is, and this is a legitimate question. I swear. I’m not trolling you, does it ever feel like you’re doing this again? All the things you did back then, and now you’re doing…

Ben: [00:27:33] Yes, but I have the context and the hindsight to like recognize some key differences. I think because I was there during that time and I was one of the people who said like, Oh, this designer thing, isn’t going to work because five minutes after the demo is over, I’m going to need to like. I I’m going to need to like transform this data.

And I just, I just selected that field from a dropdown in a GUI somewhere, and now I’m lost right now. I need to like hook in and actually on the Mac, this is a good sort of similar point on the Mac in app kit. You have bindings. And so there’s, you can, with a GUI tool, you can say like, Oh, I’ve got this array of people and I want to take the first name and I’m going to bind it to this thing.

And this is how like grids and stuff like that are built on. On on the Mac app. And so like there’s a row controller and it’s got a model and whatever, that’s amazing. As long as you type all of the things correctly, there’s no code completion. It’s in some property pane, GUI, somewhere in a drop down and good luck getting a source control.

If that makes any sense that these are all the problems that like, I think that ASP.NET also had You know, when we’re trying to do these things. What I like about the SwiftUI part of this is that I think that the, the good architecture and the ability to hook in where you need to is almost there, like for the majority of stuff it is there.

And I think that the, the cases where I’m getting hung up on are, are things that I’m certain I can get around. But I, I like the fact that it’s not like there’s a design time experience and a code experience. And I, and like, in, in, when I was doing ASP.NET, I was like, Oh, I’m a, I’m a code behind type of person.

Like, I don’t need that designer. It’s not like that. It’s like, there’s one representation and it is the code. And the UI is, is you know, automatically update actually the UI, the preview, you can right. Click on it and like, Manipulate stuff. And it actually writes the code for you also,

Rob: [00:29:23] Okay, honest question.

Ben: [00:29:24] Crazy.

Rob: [00:29:25] When’s the last time you had to edit XML?

 Ben: [00:29:28] I don’t know, five years ago. I don’t know.

Rob: [00:29:31] Now, you know, I do want to make it clear I’m I, I’m not, I, I am not trying to like, and excavate in SwiftUI and all that to you know, technology that’s 10 plus years old. I’m just to me, it’s like the idea, the idea of the designer, the idea of we can abstract this away now to a visual interface. I think it’s fascinating.

In fact, I feel like it’s coming. Like, I feel like. If someone was to come out with a rails UI or something like that, like it would make perfect sense. Cause it’s all just so known. Like we can now put a UX or UI on top of it and just drag and drop stuff. You know what I mean? Cause

Ben: [00:30:06] Well, I mean, this isn’t drag and drop, right? It’s it’s declarative UI code,

Rob: [00:30:11] Aye. Right. I’m sorry. I’m not really I’m not trying to conflate the two. I know I am, but I’m not trying to conflate the two. I’m just saying like the ease. Of getting from zero to whatever, you know, zero to a hundred is so

Ben: [00:30:22] Yeah. I think that.

Rob: [00:30:24] cases,

Ben: [00:30:24] The differences are what happens when you do go off the rails and how painful is that?

Jon: [00:30:29] that’s the whole thing. I’ve been thinking this the whole time. It’s like that transfer, like getting started, getting something going quickly, hitting 90% of the use cases is great. As long as when you get to that, that cut-over where you’ve got to get down and you need the hooks you need access to, you know, and you need to be able to find where is this thing set up or where is it, you know, where do I hook in and how quick can I fix this?

Ben: [00:30:54] And can I put a break point on it?

Jon: [00:30:56] Yeah. Yeah.

Ben: [00:30:57] One thing I want to bring up about the, like Kevin, back to your question about like, would I use this in a real app or how big of an app or whatever. And I mentioned that I would use switch UI for a major part of it, if I could The Apple’s done a pretty good job of making the UI kit and SwiftUI be able to include each other.

So in a UI kit based app, I view controllers and views. I can create a, what they call a UI hosting view and put a SwiftUI inside of that. And it renders. So I can have just like my settings screen or just, I could just have that avatar view that I designed or my custom button that could just be my only SwiftUI.

Part of the entire app if I want it. And then the, the reverse is also true. If I’ve got something that I wrote in UI kit, either a UI view or a UI view controller, including all of Apple’s stuff, I can I can create a UI view wrapper that includes that. And then there there’s some necessary hooks that you have to create to make sure it stays up to date because in a, in a world where all of your views are value types.

They get thrown away and recreated because it’s cheap, you know, it’s, it’s not free, but it’s super cheap to do so. Whereas objects on the heat are, you don’t want to throw those away and rerender every time a user is typing in character. And so you, those stick around and then there’s an update to method that you can use to kind of synchronize that view with your, with your model.

And so I use that a lot so that I can kind of mix the two. And because of that, my SwiftUI preview functionality and Xcode works actually for almost all the code that I work. I write now because I can create that little wrapper just for my preview and get that live editing experience on stuff.

That isn’t, hasn’t nothing to do with SwiftUI. It’s a little bit slower because it has to create that stuff behind the scenes. But this kind of my main approach to working on applications these days, Mike, my current client that I’m working on doing a fresh build takes like four or five minutes. So if I’m like, Oh, this needs four pixels of padding instead of six.

Like that is just a nightmare. And I don’t want to do, I don’t want to build and run and have to like make those kinds of tweaks and have that feedback cycle be so long. And so, you know, breaking the app out into smaller components and being able to use these previous right. And Xcode I think is just hugely powerful.

Kevin: [00:33:21] Both ways like you have an existing UI kit based application, you can start building some stuff, some parts of it in SwiftUI and integrate it and vice versa. You can, you know, you have SwiftUI application. You can. Yeah. Great. Cool.

Ben: [00:33:38] There’s a, there’s a chocolate and peanut butter joke in here somewhere.

Jon: [00:33:43] So what’s the overall like workflow. Okay. You, you, haven’t an idea for a new app. You want to build what’s your general, like, it sounds like there’s a lot of like iterating on the design side, but how do you actually, like, you know what I mean? How would you, how would you go from, I’ve got an idea to I’m shipping an app.

Ben: [00:34:00] So I really like working with the designer. If a designer can give me like a Figma or sketch marks of an app, I feel like I’m most productive in that environment. I feel like as it, as far as developers go, I think I have a pretty good eye for design, but I wouldn’t call myself a designer. So I can like, if like w w the way I work, I feel like designers don’t need to tell me about things like You know, color choices and font, weights, choices, and things like that.

And proper spacing and consistency and all that stuff like that I recognize it and I do it as a matter of practice, whatever. But sometimes having somebody think about the flow and the bigger picture and the, you know, and being more creative with the design is something that I really value. So, so that’s my preferred approach is when I have some, some Figma mocks, they don’t have to be pixel perfect.

But you know, You know, rough or near, near final designs are really nice to have for things that I’m creating on my own like this, this tinnitus app, it’s got some nice colors and it’s got that nice animation, but when you’ve like squint, it’s like two screens and it’s, you know, it’s, it uses some basic controls.

So it’s got some some, some nice looking lipstick on it, but it’s ultimately just some stock controls and So I think, you know, it, it’s definitely something that, like, I know enough about design to be frustrated with what I can produce myself, if that makes sense. But yeah, I just try to iterate started this, this tinnitus therapy app.

I’m actually, you know, it’s, it’s basically an implementation of a white paper that I skimmed you know, skim down to the conclusion section anyway about like what frequencies, it’s basically a pattern that it plays based on your tinnitus frequency and so I came up with this, this idea of like, okay, it would be really cool for me to play this on my phone.

I’ve seen tools like this on the web as well, but I’m never, you know, I want to be able to like put an AirPods or whatever and just do this, like when it happens, not when I’m like in front of the computer. And so And so, anyway, that’s kind of where the idea came from and I just kind of started iterating and I wanted to also get some practice with SwiftUI.

So I decided just I’m going to do, I’m going to do this on a hundred percent SwiftUI. Which I think is fine if, for me, because I’m using it also as a learning tool. And I also like to teach this stuff. So I want to make sure that I have, you know, have some apps that I’ve created and stuff like that.

For somebody else who’s like just wants to ship an app. I think the decision of like, There’s no, like badge of honor to be like, Oh, it’s a hundred percent SwiftUI. You know what I mean? It’s like, I think that people aren’t gonna be able to see the source code and as long as you ship it and you’re happy with it, like, it doesn’t really matter what it’s written then.

Jon: [00:36:39] Hm. Yeah. There are platform restrictions, right? Like Combine is only. There’s OS level requirements, or I guess that’s just developer level.

Ben: [00:36:48] IO. Yeah. Runtime requirements for Combine. I’m not quite sure why, but but yeah, so I was 13 for both SwiftUI and for for Combine, which typically we have a pretty healthy update cycle and the iOS community, you know, kind of the current version minus one is, is usually pretty standard.

The project I’m on now is unfortunately like two versions behind. Current. So maybe in the fall we can bump up. And in that case, then we’ll be able to start using SwiftUI and combine and stuff like that. But yeah, in the fall is when iOS 15 will be, will be announced.

Jon: [00:37:22] I, what I was wondering about earlier when I was asking about the kind of workflow is I guess, how painful is it to refactor and, and like on the code side of it, how, you know what I mean, how. How easy is it to just kind of quickly refactor your code as you’re going there? Like where you don’t have to think too much, because if you make a mistake, it’s not going to be too bad to rip it out and change it around in there.

Ben: [00:37:49] I would say that it’s in general, it’s, you know, Swift is a statically typed language. So you have the ability to do refactoring and get compile errors if you’re wrong and stuff like that. codes, refactoring tools are. Pretty hilariously bad. Every year I think, Oh, maybe, maybe I can actually rename a class and have it properly rename the file as well and rename all the usage usages.

And it usually works. Sometimes it doesn’t It’s just, I don’t know. Like, I, I, I was a big fan of ReSharper when I was using visual studio and none of that stuff. I mean, it’s just like, and that was over a decade ago. And so ex-co just doesn’t have that same, like, it’s just not as important to them.

Unfortunately, there is a jet, a jet brains IDE for Swift called app code. And it’s great, but it’s kind of like, They’re always chasing a moving target because it’s not first party. It’s not a plugin. It’s a separate ID entirely. So for instance, when SwiftUI came out, they had to like scramble to get their stuff, like to have some support for SwiftUI, because otherwise you’re just editing Swift in app code and looking at it in Xcode, which, and if you’re going to have to run both, I don’t know.

So I’ve just never really made that, made that switch. I do know people who, who use it full-time because of the refactoring support. But that said, I think that, you know, as long as the compiler can, can catch all these errors I’m pretty confident, like ripping things out and moving them around and stuff like that is, especially in SwiftUI, it’s actually a lot easier and SwiftUI UI.

Jon: [00:39:26] one other related thing is like testing. Do you, do, are you able to do like, you know, unit or integration level testing or like, can you test UI component stuff?

Ben: [00:39:37] I actually entered the world of trying to test SwiftUI views yet. Just, I basically treat that as like, I can see it working and I can create previous for all the different States. So if there’s like a, a state that is. That I’m unlikely to ever see happen in the wild, like the missile launched screen or whatever, you know, I can simulate it in the preview and see it.

So for that stuff, I don’t really necessarily see the value in it. But for testing the models and, you know, network service related things yeah, there’s support and Xcode for, for writing and running tests, the testing kind of. The community isn’t quite as behind it as I would like. Most people really don’t write tests.

And when you do find the project as tests, they’re, they’re pretty poultry. So it’s something that I think that definitely could be improved. And I think that tooling certainly helps ease that barrier. But it also requires some discipline and how you design. Your software, right? Because if you’ve, you know, if you start tying things together with like singletons everywhere, then it becomes pretty difficult to isolate things out to test if not impossible.

And, and Apple has a long way to go with that as well. You know, I. Worked on a, a, an app that was integrated with the photos app on the Mac for a couple of years. And writing tests for that environment was really difficult. And we basically had to mirror all of Apple’s types with our own wrappers.

You know, it was probably, you know, six or 10 different like core types that we had to wrap and use our own wrappers so that we could stop them out during testing, because it was like this. Central part of the app that we couldn’t touch in a test because it dealt with a photo library and you don’t have access to that in the test.

And nor would you really want to,

Jon: [00:41:23] Yeah.

Ben: [00:41:24] but but yeah, I would say like, you know, I wish that the tools were more accessible and I wish the community was probably more you know, aligned to testing, but there is support for it. And I do some, myself, probably not enough.

Kevin: [00:41:40] so with the, you know, with a new way of building applications there There may be like things that the, the community has to figure out about, like what’s the right way to structure a large scales with DUI application. Right. Like I, you know, I learned some stuff by going through the, the Apple, you know, like intro course, but like, you could see where like, That’s a very rudimentary way of structuring an application.

And if you want to build something big, that’s got lots and lots of screens. Like what’s a, what’s an effective way to, to organize that and separate your models. It has the, has the community sort of figured that stuff out yet, or is Apple giving guidance around that?

Ben: [00:42:16] I would say Apple’s guidance has been really fantastic on the entry level stuff. Their tutorials are really interactive and rich. And you, you see, during the tutorial, you see the code you’re supposed to ride and you see what that’s doing live on the right hand side. And so as you scroll through, it’s kind of dynamically building up the application.

It’s a really, really nice, neat tech for interactive learning on the web. But that said, they kind of stopped there and like, you know, where do, where do you go from there? I think in general, like, Standard architecture still applies up to the point where you get to those models and the view layer that needs to be recreated.

So like who owns the objects that make the network calls for instance There are, there’s some conventions that we can follow. Apple has these property wrappers, which I guess would be kind of akin to attributes for properties in.net, where you can decorate properties with like functionality. And so there’s.

Because like your view is just a struct, right. And it’s meant to be thrown away and recreated anything you put inside that struct will also be thrown away and recreated. So they have some property rappers, which basically say like Swift, you guys going to take ownership of this thing and keep it around so that so that you can still feel free to rerender the views at any time.

And so that’s kind of the limit on what Apple is providing. But from there, I think that. You know, once you have your, your model logics, those are classes and they live for as long as you need them to live. And then, you know, there’s no MVC to like guide you down a path, but you can, you can kind of create any architecture that you want.

I guess there is one architecture. That’s kind of actually, I take that back. There’s, there’s two in the iOS community that, that People know of one of them is called the Viper and maybe to avoid upsetting anyone and I’ll reserve like my, my judgment, but it does tend to remind me of that kind of like the, you know, the Java naming ecosystem kind of like, there’s a, there’s a presenter factory implementation type.

That’s kind of what it reminds me of. And so it’s just not my style. I’ve never personally worked in that environment, but I don’t think I would enjoy it. And there’s another one that’s more geared towards Swift and SwiftUI. It’s called the, the composable architecture. And there’s, there’s a couple of guys who run a screw, like a screencast video training site called point free.co.

And They talk high, low. They, they go deep on the functional aspect of Swift and SwiftUI. And Combine for that matter their, their stuff is very advanced and they came up with something called the composable architecture and it takes lessons from Redux. And there it’s, it’s not for the faint of heart because you look at it and you’d be like, Oh my God, what’s going on.

But if you do know what’s going on, you can express. Things in a really concise way and it’s guaranteed by the compiler to work the way it should. But I would say with, with environments like that, as you know, I’ve done a fair amount of react as well. When you get something wrong, it’s very difficult to trace down what’s happening.

So I don’t have experience shipping apps with this architecture, but it does interest me you know, just as a. At least as an exercise for learning, if not, if not more. But there are some efforts out there to like come up with architectures that people can use for their apps. For, for the most part, I just create objects with four classes with those responsibilities when I need them.

And I don’t try to like fit into a cookie cutter pattern, if that makes sense.

Kevin: [00:45:49] So w when you’re defining an object model for use in a SwiftUI app, like how much does SwiftUI sort of dictate the shape of your object model or sort of perturb the design? Like, are you designing like a pure domain model and then. You know, plugging it into, you know, SwiftUI or are you building more of a, like MVVM ish kind of thing, which is like an object model that, you know, is designed to kind of interact with the UI.

Do you know what I mean?

Ben: [00:46:20] Yeah. Yeah. MVVM is probably the closest corollary to what I ended up writing. You know, the, the models that I keep referring to are. Subclasses of observable object and Swift. And that means that anytime I Mark an property in those models as published it will fire fire and event, basically that stuff has changing and SwiftUI will coalesce all those changes into a, like in the same run loop, for instance.

So if you change like three, three published properties, like it just kind of says, okay, And then on the next run loop, it will, it will cause any dependent views to rerender. And so, so it doesn’t do any like tree diffing or anything like that. So that influences like the shape of my view models. But outside of that, no, it, I can write whatever I want.

On my, on the puzzle app, I was talking about it. It deals with speech recognizers so that I can like tap the microphone icon. And I can say the answer to the puzzle and it will convert that to text. And I put the text on the screen and then we check the answer to see if it’s correct. And if so we flip the card over.

And my naive implementation of that was each of my puzzle screens, which had a card on it, had a puzzle view model, and that puzzle view model had a speech recognizer on it. And so when I loaded up a pack of 50 cards, suddenly I had 50. Of the speech recognizers, which come from Apple being initialized at the same time, because I like, and so, and it was something that was kind of surprising to me because I was sort of used to that, like the lazy loading nature of, of traditional UI kit, like where things get created when they are, when they are called.

Whereas this is all state-based and I was inadvertently creating it all upfront. So I had to kind of design myself around that. But but I would say in general, like aside from the, the view model shape of things and using that published attributes or published property wrapper I still have the freedom to kind of create the code.

I want them right.

Kevin: [00:48:16] Have you, have you gotten to the point in application yet where like the, you know, the, the fact that you’re creating and destroying the views constantly, you know, over and over again. Like, is there a point where that starts to bog down the application? Is there like a point of complexity where that becomes an issue or is it that they really got that kind of tuned?

Ben: [00:48:36] I honestly, I’m surprised how. Like, I don’t have to care about that. The only time I really have to care about it is if I’m mutating state in the view render itself, which would be a problem in any framework. Right. Because then it would just cause like an endless render and XCode will detect this and it’ll give you a well, it’s a runtime warning.

Like, Hey, you probably shouldn’t be doing this. I have a couple of cases where I’m like, Yeah, I know, but I’m only going to do it just this once. And then, you know what I mean? Like it renders once and that gives me the data I need. And then that’s enough for me to say, Oh, okay. Like I actually, the context of this is I’ve got like, I’ve got a card that I want to flip over.

Right. And in reality, it’s a view that I’m doing a tr a 3d transform on. Right. And so I’ve got a front and I’ve got a back. And, and so what I do is. When the front card rotates to like where you can only see the card edge, I swapped them where the other one is there. And then if then, and so I actually have to render the back backwards so that when I flip it it’s looks right.

And so. SwiftUI has this thing called animatable modifiers, where you can basically take control of the animation and they give you a floating point value of zero to one to tell you like, okay, here’s the progress of the, of the animation. And it’s up to you to return, to transform to like squish it or scale it or whatever.

And what’s cool about that is like you’re agnostic to the animation curve. The timing of the animation, it could be easy and he’s out or whatever, or it could be a spring based animation. So that number may not linearly progress from zero to one, but you don’t really care. And so in that, in that animatable modifier, I check to see if that angle is 90 degrees and if it is 90 degrees, then I set some state that tells my UI to flip the display of those cards.

And so I get a warning right there because I’m. There are literally animating I’m in the middle of an animation. I changed state during the animation, but because I only do it once, I don’t know. I think it’s fine. Maybe there’s a better way to do that, but but this is the type of thing that like It it’s surprising to me like how little I have to worry about them throwing away pieces of the view tree and recreating, recreating them.

It’s, it’s definitely different than the like from what I understand to be like the react model where you, where does like DOM diffing and stuff like that. And there was a lot of A lot of tech that makes that fast. But Apple has chosen a different approach and it’s, it’s all purely based on States.

And I don’t know. They’ve, they’ve been able to, to make it pretty fast. So.

Jon: [00:51:08] So you talked about like the cases where you want to directly control the animation or stuff. Is there a kind of a good. System for just kind of transitions, you know, kind of like trans yeah. Transitions.

Ben: [00:51:21] Yeah. So there’s implicit animations and explicit animations. So I can say here’s a rectangle on the screen. It’s got a color and the color comes from my model might be model. And I can just say dot animated. And then when I changed the change, any attribute of the view tree that came before that modifier.

So the, the frame of the color, the alignment or whatever, the, the borders any of that stuff, it turns out if any of it, that is animatable, it’ll animate whenever any of that stuff changes, which is great. If you just want a free animation. But it sucks if you want to animate the frame, but not the color.

So if you want to do that, you have to either get clever with the position of where you add the animated modifier because order matters. If you add it before the color, but after the frame, then the frame we’ll modify it, be animated, but the color won’t. And so the other, the other approach is to do an explicit animation and those explicit animations, you can be more precise about what you want to animate and, and how but the, the simple stuff about just moving stuff around is really, really easy.

Jon: [00:52:26] okay. How, how much do you have to care about lifetime? I’m thinking of things like most app models have a way of like putting your app to sleep or something for a low power mode or that sort of thing. Do you just basically like set, set your properties in your mind and like it takes care of it for you behind the scenes or

Ben: [00:52:46] So from the beginning, actually iOS has been really really aggressive about Killing apps that, that are are like the tie up the CPU, for instance or take too long to boot or whatever. When you go into the background, you’d be surprised how many of your apps are actually being suspended and evicted from, from the running state.

And until you come back in and, you know, there’s, there’s probably some stuff where it’s taking the memory and putting it to the, to the flash storage on the device. And then when you come back at re it’ll restore it, and your app is still running in the same place it was before. For the most part, you don’t really have to think about that stuff.

If you do need to do like background stuff like if you’re playing audio, for instance, especially if you are like transforming audio samples or whatever, then you need to be running like all the time. And so there are special background modes you have to elect into and Apple has to approve those.

So they’ll, you know, if you’re an audio processing app, they’ll say yes. And if you’re, you know, if you’re I don’t know, a game that has nothing to do with audio, then. They would be suspicious. Right.

Kevin: [00:53:50] So one of the, you know, one of the compelling things about swept UI is that it’s designed to be truly cross-platform. You know, you could run it on, you can write apps. So the work on the Mac, on the phone, on the watch, Apple

Ben: [00:54:01] You said that we’re truly cross-platform

Kevin: [00:54:07] In  the marketing sense of truly is that something you’ve experienced? Is that, is that something you’ve been able to take advantage of? Do you, or have you mostly worked in the iOS

Ben: [00:54:15] I’m a little afraid of, to be honest. Cause I have some friends that are embracing the SwiftUI for the Mac. And some things are easy that I would say that Mac is much farther behind iOS in terms of like viability for launching like a true first-class product. But, but that said, you know, w a app kit isn’t going away.

So if you need like, kind of a robust, like a tried and true method of developing mock-ups, you can still do that. I would probably try to suffer through SwiftUI and trying to make it work. And if things didn’t work exactly how I wanted, I would be stuck with filing bugs or just dealing with it. And so I guess it just depends on what your priorities are.

It is pretty amazing that this puzzle app that I’m writing right now. Well, it already works on the iPad, which wasn’t very surprising, but with minimal effort I can get it to work on the Mac. So that’s pretty nice. And I haven’t been given Mac a single thought actually, until you said that, but. Yeah, it’d probably work and I’d probably have to like fix things here or there, but I guess the question is, does it need to be on the Mac and is there, is there a market for it on the Mac and maybe there is.

Jon: [00:55:24] What’s the way that you, how do you write responsive views or do you write a different view for each platform or do you, can you write things at scale to the screen size?

Ben: [00:55:38] Yeah, more, more likely you’d write things that are just adaptable in general. Like You can say like, Oh, this, this particular modifier only applies to iPad or only applies to this platform or whatever, or only applies when in dark mode or whatever. So, so you can make things reactive to the environment in many different ways.

In general, it’s like you’re gonna have some branching logic somewhere, and it’s probably better that that’s not like. In the first line of code. If I’m on the Mac, I’m going to run this app, whole view, tree, and experience. And if I’m on iOS, I’m going to do this. You know, hopefully there’s a little bit more reuse you could, you could have between your views because you know, the, the views that you get, the, you create like buttons and lists and images and stuff like that.

Those are trying to create a conceptual model for you to write. And then on the platform, it renders what is appropriate for that platform. So. Yeah, for Apple TV, you would get a list that responds to the TV remote and has focus rings, which doesn’t really exist on iOS or the Mac and, and things like that.

So like I, the idea is that you write at one time and it does the right thing on every platform. But like I said before, I’m really picky. So if it didn’t work exactly how I wanted, I would be probably pretty frustrated. And I might go back to saying, I have a TV experience and I have a Mac experience and I have an iOS experience and maybe they’re not all the same thing.

Rob: [00:56:57] Yeah, it’s reminding me of I learned tailwind CSS in the last year. I hate CSS, but like, you look at, you look at tailwind CSS on the page and it’s just like, what? But then you take some time to learn it and it, it changed everything for me. Yeah. Yeah. It’s it’s interesting. Yeah, it’s really interesting stuff.

Kevin: [00:57:19] So I was just going to say that, you know, I have my, my little toy SwiftUI app that I built. It didn’t take too long. Mostly I’m running it on the Mac. So I did it from the Mac and it didn’t take too long before I hit something. It was like, Oh, I want to do this. And then you read the documentation and it says only support on IUs iOS or, you know so it’s definitely some, some stumbling blocks.

There were some, some stuff in the platform only works on one operating system or the other. Yeah.

Rob: [00:57:49] So I have one last question for Ben. You learned guitar when, what it was, it was like, I mean, when I say relatively recently, like within the span of time, I’ve known you write like,

Ben: [00:58:01] No, no, no.

Rob: [00:58:02] Oh really?

Ben: [00:58:03] Yeah, I mean, I, I got my first guitar when I was seven and I, and I learned he’s got the whole world in his hands and that was about it. And then I put it down forever and then I got a guitar. I got an electric guitar when I was 13. And so, you know, it was my goal in life to learn how to play Nirvana and Metallica and rage against the machine and all that stuff.

So yeah, so I, I played electric guitar for a while. And then I didn’t really like my amp or my pedals and I couldn’t sound like the people that I liked. So I just played acoustic guitar for like 15 years or something. And I just never really progressed. And then one day I was like, Oh, I actually have a job and I can afford to like buy toys.

I’m going to buy an electric guitar. And yeah. So now I’ve got multiple electric guitars and amps and a pet pedalboard and it’s, it’s a, it’s a fun hobby.

Rob: [00:59:00] Well, I was remembering the very first I think you said it was the very first app you made was guitar tab,

Ben: [00:59:05] Yeah. Yeah, it was. That’s what made me leave dotnet and change my whole career up is I was like, I could tolerate objective C if it meant that I can work on a Mac and you know, make money in the app store or whatever.

Rob: [00:59:20] Yeah. Well, I was just thinking about that. Cause you and I were talking before we started recording about a Pink Floyd and in your, your Pink Floyd you recorded two two songs that you’ve done, which I actually watched. Well, We were getting ready here and they’re really good. Like they’re really good.

And I was like, Jesus, if he’s only been playing for like the last seven or eight years, I’m jealous, but I guess why didn’t know you when you were 13? Did I? No, I don’t think I do so. Yeah. It’s very impressive stuff. I don’t know. Maybe Jon can, Jon can let that play us out. When we went, when we ended up today.

Jon: [00:59:51] Oh, sure. Yeah. If I can get the artists release signed.

Ben: [00:59:57] Well, thanks. That’s very kind of you to say. It’s it’s I think it’s important to have hobbies that are not software development, because if, I mean, if that starts to stress you out, then your hobby stresses you out. And that sucks for, you know, for That’s just not a good state to be in. And so I’ve taken up guitar and baking and cooking, and I think it’s good to, to have other hobbies as well as programming.

Kevin: [01:00:24] All right. So I think we’re at a time. So thanks a lot, Ben, for coming on and educating us. Tell us the websites of  your training projects so people know.

Ben: [01:00:34] You can find the Combine Swift course at CombineSwift.com. I, my regular screencasts on iOS development are at NSScreencast.com. One day, I’m going to have to change the name of that because the NS is probably not long for this world. Yeah. And I guess you could find me on Twitter at @subdigital. And it’s been a pleasure.

Thanks a lot for inviting me on.

Herding Code 243: Shawn Wildermuth on his new film, Hello World

Kevin and Jon talk to Shawn Wildermuth about his new documentary film, Hello World. Shawn talks about how this film project began as a “love letter to software development,” exploring how amazing this career can be. As he delved into it he became more aware of the lack representation of women and people of color in this profession, and this film details his exploration of that topic through interviews and historical background.

You can pre-order the film now, and watch it on-demand on a lot of streaming platforms starting December 15,2020.

Download / Listen: Herding Code 243: Shawn Wildermuth on his new film, Hello World

Transcript:

Jon: [00:00:09] Hello, and welcome to Herding Code. This episode is being recorded November 20, 2020. And today we’re talking to Shawn Wildermuth about the Hello World film. Shawn, can you introduce yourself and the film?

Shawn: [00:00:22] I’d be more than happy to. I’m Shawn Wildermuth. I’m a technologist and mostly a teacher these days. They don’t let me around code anymore. But I’ve got a blog at wildermuth.com and I made a documentary about software developers called Hello World.

Jon: [00:00:38] So what’s kind of the main focus. Like how do you approach software developers and you know, what, what are you kind of talking about there?

Shawn: [00:00:48] Sure. I started making the film. I’ll tell it in this kind of story. I started making the film because I wanted to sort of do a love letter to software development because it’s been so incredibly useful to me. Like it has saved me from a life of working in a 7-11 night shift. And I just love everything about.

How interesting the job is, and I want to sort of encourage people who didn’t think they could do it, that they could. And so that was sort of the first approach. And in the middle of that the me too movement came through and some other things in our industry were changing with conferences and such, and I realized that.

I hadn’t really worked with almost any women and certainly not women from the United States or Canada that I’ve worked on exclusively with people that looked like me. You know, I look a lot like a, the comic book guy, if you don’t know what I look like from the Simpsons. Right. I fit the, the stereotype really well.

And  so I pivoted the movie to be about the lack of women and people of color, especially in the industry. Because it’s it’s, as I say, in the film, it wasn’t that there weren’t enough women or people of color in, in, in In software development. It was that I had never noticed there weren’t enough.

Like, it just didn’t even occur to me to notice. And I like to think of myself as someone who’s, you know, at least should notice those sorts of things. And so in that same time, I was having a dinner with Richard Campbell years and years ago. And he was mentioning about the early women in software development, being the first programmers, which was a story I didn’t know.

And, and that’s part of what we talk about is sort of the history. Of software development and how this sort of went from one thing to another. And  then I looked back and it had been five years and I didn’t know what I was doing with my life.

Jon: [00:02:43] it’s a, it’s really fascinating that you’ve kind of created a documentary during a time of some transition. And some of my favorite documentaries that I’ve seen have kind of. Almost, but either through discovery during the filming, or just kind of by happy accident with evolution, you know, with history of evolving have kind of captured things.

I remember there was a documentary I saw called startup.com and it happened during the.com startup time and that startup bust and it followed these founders and, you know, getting huge valuation and going and interviewing. You know, in the white house and then everything. And then they get into huge fights and then the whole thing comes crashing down and the, and the film captured all that.

And it sounds to me like, I mean, and just observing everything that’s gone on, it’s been a lot of change and a lot of awareness has occurred just over this past year and few years. So what does that look like in terms of. You know, things changing as you’re filming. Do you just kind of keep filming more stuff and figure it out in editing?

Or do you kind of, you know, how do you pivot a film?

Shawn: [00:03:57] It’s difficult. We interviewed 50 different people software engineers. We interviewed some people in education and a couple of others and what, what I learned, cause I didn’t, I’ve never made a film before. Right? I mean, I’ve done some little things, but nothing like certainly of this size that you  find the story in the editing bay, even though I had an idea originally, it almost always changes and it reminds me of software in a, in a lot of ways, because often what you think you’re building when you start that first sprint, or when you write that first spec often, isn’t what it really looks like because you it’s, it’s this continuous discovery of what is going on.

And that really attracted you know, it attracted me to it because I liked the way that I. Like to build software, which is finding a group of people that all have specific skills that are gonna lend themselves to it. Not thinking that one person is going to be the best at everything and getting over the idea that I could be the best at everything.

You know, for me, it’s been, eye-opening not only in how I spend the rest of my life, but also like, Oh, you know what? That’s a lot less pressure.

Jon: [00:05:07] Hm. Yeah. As you’re talking about that, then it makes me wonder, like with software there’s been a change over the past, you know, I mean over our software development careers to moving to a more agile and, you know, being able to like pivoting is considered just something you do every day. Like you’re constantly redeveloping, you know, like.

Figuring out the next best spin thing based on today’s information, is that is that something that felt similar? Like, are you able to apply those kinds of like agile development sorts of things to film development?

Shawn: [00:05:42] You are in a lot of ways, though it’s a little different. So one of the things I learned early on was that there’s a difference between documentary and let’s say you know, regular films that you might see with a story in them. So when the Avengers was filmed, the Avengers shot about four minutes of film for everyone, one minute on screen.

And because they go in knowing exactly what they’re going to film, like they have a script, they have this, they have this, they’ve got it all planned and documentary isn’t like that. In many cases it’s a hundred to one. A lot of it is this filtering mechanism, or if you take a movie like hoop dreams, which is four hours, which is really a long time for a film they had like 4,000 hours of footage cause they spent 10 years with these kids.

And so it is, it is really, you know, mining that information and digging through and reading transcripts and watching the footage as you’re shooting it. And the, the, the agileness comes from as you’re gaining information from, let’s say an interview or spending the day with somebody or watching an event happen.

Things are really changing. There’s a good example of that. I was interviewing Debra karata who you may or may not know, but

Jon: [00:06:59] Oh, yeah.

Shawn: [00:06:59] does a lot of angular stuff with Pluralsight and I was interviewing

Jon: [00:07:03] when I was first learning to program, one of her books was the, one of the first books I read. And I, it was, it was like mind blowing when I actually met her in person. I was just like, Oh yeah, she’s amazing.

Shawn: [00:07:16] She is. And she hadn’t mentioned that her, I think it was her daughter or a friend of her daughters had gone to this college in California Harvey Mudd college, and that they had changed to be graduating from 15% to 50% women in their computer science. And that like changed my perspective of like, Oh, I need to go back and do some research about the education piece of this. And that really changed the whole view because you’re in the middle of, you know, information gathering or mining or whatever you want to think about the way filming does. And you go, Oh, this changes, everything was changed is the way we think about this in an entirely different way.

And that’s, you know, that’s what happens at least happened for me with documentary film. And when I talk to other filmmakers, it’s very much like that, depending on the kind of film they’re trying to make, but being unwilling  to move or pivot or adjust. Has that idea has really changed the way we build software has allowed me to make a film because I was already sort of adept at it, but it’s also forced me to in my everyday life not be so entrenched in my views or my ideas or how I expect my relationships to go or whatever the case may be.

It, it. It’s been a really good practice for, for you know, just being able to not be as, as rigid as I’ve spent some of my career being like, what do you mean C sharp? Isn’t the best language? What do you mean that like, whatever it is, you know, that Of course, we can’t do anything outside of Firefox.

I mean FoxPro, there’s the word I was looking for. Everything has to be FoxPro it. Like we have these weird entrenched opinions that sometimes we look back and like, what kind of bullshit was I talking about?

Jon: [00:09:05] Yeah. Yeah. It’s a, it’s amazing how like, awareness, all of a sudden opens your eyes and then you see something that should have been right under your nose. Like it was right under your nose all the time, and you’re just blind to blind to it, you know? Did you observe during the time that during, because this has been years for you to create this, did you observe any change in, you know, in the industry during that time?

Like you mentioned the me too movement, and then of course, you know, more awareness in underrepresented minorities is here. Did you see any hopefully positive change during that time? Yeah.

Shawn: [00:09:42] I did, you know, I went into the film once we made the pivot, worrying that the industry that I love so much had these sort of sexist or racist overtones. And I came out of it really with this idea of that it’s mostly due to unconscious bias and you know, fit. So what I, what I saw is that we were changing the way we.

Talked about software and software teams. One of the ideas in the film that is very important to me is whether you buy into the social justice of, of course, this is the right thing, and this could be generally generally changing for people in certain communities, especially underserved communities, especially underserved communities around the world, not just here in the us but that we can make better software with better integrated teams with better diversity. And I’m not just talking about diversity of race and gender, but also. Just backgrounds and ages. And you know, the idea that a company would release a app to track the period cycle of women and make it all pink. Because obviously there were four guys on the team.

It was like, well, it’s a app for women. It’s gotta be pink, you know? And just having a better exposure, you know, the facial recognition that doesn’t work as well on, on dark complected skin or the fact that the early airbags were never tested with crash test dummies, the size of women. And so they killed a bunch of women before they figured that out.

You know, it’s not, it’s an engineering problem that. If we, again, if we ignore whether the right or wrong of it, you know, some people can argue about, you know, merit based or meritocracies and all that at the end of the day, I think we can make better software when we have these different perspectives to help us figure out how to build better software, you know Scott Hanselman talks about it sort of like an intersectionality of are you building medical software? Do you have people on the team who have had medical problems on dealt with medicine as a user? Are you building software for fireman? Do you have access to someone who knows fireman on the team? Like it’s this idea of, of, you know, it used to be that we would get a spec and they would write an app over two years, or we used to call them programs, but app over two years and then you show it to the customer and it was either right or wrong. And then you’d have to train them to figure out how to make it right for them. And we’ve changed a lot of that, but I still feel like the representation is still hurting the quality of the software we build.

You know, there are places where. In our industry, where there is great representation. You know, it’s not, it’s not you know, a big solution, but I think we need to own the lack of representation when we can like get out in front of the story. If you’re running a conference and 90% of the people who submit papers are men. Talk about that. Say why can’t we get women or people of color to submit, talks to our thing and, and, and talk about it instead of trying to make the numbers look good, which is actually, I feel like happens sometimes. Okay. Well, except all the women in the backfield with men and I don’t, again, that’s not about fairness, that’s hiding the fact that we don’t have enough.

You know, let’s say women’s speakers at conferences. That doesn’t help us because it doesn’t, I think we’re missing part of that. And that’s something that I think is finally getting better, but still think we have a long way to go.

Jon: [00:13:23] Yeah. Yeah.  You mentioned that, it, it makes a better product and a better team at a better experience for everyone when there is more diversity of background and thought and you know, all the different things, education level, and, you know, just different languages spoken and so many things that we are unconsciously.

I mean, that’s the whole thing. It’s unconscious bias. And I think. You know, going into this, a lot of us had thought, well, okay, we should be nice to different, you know, people that are different than us, but it’s going to put a cost, you know, it’s going to slow us down and it’s going to put a cost and it’s harder to hire and all that.

And really the result, as you’re saying is you end up building better software and being a better team. And you know, like all these, it’s an, it’s a huge net positive.  It is something that I’ve worked with on  conferences putting together conferences, is it, it does take some work to find speakers, and some of it, I think comes from people not seeing themselves as speakers and not, you know what I mean? And so like for instance, women speakers. It takes some encouraging sometimes for, for a few reasons. One is they don’t see themselves as speakers because they’ve always seen men speaking on stage. And also there’s a little bit of fear that they’re going to be, you know, singled out and, you know, kind of harassed in a way that men just aren’t aware of.

Did you, did you talk to people where, where that was an issue, you know, where people are scared or just don’t want to put up with negativity.

Shawn: [00:14:59] Yeah, we did. We, you know, we reached out to a lot of people that I thought would really have good stories, but there still was a reticence with a lot of them to talk about it on camera. Because they didn’t want to be labeled as that person or being difficult or whatever, but we did find a few people that were pretty honest about just the difficulties, you know, the, they, they talk about the pipeline getting people of color and women into the software industry.

But the other piece of it is the leaky pipeline and that is retaining people once they’re in the industry. And maybe they’re there. Experience and bias or sexual harassment or just, you know, the, one of the people we talked to Donna Malaya, I think is how you pronounce her last name. I’m sure that’s wrong.

But she talked about that there’s a difficulty in. Software for some people because they have a softer voices that they think that if you want to espouse a good idea, the best way to do it is to be excited to tell everybody about it and to be, you know, want to run the meeting and to talk a lot about it.

And a lot of good ideas come from people that don’t have that and that. And so it ends up being the, I think some people are kept out of especially leadership positions because it’s viewed that the only way to be a leader is to be a leader in sort of a standard masculine way that we think about it as being gregarious and loud and, and You know, always proselytizing what they want to do.

And they’re great. They’re great voices in the room. There’s a bumper sticker I’ve had for a long time that says speak your voice, even if your voice cracks. Cause it’s this thing of like everyone has their truth and, and when you get people like me that love the sound of their own voice, I can drowned out the people that have great ideas.

Jon: [00:16:51] Yeah. Yeah. Well, and there’s a balance to that, which you’ve done is you’re using your voice to give other people a platform. Which is, you know, which but, but you’re right. That is, I mean, we’re, we’re on a podcast and we’re all, you know, white men and, and it’s, it’s, you know, it’s always like a, a trade-off.

Did you, so you had previously done a hello world podcast where the two related to the podcast kind of turned into the film a bit.

Shawn: [00:17:21] It did. So the podcast was about how people got started. And I think you were on it, John, if I remember. Right. And we stopped after 80 or 90 episodes of, because we started to get the same stories over and over again. And that gave me this idea of like, Wouldn’t it be great to show the different, those stories that I was finding in the podcast, but you’d be able to tell a larger story about how great it is to be in this industry.

Because one of the things I get a lot from people is, Oh, I couldn’t do that. I was never good at math, or I can’t do that because I’m not smart enough or whatever the case may be. And. I kind of want to burst those balloons as well. That’s one of the other goals of the film that has stuck with it, even with the pivoting is we can solve this if we are more you know, accepting or if we don’t, you know, hammer people with math right away.

I was talking with John Romero of, of doom fame. And he was like, you can learn all the math if you want, but the computers do all that stuff for you. If you just want to have the, you know, the character look into the camera, you just tell it to look into the camera. You don’t have to figure out how to do the, the three dimensional matrix mass to make it work.

You know, that’s where we’re at as an industry. And so bursting some of that like elite ism about what software really is. There’s tons of jobs in software that aren’t. You know, working on AI or working in machine learning or working in 3d engine development or things that would be great for all sorts of people to do.

And, and so I’ve liked, I’d like that sort of democratization of, of software because of that. I want, I want us to lower the, the lower, the barrier of entry a little when I was talking with Harvey Mudd college. One of the things they did was that they changed the entry level computer science course to be Python versus Java.

And this isn’t new versus old, nearly as much as is ceremony versus not ceremony. Right. You can run one line of, of, of Python code and get a result. You can’t do that in Java. And so what it was doing, or at least what they discovered was happening was people who had played with programming in high school or taken the pre high school courses.

They came in ready for that. And then you have these other people who were like, well, they came to college to learn a skill, not to learn more about a skill that I already had. And they felt like they were immediately behind and more apt to change their majors and get out of it. And Maria Klawe who’s the president of Harvey Mudd was talking about, this was a big change when personal computers came into the home.

But because before then you went to college to learn computers. You didn’t have any expectation that you had knowledge before that. Right. And so, and it tended to gravitate more towards boys because computers were capable of computer games and tended to hog those computers. And so this is sort of this societal shift that happened, these great things that happened with computers, but it also has some unintended consequences we think.

Cause it isn’t, it also, isn’t just about bias. It’s about interest. You know, how do you get people interested in what looks like? What we, what we, what the media of our country at least does is tell the story of what a software developer looks like. And it looks like the guy in Jurassic Park that we all identify as a computer guy or Silicon Valley, or Big Bang Theory.

And, and who wants that? Like the only. Early on in big bang theory, the, they played up, this men are smart and there’s the dumb blonde across the hall. And then they tried to sort of solve that by bringing in other characters, but from the outside, especially when you’re growing up, that imprint you with what you think you’re where you’re supposed to do and where you’re not supposed to do, you know?

And there will always be those outliers that are like, I don’t care. I love this. I’m going to do it, but that shouldn’t be the way it is, you know? Most of the women that we interviewed for the film are very self-assured capable and you know, pillars of this community Julie Lerman and, and others but getting people who are just the day-to-day developer that also fit into those situations is just, it’s just baffling that we, I feel like as a society we’ve kept them out just because we didn’t go.

There’s the, you can’t just make D&D character generators with programming. You could make music, or you could make, you know, things that might appeal more, more to women than, than sort of geeky guys in their basement. And you know, I want to burst that. I, I dropped out of high school and college.

Like I should not have been successful in this career at all. I came from a very poor background. I was very lucky to get a computer when I was a kid by cause I got an a go-cart accident and suddenly we had some money from the thing to buy a computer. Like this is not the standard thing, but once I started working, I would show up and I would get the sort of privilege of “You look the part”. Yeah. You know, there used to be this idea about team fitness. Like, are they going to fit in with us? Well, that idea of are they going to fit in with us? You know, the culture of our company tends to mean that, you know, when you see someone that doesn’t look like you are, are they going to get hired?

Right. Even if they seemingly have the same skills, I think it can fall down really quickly. I remember being interviewed a bunch of times and, and was, they were always like, Oh, it looks like you’d really fit in here, which I didn’t realize was, was implicit bias, like this hidden bias in our brain.

And I have bias in my brain. I think we all do. What’s that song from Avenue Q everyone’s a little bit racist. In case you haven’t seen it yet, you should. But the, the trick is not acting on it, right? When my reptilian part of my brain, that there’s a black man walking behind me and I’m like, Oh no, I, I can’t act on that.

Right. When some, when I see a resume and it’s a name that I identify as a certain culture, or is a woman, I can’t take that into account. I have to assume. And sometimes it takes explicit work to get rid of implicit bias us pretending that we’re the least biased person in the room. I don’t think helps.

Jon: [00:24:08] Yeah. Wow. You covered a lot there.

Shawn: [00:24:11] Sorry.

Jon: [00:24:12] No, no, it’s it’s, this is fascinating. It’s interesting. One thing earlier you were speaking about, you know, women and they’re what draws them to programming and seeing themselves as, as programmers. And it’s interesting for me seeing through the perspective of my three daughters and two of them right now, like regularly our programming and all of them. I’ve shown a little bit of like, here’s what it’s like, but it wasn’t interesting to them at all. I mean, not really, you know, but then, but then, but so my youngest got into Jewelbots because of the work Sara Chipps has done. And she has, you know, two things that that she did that are smart is one she understands and spend a lot of time talking to young girls about what was interesting to them and realizing like, okay, software bracelets and do it. But another thing she did that was. Really smart. And I don’t think people notice enough was she created a community. They had a, a forum have a forum and they like are really welcoming and they have Jewelbots ambassadors, and, and it’s just super friendly, you know?

And so people would say like, Hey, I made a thing, check it out. And you know, a bunch of other, like, you know, young girls are like, Hey, that’s awesome. I love it. You know? And it’s like, super, like, you’re part of it. You’re welcomed and accepted and, you know, helping people out. And another thing that’s, that was interesting to me is my oldest now is minoring in computer science in college.

And she, I showed her some computer stuff early on and she never thought it was cool. Like, it was just like that’s for dudes, you know? And then she, she ended up taking a class kind of on a whim. She took a Python class and it was sort of a fun, you know, it was like, Oh, I have to take one, whatever math, science class or whatever it was.

And this fulfilled it. And she was shocked that she liked it. And she was like, this is really fun. And like you said, it was Python. She did, they didn’t throw her into pointer, arithmetic or any crazy stuff like that. It was just like doing some fun stuff with Python in a browser. Like it was all REPL in a browser. So it wasn’t all this, like let’s over nerd you from the beginning, it was like, you know, Hey, it’s, it’s fun and playing kind of fee

Shawn: [00:26:25] it’s really interesting. Cause we we interviewed someone from Georgia tech and she was talking about the Georgia tech requires all graduate all, anyone that goes to this school to take a computer science course and they. And she noticed that a lot of women took it in their fourth year.

And by time they figured out they liked it. It was too late to change their major. Because there’s this expectation that it’s hard or it’s going to be a boring course, or they’re not, you know, all those same things that w we sort of think about, you know, and, and that’s going to be true across the board.

I had to take an economics course that I still, I still use that economics book to to fall asleep at night, you know, two pages of economics and I am out.

Jon: [00:27:11] Yeah.

Shawn: [00:27:14] So I mean, I think changing some of that and some of it is being able to see and model yourself as it in and in other ways You know, making it to where you can realize it’s fun.

It’s not like people that get started with Python need or will stay with Python and do this sort of like, you know script programming you know, once you get them interested, then everything else, you know we’re all gonna learn, you know, 14 languages in our career and decide some are great and some aren’t and, you know One of the things that Maria Klawe at Harvey Mudd said that really concerned me was she said, you know a lot of it happens in high school, the kind of high school preparation that prepare women and people of color to go into, let’s say the top computer science colleges in the country is very different based on economic situations.

You know, lower Alabama is much different from from San Francisco, right? Just the economic situation within a city or with where you’re at in the country can really make a difference in what she said. That really bothered me. He said there’s about a hundred thousand women every year who are qualified to go into an MIT, a Harvey, Mudd, a Stanford or whatever.

And there’s about a hundred people of color. A hundred versus a hundred thousand. So I, you know, I think we conflate diversity with women in the software industry really easily without really thinking about the other aspect, which is where are all the people of color, you know? It, it, it it’s, and I’ve worked with some African-Americans or I guess I should say black now.

But black developers before, and they were great. And again, they bring different perspective and they, they do this, but it. It tends to be that they’re never thought of as the lead. We talked to a couple of people here in Atlanta that were like, I go on a consulting gig and I talk to people and they defer to the white guy because they assume that they’re the lead developer in, in this project.

And that’s frustrating. Like, there’s just this expectation. We do this little test. In the in the film where we show a clip from Jurassic Park and ask people to think about what a developer looks like. And then we tell them, you know, is it, is it the white guy? That’s part of your brain, the Unix system.

And then there’s a pan over to Samuel L. Jackson. Who’s also running computers and he’s a head of the it department in drastic park that no one remembers no one remembers.

Jon: [00:29:54] Yeah. Wow. Well, and then also just the day is saved by the young girl at the end. Right. That happens. I know Linux. This is

Shawn: [00:30:03] Yeah, yeah. But no one remembers that. And so, you know,

Jon: [00:30:08] I seriously had no idea. Samuel Jackson was in that. Wow. It’s been a while.

Shawn: [00:30:13] It has, but you know, there is something important that we need to talk about. You have a daughter in college.

Jon: [00:30:20] Oh my gosh. Yeah. I have three teenagers. Yeah. Yep. Time flies. She actually, she had gotten accepted to Berkeley, decided to start at community college instead just for, for costs to get general ed done. And the timing was right. You know, it was right with COVID and everyone’s taking class from home anyways.

So it ended up working really well for her,

Shawn: [00:30:45] Oh, that’s awesome. And she gets to stay home.

Jon: [00:30:48] yeah, yeah. So

Shawn: [00:30:49] cause you’re in LA, right?

Jon: [00:30:50] I’m in San Diego,

Shawn: [00:30:52] Oh, San Diego.

Jon: [00:30:53] which, you know, it’s part of the LA metropolis, so

Shawn: [00:30:56] We call it the other LA

Jon: [00:30:58] yeah.

Shawn: [00:31:00] or

Kevin: [00:31:00] Excuse me. I, I grew up in San Diego. It is not part of LA. I take offense to that.

Jon: [00:31:07] Yeah, no, it’s it’s it’s yeah. You know, it’s interesting. You were mentioning before Black developers and not, and being invisible or being, you know, not being noticed and also not being respected. And, and, you know, also there’s society, I’ve heard definitely many times where like, there’ll be a man and a woman at a conference.

I hear this all the time at work and people will always talk to the man. And he’ll say, why don’t you talk to my lead and the introduce the woman. And they’ll still want to talk to the man, you know, they assume that leadership role. And yeah. When you were talking about, you know, the black developers and I, I had the opportunity to kind of help behind the scenes at JuneteenthConf this past summer.

Yeah, it was, it was amazing, you know, it was something that timing, they put this conference together. Right, right. Before Juneteenth, they really pulled it together. One of the sessions I helped. You know, like behind the scenes was was by the two guys that created Blackfacts and it’s so Ken Granderson and Dale Dowdy, and they, I had no idea about this because it wasn’t created for me, it was created for, for, for the black community.

And it really kind of celebrates like you know, the, the black software developer, like, you know, Hey, we’re here. And we basically, I guess some of this goes back to thinking of what Sara Chipps did with creating a community that’s welcoming and inclusive for young girls. This is a community that’s welcoming, supportive, and celebrating black culture for black technology community.

And I think, you know, like, I, I don’t know. I, I think that it, it was exciting for me to even hear that this thing existed and I did you come across like support mechanisms like that, or other kinds of like, you know, internal support cultures that women or underrepresented minorities are like creating to survive, you know,

Shawn: [00:33:11] Yeah. There’s quite a lot, you know, if you can think of organizations like black women code, black girls code there’s a the black coders internationally think, I mean, there’s a bunch of great organizations. Some of it, some of it I think is important to think about as it’s not just culturally sort of surrounded by race, but it’s also a different in, in I think I mentioned this earlier in how much in affluence we have this sort of affluence bias in software and not affluence bias. Like people are only picking other people that have money. It’s that.

There’s an, there is an on-ramp that has some cost to it and our public schools aren’t evenly funded and things like that. And more importantly, we talked to code.org about this thing they’re doing to try to educate or convert teachers in high school to be able to teach the AP computer science curriculum that they’ve developed.

So it’s not even, we’re not even at the point of like, how do we teach and get kids interested because we don’t have the teachers to even produce that interest. And that’s frustrating when you, when you think about it, because one of the, you know, I grew up in abject poverty.

I was born in Manhattan, but I grew up in the Bronx. I’m sorry. In Brooklyn, in the projects in Brooklyn. There’s, there’s the word. I was looking for the projects in Brooklyn. And so we were on welfare when I was born and my mother did some pretty heroic things that get us out of poverty, but we were never, we were never had that much money.

And this career has been life-changing and one of the things they talk about is for non-affluent neighborhoods , this is a generationally changing profession. Like this will, this can bring up the entire families out of poverty. And it’s just knowledge. It’s not about skill. It’s not about having things. It’s just knowledge, especially now with the internet and ubiquity of, of, of lower-cost computers. This, this can change everything. When we talked to the chancellor of UC Davis, he was talking about, we have about. Well, this was before COVID, but we had have about 3 million people unemployed, many in the underserved communities. And we have about 3 million unfilled jobs and computer in, in, in tech. And if we could marry them…

Jon: [00:35:36] Yeah.

Shawn: [00:35:37] Like it it’s baffling. How, you know how obvious it seems. You know, and, and computer software, isn’t the only place where this has happened or the only place where there’s bias like this.

This is just the one I know, right. Because it was, it was my experience going to conferences or going to user groups and seeing women at those events and going, Oh, look, there’s recruiters here. Right. It was me having to face and accept that I was part of the problem. Even as enlightened as I thought or expected myself to be looking back, I was like, Oh, I, I have to take some time to look in the mirror and just, and just face up to it. And that, you know, I think that’s a big reason why the, the pivot happened was I wanted to get other people to look at themselves and maybe they don’t ha they didn’t do any of these things, but. If we can have a chance of sort of having that reckoning of like, you know what, I’m not going to go by a resume just because I see a name that’s clearly not a white guy’s name.

Right. I see that. I see that happen, you know, more often than I than I’d like to admit, you know

Jon: [00:36:56] I’ve read some stories on this that are just like, not surprising, better. Like there’ve been studies where the same resume was submitted with a white man sounding name and then a ethnic minority name and the callback evaluation rate,  it was a significantly higher percentage, the exact same resume.

And then another fascinating thing I saw was there was a there was a man and he had  a woman assistant. And she would always have problems with, you know, getting replies on emails and getting meetings scheduled and things like that. And he, he just assumed, you know, like, okay, well she’s learning or whatever.

And then something happened where she was on a vacation and he answered her emails and was shocked at the rudeness and the disrespect that just because he was sending emails from. And so he then he you know, they did a test going longer where, you know, they switched emails and, and, you know, and then the one other thing I’ve heard is there have been several women I’ve read that have created a fake coworker that’s a man. And they’ll have the co-worker reply to emails and, and get stuff done. And it’s just like, yeah.

Shawn: [00:38:12] I, you know, I hope at some point that’s not necessary, you know, that’s that, that for me is ultimately the goal. One of the other things that I wanted to mention before, I know we’re running a little late was w. There was a bunch of history that I didn’t know about. And I talked a little bit about the women being the first developers. But the other thing I didn’t realize was how pivotal African-Americans were in the early software movement. Like the, the first 3d engine that was ever developed was developed by the first masters of computer science graduated out of Stanford. Right. We don’t think of the fact that we have CGI in every movie as being really responsible to this person of color, the guy that invented the game cartridge for the original before the Atari, I can’t remember the name of the machine, but that said we should, what games and cartridges that was a man of color as well. the, the third partner in the creation of Hewlett Packard. Was a, a man of color though. He wasn’t Hewlett or Packard. Right. He didn’t get his name in the, in the masthead, but he was the one who found all the money to start the company. Yeah. Yeah. And, and there are dozens and dozens of those stories. And Latinx is we’re in a very similar case with Latinx people as well. Cause it’s when I say people of color, I don’t just mean. American black men and women. I’m also talking about Latinx, you know, I think a lot of times we feel like we have a diverse culture because we have East Asians in development roles. Like we’re fine. We shouldn’t worry about diversity because we have non white people in it.

Well, you ha that’s not the same, you know, there’s one of the reasons I, I think about the number of American woman I’ve worked with because I’ve worked with a lot of Chinese and Indian and Japanese women before, but this realization really started with the idea that I had never worked with an American woman as a developer, never in 30 years. And that’s astounding to me that. That it didn’t even occur to me. Like it wasn’t, like, I knew that like where all the, I just didn’t, it didn’t occur to me that, that, that was the case. And you know, you want to know where they were, where they all went. Because England has a very similar history.

You know, they’re, they’re, they’re very different, but very tied together and sort of the same things happened in the same era as the seventies, as world, when all the women went away and got taken over by man and all of that,

Kevin: [00:40:53] One question that I’m, I’m not sure I’m going to express this question well, so forgive me, but you know, one thing that I, as a privileged white dude. You know, sort of worry about is that, you know, me speaking about racism or sexism, like comes from you know, I don’t have the experience. So me talking about it is a little dicey. Like, did you, did you sort of have any concern about that then? Like you’re making this movie, you know, centering these people, which is great. I’m not a criticism, but. Like, you know, that, you know, you’re, you’re, you’re you as a white guy, you know, presenting these people, like has a, I don’t know, it seems like it could have some inherent sort of risk to it.

You know what I’m saying?

Shawn: [00:41:46] Huge. Yeah. That’s a great question. And it’s absolutely true. You know, I’ve had the conversation with my wife more than once is like, this movie might end my career. Like I might mishandle it because part of it is I want to present it. I want to be honest about my experience. You know, so admitting when I’ve been wrong without necessarily going everyone’s awful. Like I, I never wanted to be, and I hopefully, hopefully it isn’t sort of this gotcha journalism, like look at this company or that company. That’s not what it was about. It’s, it’s about trying to get people to look at themselves. But also at the same point at the same place, I never want to have that feeling of white savior.

Like I’ll fix it, you know? What you really need here to fix racism as a white guy. And it it’s a thin edge to to navigate. I think sometimes when I I had talked about to the .NET Rocks guys about two years ago about doing a talk about it. And there was like, it doesn’t feel like we’re the right people to talk about it, but it feels like, because there’s so many.

There’s so many people that look like me in the industry, that if I can get some small percentage of them to start realizing their implicit bias, that we can improve this and that. I can’t pretend to understand or explain the experience of being a woman or a person of color in this industry and what that means and how difficult or, or any of that.

I can’t pretend to have that experience. I can admit and be honest with the experience I’ve had as, as maybe turning away some people that I shouldn’t have when I was sort of in the hiring space or that treating women differently at conferences or, you know, assuming someone had less experience because they were a woman or a person of color or, or didn’t, or didn’t use English as their first language.

Like all of those things I’ve been guilty of. And I think these microaggressions are something that I want to solve. I want to fix for myself. And if I can get a couple of people that watch the movie too, Think about the way the interact with other people a little differently than I’ve succeeded. I’m not going to fix this, this isn’t going to go away tomorrow.

But I think that our industry can be better served. By having more people that are diverse and having the people that are in it, not feel threatened by the fact that, Oh my God, I’m going to lose my job because now they have to have a quota of 20% women on every thing. Well, if you were going to lose your job, just because they were being more inclusive, you’re not very good at your job.

Like the people that are worried about competition. I’m not sure they should be in the business. Like that’s kinda how I feel is like, if you’re concerned that, you know, adding more people or having younger developers come in or having whatever it is, you know, the chips fall where they may is kind of how I feel.

Jon: [00:45:02] if the only reason you have the job, your job is because of implicit bias and you know, like your privilege then. Yeah, exactly.

Kevin: [00:45:12] And that’s especially absurd in this particular industry, which

Jon: [00:45:15] Where there’s so many unfilled jobs too,

Shawn: [00:45:20] Yeah. If you can’t find a job, you know, I worked for a company years ago and I won’t mention them, but there was a guy that worked with me. And this was around 2002 and he had stayed with that company for 15 years, which meant he went through the dotcom bubble without taking a, another high paying job.

And I knew at that point, if you didn’t get hired during the.com bubble, they were literally taking anyone who had edited their MySpace page in HTML and hiring them.

Jon: [00:45:54] Yeah.

Shawn: [00:45:55] That something was wrong. Yeah. So Yeah, I don’t, I don’t have any, I don’t have any patience for people who want to hold onto their jobs or, you know, programmers that put in obfuscate their coach, or they’re the only ones that can understand it or any of the sort of bullshit.

I think many of us have seen over the years with people that were insecure.

Jon: [00:46:16] Did you as part of this, like a lot of this is just letting people tell their story and like choosing the people. Did you. Like have advisors or like, you know, I don’t know, read books or like, you know, do things to kind of educate yourself on, you know, like on any, because there’s there’s background and historical things and there’s whole study of, you know, racial injustice and all these sorts of things.

Shawn: [00:46:44] Yeah, the first year was almost all research. Before I even interviewed anybody because I really wanted to understand the problem. And I did some surveys to try to get people to, you know, anonymously tell me sort of what their experience was and had, you know, one of the questions I had on these early ones that really bothered me, that I got such high response.

I think I got 40% response of people saying that they had witnessed sexual harassment in the workforce. And didn’t do anything about it. Right that they weren’t, that they didn’t maybe do it themselves, but they saw other people do it and they weren’t and they couldn’t go that’s bullshit. you know what I mean?

Because they wanted to fit in and whatever the, you know, they’re, that’s a difficult thing to do, but I think it’s one of those things. So I read tons of studies and a number of books. There’s a great book about the history of software development in. The United States and another one in for the same story about England.

And I think, I, I’m sure I’m going to get this wrong, but I’m pretty sure it’s called computer in the boy’s room. I’ll get a link to the correct one, but it’s a really eyeopening talk about the beginning of computers. In the thirties and forties and all the way up to sort of the present day and, and, and what, what the reasons were and how the reasons were.

One of the things that surprised me is like Cosmo magazine had an article in it about how programming was a great job for women because It had high pay and women were really good at it and all this other things. And then literally 10 years later, and we were down to 10% women. it just, it changed so quickly.

When we talked to some people at Georgia tech, one of the things they said was it’s a very Western problem. If you go to Indonesia software programming is considered women’s work. And why is it considered women’s work? It’s inside you sit down. It’s not dangerous. Right? Men’s work is outside dangerous.

Physical work. And so there’s just an assumption in other cultures that this would be normally a woman’s job. And in fact, the first eight programmers that were women, it was from merely thought of as women’s work, because it was seen as not as important as designing the hardware. That it was just rudimentary and such.

And, and I think that because early programming looked like switchboards, it was mostly patch cables that, that lended itself, Oh, you’re just a secretary. You can do programming. Which of course makes the whole irony of 40 years later writing that w all the secretaries should be able to write software one day article I think by Mary Jo Foley I thought it was kind of a funny book end to that because lowering the bar to computer programming.

So even a secretary could do it, which is, you know, has its own biases in it. but it it’s fascinating how this stuff has changed and how we, you know, traded in. In how to figure out how to, what, what is a good program or look like. And I think we’re still battling with that. Like we can teach skills, but how do you find those people that are good at those material tasks that isn’t about writing code?

I mean, in a lot of ways, this is the same barrier that we have in hiring. How do you find people that will be good at programming and having them, you know, Reordering linked list on a whiteboard, isn’t it. Right. I think we all know that asking them how to you know, how would you count the number of, of, of manhole covers in the world?

Like that doesn’t really work either. Right?

Jon: [00:50:30] Yeah.

Shawn: [00:50:31] And part of this is us still trying to figure that out.

Jon: [00:50:36] They’re questions that we ask, because they’re easy to ask. Like, I experienced this with tests that my kids take or assignments my kids take. It’s like, Oh, the teacher is asking this question or having you do this project because it’s easy to grade and we do the same sort of thing. Right. You know, like it’s, it’s easy for us to grade a reorder a link list, but it has no value like.

You never write that code yourself, you know?

Shawn: [00:51:03] No. And even if you did. You know, you would be able to look up the 34 examples to pick one. That was a good model of it. Like it just, it doesn’t represent what we do.

Jon: [00:51:15] Yeah. You know, part of what you were talking about and, you know, trying to like, as, as we think of kind of like, as, as we wrap this up, I’m thinking about like, what are the solutions and things we can take forward? One thing that I’ve experienced is the whole value of positive role models and , you know, there’s, definitely  giving people a platform when possible.

And, and, but I think also there’s an important thing of just allyship and I, until you, like, until I’ve done more of this, I had not at all realized some of the things you mentioned before about how the, the difficulty that people experience. Basically every woman that I have worked with that speaks at conferences that you know, is, does, you know, video programs and all that.

They all experience. Harassment that is stunning. Like it’s just terrible and you just wouldn’t, you don’t know it until you work directly with them. They’re not going around talking about it. Most of them, but every single one, like there’s not a single, you know, anytime, anytime it comes up, they all.

And so it’s frustrating, but then, like the only thing I can think of on there is just allyship and supporting them and. Helping, you know, swat the crazies away is, is there, is there a more, you know, what are like, and we’ve covered a little of this, but what are some positive things that people, you know, you start with education and empathy, and then what else can we do going

Shawn: [00:52:48] think w for me, and again, this is a pretty personal movie because I can only know what I can and what I’m willing and able to do. And for me, the biggest thing I can do around sexual harassment is to be not just an advocate like, Oh, that sucks. That that happened to you. But like when you see it go, that’s fucked up, Bob, right?

Because that’s, that’s what it takes. We can’t be afraid of upsetting upsetting people we work with because it is, you know, we’re actually in a career where we could change if we need to. Right. If we get fired because Bob’s pissed off at us and happens to be our boss, I’m kind of okay with that because ultimately letting other humans be belittled is isn’t anything I want on my conscience.

Jon: [00:53:35] Hmm. Yeah. Yeah. I feel like you know, it’s, it’s hard to understand. Cause there are people be people that you would think, you know, are generally like you respect professionally and then you see them pushing back. And I think some of it is that they interpret, you know, any kind of social justice, warrior stance as attacking them.

And, you know what I mean? I’m putting a bunch of guilt on them and I, I feel like some of that is not it’s, it’s, it’s coming from a different place, but it’s hard to describe, you know what I mean? How do, how do you talk to somebody that’s like, Oh, you’re just being a social justice warrior and virtue signaling and that sort of thing, you know?

Shawn: [00:54:22] it’s a hard conversation. I’ve had it a few times, honestly. And. The way I approach it is, you know, there’s there’s benefits here beyond the beyond maybe what my notion of right or wrong is. I want these people in these jobs because it lifts, you know lifts everybody up. It helps me learn every day.

Cause that’s my job as a software developer is to learn every day. Like there’s something new to learn. And if that learning is how someone else experiences the world or how someone’s culture could impact the way we write software or whatever that is, I have to take that into account. And so it just feels like a cop-out.

Frankly, when I hear that, like, Oh, you’re just trying to save the world. Well, okay. I’ll take that on. You know what I mean? Like I want to leave the world a better place than, than I found it. And, you know it’s just one of those things that, that I’m willing to take on because it’s not, again, it’s not just about trying to be social justice warrior, you know, though, honestly, I’ve been called that more than once, but it’s also feels like, something that will better our community. And I want that I really, really want that, you know, when I go to a conference in the after hours hanging out in the bar and it’s 10 white guys talking about  how to optimize memory. I’m going to my room cause I’m bored. Right? But having people from a whole slew of different backgrounds and experiences that interests me way more than any other conversation we’re having. You know, and everyone has those, but because we have this common language, we fall into it. And I that’s why this, a lot of this feels implicit. Sure, there is explicit sexism and racism in every industry and should be fought against and  we should fight it. But I think the bigger problem for our industry right now is  not realizing that there’s a problem. Like thinking everything’s fine. Our companies making money. I’m happy. My wife’s family, I just bought a boat. Like, yeah, but it could be a lot better. Like it, you could be really happy in your job. Not just happy because you bought a boat.

Jon: [00:56:50] As you’re saying that I’m realizing a take on this too, is it’s not about. It’s instead of making it all about me. Oh, when I hear you, you’re when I see this film or when people are talking about this, you’re attacking me, take yourself out of it for a second. This is about somebody else and you should care about them.

Just listen to their story. Understand what they’re going through. Take yourself out of the equation for a little bit. You know what I mean? And then what do you, where do you go from there? You know, it’s like, Oh, this sucks. You know, these people, this person is, is intelligent. Could totally do this job. Could, you know, like it would benefit their entire family. They would benefit my team. Why not? You know, like, why not help them? Why not give them this opportunity?

Shawn: [00:57:38] Yeah. I’m I’m, I’m totally on board with that. Cause it I’m gonna use a really bad analogy and feel free to cut it. But sometimes in the software industry, it feels like racism in the North of our country. So I live in Atlanta, part of the South. We turned to blue by 1200 votes and I’ll take

Jon: [00:57:58] one.

Shawn: [00:57:59] worth of credit.

Yeah, me and my wife. thank you. But I prefer racism in the South. And that’s kind of a weird, stupid thing to say. But when I lived in Boston and when I’ve, I’ve lived in the North, before it took me six months to find out somewhere there was a racist, whereas down here they’ve got the flag and they’ve got the bumper sticker and, you know, I can just avoid them. not that I finally get invited to your home and you tell a joke that. Clearly is not a joke. And I certainly don’t think it’s funny to find out that I have to get you out of my life now. Right. And so I think that happened some in software that we want to put up this front of being we want everyone in, but then when it comes down to it, sometimes we, we have those biases that we don’t want to face.

We don’t, we each have sure that shadow in our personality that. Is sometimes hard to, to look at. And I think it’s better for everyone eventually, if we sort of confront that, it’s just like just like the arrogance in our industry almost entirely. I think arrogance within some developers in our industry is masking them being afraid to be found out and imposter syndrome. Like it, it’s a common way to cover that once we acknowledge that and go it’s okay, you don’t have to know everything. Relax. And I think that same thing can happen with this of like, yeah, your first instinct wasn’t to hire this person because they didn’t have the first name you expected, but look at their resume, you know? Thankfully in this country is different than Europe, Europe, almost all CVS or resumes have their picture on it. And I’m just, just it’s. So it’s so uncomfortable when I see a European CV. I’m like, is this cool? You sure?

Jon: [00:59:50] yeah, yeah. Hmm. Okay. So as we wrap up, we have focused on obviously the most important part, which is the subject matter of the film, but I want to just briefly talk about like, okay, so the film itself, so it’s, it’s available on streaming platforms and, and like it’s being released December 15th, does that right?

Shawn: [01:00:12] It is, we just started pre-orders on iTunes in North America. You can go to will a hello world, film.com and see that link. And then on the 15th, that’ll be releasing on 18 other platforms. I think it’s 18. It might be 15. So you you’ll be able to get it in pay-per-view or purchase it on Amazon iTunes, Vudu Xbox, Google Play Store, et cetera. And a bunch of cable providers. And then we’ll probably expand that internationally within the next three months, we’re working with a partner right now that is going to get it on some stores in Europe and in Australia in some parts of South America working on translating those things right now.

Yeah. And so it’ll be expanding out to different markets as we go, but we’re starting with North America because that’s what my distributor told me to do.

Jon: [01:01:03] Okay. Well, one one final thing just as we’re talking about, that is the whole kind of getting in streaming platforms, especially during this time of COVID. When the industry has gone through some big change, the whole film industry has had to go through big change. What was that all like?

Shawn: [01:01:20] Crazy. You know, I sometimes I’m like, you know, I can see what’s wrong with our industry, but trying to get into film. It’s, it’s weird. It’s been a very big learning process, but luckily I got picked up by gravitas ventures who does a lot of documentary distribution. And so they sort of handheld me through a lot of the process.

And that was. I finished the film December 31st, last year. And so the process of finding a distributor and getting it out there. Is is way longer process. Like every time I thought, Oh, wow, we’re finished filming. We’re almost done with the film. And then it took another year to cut the film. And that was like, Oh, finally, the film is done.

And they were like, it’s not now you have to figure out how to get it out to people. So it’s all been incredible learning. I’m actually about to start a YouTube series on my. YouTube channel about how I made the film and just sort of share a bunch of this information I’ve had because you know, none of it’s proprietary to me.

But I feel like there’s a lot that, that I’ve learned and right now is sort of a magic place in documentary it’s, it’s, it’s very available to a ton of people. You can shoot a documentary on a iPhone and that’s good enough to get it out there because it’s much more about content than. Then sort of the technical ness of it.

So I’m, I’m hoping to share everything from the pre-production all the way through the distribution, everything I’ve learned in budgeting and hiring people and finding building a team instead of trying to do it all yourself. And you know, this all started because I got bored and I wanted to learn something new and I accidentally made a film.

Jon: [01:03:10] That’s a problem computer people seem to have all the time. It was like, Oh, let me check this out. And yeah.

Shawn: [01:03:15] And then suddenly you have a startup

Jon: [01:03:20] Wow, this is fascinating. Well, I’m the area that I was sad I didn’t have time to ask about was all this, how do you make a film and all that? So I’m glad you’re creating that YouTube series. That’ll, that’ll be interesting to follow and there’s a lot more than fits into just one podcast anyways, there. I’m sure.

Shawn: [01:03:37] Yeah, that’d be great. I if you go to wildermuth.com, that’s where I’ll be announcing the web series. Once I get a couple episodes in the can in case people want to know,

Jon: [01:03:45] Okay. Great. So HelloWorldFilm.com. People can go and pre-order now, and then it’s available on tons of streaming platforms and cable on demand. Congratulations for that. So that, that is really, really cool. I am. And the trailer is amazing. I can’t wait to see the actual film. So, and then I guess one last question is audience. I mean, we’re, we’re software developers, but it seems like this is something that has broader application. Who, who is this film for?

Shawn: [01:04:15] It is for a general audience. It’s it’s justice. It’s just as much for people that don’t know anything about software as it is for people in the industry. I think people in industry will be interested in sort of seeing their part of it. But a lot of the film is encouraging people who aren’t in it to give it a shot.

And the goal of the movie was that you could take a software developer and their mother, and they both get something out of the film and the trouble with that was during the interviews, getting us technical people, not to throw around acronyms. So that was one of the more difficult pieces.

Jon: [01:04:50] Nice. Nice. Great. Well, this is amazing. I can talk about this all day. But I can’t wait to see the film and congratulations again for that.

Shawn: [01:04:58] Thank you so much, Jon.

Jon: [01:05:00] Awesome. All right, go ahead. And Kevin, you can say, yeah well,

Kevin: [01:05:12] Very much so.

Shawn: [01:05:15] I appreciate that.

Jon: [01:05:17] All right. Well, that’s all the time we have today on Herding Code. Join us next time. I wonder if it will be before 2021. Find out on the next episode of Herding Code.

Herding Code 242: The COVID Cabin Fever

Does time still exist? Maybe! Kevin, Rob, and Jon chat about some of the top concerns of our current time:

  • Sourdough bread
  • WordPress and PHP
  • No Code development
  • Knock knock jokes

Download / Listen: Herding Code 242: The COVID Cabin Fever

Links:

  • https://github.com/nushell/nushell
  • https://jeffsternberg.com/2020/03/11/beyond-spreadsheets/

Transcript:

Jon: [00:00:07] And hello, welcome to Herding Code. It is July 31, 2020 on the one hand. Holy cow. The year is like getting closer to done on the other hand. Will this year ever end?

Rob: [00:00:20] Yeah, can the year just be over? Can we just be done?

Jon: [00:00:25] Wow. Yes, it is.

Rob: [00:00:29] I think I mentioned before the podcast that wasn’t going to be salty. I think I lied.

Jon: [00:00:33] Yeah.

Kevin: [00:00:34] This is the bad place. The year will never end.

Jon: [00:00:37] You know, on the one hand. So it was looking at it with since April, we talked last and we did the, Freaky Friday episode where we talked about the trading trading placces, Mac and Windows and all that. And then I was like, man, on the one hand has much changed. I mean, cause cause it’s like nerds in captivity.

What do we do?

Kevin: [00:00:57] It’s not actually that different from nerds, not in captivity, sadly.

Jon: [00:01:00] That’s true. That’s true. All right. Has anyone else, w we just, we have to cross this off the list who here has made a loaf of sourdough bread. Okay. I’ve made enough for everybody. I’ve made all the sourdough bread.

Rob: [00:01:12] We just…

Kevin: [00:01:13] ship it out, man. Send us some!

Rob: [00:01:15] Yeah, I know. Wait, where’s my, where’s my bread, man.

Jon: [00:01:18] Okay. So it was like after a while, I have three daughters and they’re getting bored too. And so the middle one kind of gets into baking. So I was like, all right, let’s try it out. You know? And then it’s totally the nerd rabbit hole. Once you start it, then you’re like, Oh, I really need a Dutch oven now. And now, now I need this, but it’s pretty fun.

I halfway through, I really there’s this website Breadtopia, and there’s this no knead bread recipe. And it’s actually like, most of the work like you do, maybe about a half hour of work, but it’s spread over two days. So you could like go mix ingredients, you walk away for hours and then you come back and you’d like, flip it around and then you come back and then you put it in the oven and you walk away.

So it’s a lot of walkaway comeback stuff. But the one thing I realized after a while is that. It was not very sour. And then I started reading and there was all these hacks you could do, but then people are like, you know, sourdough, you buy from the store has some sort of acid in it, citric acid or lactic acid, some sort of acid.

So I just started putting white wine vinegar in, and then I had to like, it messed with the chemistry and I had to change around the ingredients and stuff, but that totally worked. Then everyone’s like, this is the best ever. So don’t tell my family, I’m putting. White wine vinegar in the sourdough and we’re all good.

Rob: [00:02:35] Yeah. You know, it reminds me of making, cause you know bread and beer are very similar and yeah. And so I used to be a huge, I haven’t brewed beer in a very long time, but I remember going to the store and they’re like, well, you know, if you, if you can’t get that bitterness, you’re looking for here’s some extract, you know, or if you can’t get the aroma here, just drop a few drops of this.

It’s you know, I like, wait, that’s, that’s cheating.

Jon: [00:03:00] It’s totally cheating. And yet,

Rob: [00:03:04] Yeah. And yet, right. If the beer tastes good and people drink it and they like it. So who cares? I don’t

Jon: [00:03:09] that reminds me in a Malcolm Gladwell book. I forget what it was, but it was. One of these things where they’re like, they did these taste tests and they had some kind of beer taste test and they put in, basalmic vinegar into some of them. And people like picked the basalmic vinegar is like much better beer and it like just had a few vinegar in it.

So I don’t even know. Yeah.

Kevin: [00:03:33] the most like San Francisco story, I heard. Through this COVID period is some, some dude was like going all over San Francisco, leaving sourdough starter packets, like randomly scattered around the city.

Jon: [00:03:48] It’s pretty amazing stuff. It’s like, I’ve, I’ve seen videos. People take like completely like abandoned cultures that have been in the back of their refrigerator for months, you know, and they’ll awaken it. And it’s like, I don’t even know. Yeah.

Kevin: [00:04:04] Our version of it is we got an ice cream maker, which is even less healthy than making your own so we’ve been kind of experimenting a little bit, although we haven’t gotten too crazy yet. So.

Jon: [00:04:15] So I ran into Nik Molnar in the, before times in Montreal, I was at Node. What was it? Node JS Interactive up there. And, and I forgot that he is like, Crazy like trained chef, like really good. And so I was like, Oh yeah, I’m cooking some stuff for Christmas. He’s like, you know, I told him and it was something like just simple thing, you know?

And he was like visibly disappointed. Okay. And I’m like, what are you doing? He’s like, yeah, I’m just making ice cream. But he had like three different ice creams in each one had like a savory and a sweet component. And I mean, he had like, obviously planned out this very in depth stuff. And I was like, well, I’m sorry. But ice cream ice cream is

Rob: [00:05:00] I, I had a really fun experience. I mean, I know this podcast is supposed to be back technical stuff and we’re supposed to get into it, but you know what? This is, this is the human aspect of it. But you know, what, if someone can gain some value from this hooray, So my buddy, my buddy and I we’re going, gonna make some burgers one night.

And I said, well, you know, I’ve always wanted to make a burger on a skillet and he’s got a really good set of skillets, you know, like, Black, you know, just super cured over the last million years. And I’m like, I’m going to make a burger on that. And so I go online and I’m like, I’m going to look at the perfect burger tutorial.

Like, how do you make it? And of course, I find my favorite chef Gordon Ramsey, and he’s got this YouTube video called the perfect burger tutorial. And so I watched it and amazingly for the burger fans out there, he did not make it in a skillet. He made it on a barbecue. And anyway, the reason I’m saying all this is I, I kind of watched this whole thing, what he was doing and the ingredients to use.

And so I’m like, alright, I’m going to take myself to the store and I’m going to buy this beef. I’m going to put an egg in it. Cause he recommends putting an egg in like a, what is it? Two pounds of beef. And then I’m going to like get this cheese and do all the things he did, salt and pepper. That’s all he uses for, for seasoning.

And they did exactly what he recommends doing. And I, I’m not kidding. My friend made this buddy of this guy was making a burger with, he is a huge meat fan. He’s got like a $2,500 smoker. He spends, I mean, hours and hours, ma like making meat every single week seriously. And so I was like, listen, I’m going to make, I’m going to try and make this burger.

I’m just going to go get some stuff from our local market. And don’t beat me up. I’m going to do my best. And he’s like, all right, you know, whatever, you know, little lamb go have a good time. So I did. And he swears to me and it’s the best burger he’s ever had in his life. And I was just like, I was, the funny part is I’m not, I don’t, I’m not big burger person.

You know what I mean? I somehow just stumbled into this. Anyway, I left you a link here in chat. So if you want to put it on the post. It’s it’s literally took me, I want to say 30 minutes from start to finish. And my kid has said this to me, best burger I’ve ever had in my life. My buddy said this to me.

I’m like really? Cause that’s a pretty big thing for someone to say that. So anyway, I thought, since we’re talking about food, I made a damn good hamburger, you know, and I’m proud of myself.

Jon: [00:07:29] Well done. It is funny how much, like a lot of these things come down to really simple. Like the bread that I made is like, Three ingredients, you know, and then last week we made mozzarella and it’s four ingredients. And a lot of it is like doing the process and, and YouTube, it’s hard to beat YouTube, you know, like I’ve used.

Rob: [00:07:51] I was going to say, right when it’s Gordon Ramsay, I mean, he kind of just stares at you through the thing and he’s like, if you make a burger any other way, I will come find you and kill you.

Jon: [00:08:02] True. True. Yeah. I mean, I’ve used, I mean, it’s, it’s, you know, cliche at this point, but I used YouTube recently to repair, you know, leaking gaskets and in my espresso machines, you use it for fixing dishwashers and everything. So why not cooking too, but it really does make a difference as long as it’s not the long boring, you know,

Rob: [00:08:24] Yup.

Jon: [00:08:25] People want to talk a little too much? Just get to the point.

Rob: [00:08:29] Speaking of this is supposed to be a tech podcast, right? I mean,

Jon: [00:08:35] Oh, I guess so

Rob: [00:08:36] I know.

Jon: [00:08:37] what’s happened. Well, okay. Kevin did point out there’s been, there was a Mac, there was an Apple event, an Apple developer event. What do we call them now? WWDC is. There was a thing.

Rob: [00:08:56] Oh, Jon.

Kevin: [00:08:57] This is the guy who’s on the Visual Studio for Mac team, right.

Rob: [00:09:00] Yeah.

Jon: [00:09:01] Yeah. Well, I watched it,

Rob: [00:09:04] There was a Mac thing.

Jon: [00:09:06] I watched it, I didn’t get the tattoo… So now we got to do stuff for ARM. We got to do some ARM stuff, so that’s

Rob: [00:09:16] like arm templates, like Azure templates as your resource minute.

Jon: [00:09:21] ARM chips. Yeah. a thing now.

Kevin: [00:09:25] Silicon, Jon,

Jon: [00:09:26] Oh, that’s right. That’s

Rob: [00:09:27] Yeah, no, I was just

Kevin: [00:09:30] excited for this?

Jon: [00:09:32] Yeah. I who me?

Rob: [00:09:34] no,

Jon: [00:09:35] Everyone’s excited. I guess it’s better battery life, right? That’s a good thing.

Kevin: [00:09:41] Yeah, we don’t know that. That’s the big question. We don’t know what it means aside from the fact that it’s going to be screaming fast.

Jon: [00:09:48] True. So, so there there’s been a windows windows on arm thing for a while, but you know, I kind of generally follow along, but I don’t know how much stuff works on it. And people are like, you know, getting things, working on it, with, with the Mac, the Apple Silicon, they have Rosetta, which kind of does some cross compiling thing, which seems pretty smart.

so that I do know from the. Vs Mac team. That’s the at least original plan is like, make sure everything works with that. Right. So you have to get the dev kit, which is basically a Mac mini and, you know, with the new Silicon and you test on that. But, yeah,

Rob: [00:10:28] you

Kevin: [00:10:28] I wouldn’t, I would ask you if you guys are using those, but I don’t think you’re allowed to say so.

Jon: [00:10:33] using the Mac minis or the D

Kevin: [00:10:35] the dev kits, the

Jon: [00:10:37] So I’m personally, I’m not on the, I’m not an engineer, so I’m, I’m not, I don’t have one. Maybe I could talk someone into getting me one at one point at some point, but they’re like, I think they’re about a thousand bucks.

Kevin: [00:10:50] No, the 500 bucks,

Jon: [00:10:52] Alright. Yeah. I’ll

Kevin: [00:10:53] you don’t get to keep it. You gotta send it back.

Jon: [00:10:55] Oh, that sucks.

Yeah. Yeah.

Rob: [00:10:58] know, I was just telling, for those out there listening, I was just telling Kevin and Jon that right now, my computer hasn’t slept. actually like, you know, when he closed the lid, like your computer goes to sleep. I use a Mac book pro 16 inch. My computer hasn’t slept in two weeks, because where every time we would try and wait for him sleep, it would kernel panic and it’s akin to the blue screen of death in windows.

And I kind of got tired of, I need to force reboot my machine every time I opened the damn lid. So right. Come to find out this is a deal. It’s a software glitch as opposed to a hardware one, which is good. And so there’s good news and bad news here. You know, the good news is Apple engineering is pretty good about dealing with things.

The bad news is sometimes it takes a while for the update to roll out. And so, as I was preparing to go ahead

Jon: [00:11:45] Is it a, is it which year Macbook is it?

Rob: [00:11:49] last year it was brand new.

Jon: [00:11:51] Cause I got a 16, 2019 and I’m running Catalina,

Rob: [00:11:56] Yeah. I don’t know. I don’t know. I don’t know what the deal is. It apparently, apparently just kind of affects certain machines somewhere. But anyway, I just checked, as I was sitting here preparing, like to tell you all this story, I would look at the software update in the Control Yeah. You know, going through this like, Oh, this update, you know, includes bug fixes, whatever.

So this is the 10.15.6 Update. And one of their bullet points is. That it fixes an issue where the computer name may change after installing a software update. I’m like, okay, I’m sorry, what year is this? What do we do at what? How is this possibly a bug? How are you going to change the name of my machine?

No. Can you fix, can you just fix the thing where my machine will fricking blue screen? Oh my God. Anyway, computers, I don’t know. I don’t know what’s going on. Kevin help. What’s happening.

Kevin: [00:12:50] I don’t know, I’d be pretty pissed to that one. Is it, is it like you, because you’re plugged into an external monitor or you’re like have some weird peripherals or.

Rob: [00:13:00] I have a feeling it’s probably like a configuration that got going, which is yes, I have two external monitors and it’s probably trying to reconcile something. And I was reading something on the forums where they’re like, Oh, it’s a threading issue. And there’s a race condition deep inside the GPU, blah, blah, blah, blah.

You know, it makes sense, I guess. Right. Cause. Computers are hard and then concurrency is triple hard. And so, right. So you

Jon: [00:13:22] Yeah, but concurrency shouldn’t rename your computer.

Rob: [00:13:27] is what I know. Like

Jon: [00:13:31] If something’s renaming your computer, I guarantee it we’re being renamed to the developer who worked on the bug fix.

Rob: [00:13:40] Yeah, not to beat up on Apple team. I mean, they deserve to be beat up on it. I don’t want to stand here and defend, but at the same time, Two weeks ago, I got this notice on my Windows machine. It says this build of windows is going to expire on July 31st. And I’m like, what can my operating system literally expire like near to this?

Jon: [00:14:01] It goes bad, like, like cheese or eggs.

Rob: [00:14:03] yeah. Like, like, like what does that mean? Expire and it’s. So I had to ping some people internally, right. And like, Hey, so if I get this message. It’s like, well, click on more info. What does it tell you? And so I click on more info and it leads me to a 404 page, like, Oh, okay.

Jon: [00:14:23] So my solution to this is always run the latest of everything,

Rob: [00:14:27] Oh, I tried it. So the funny thing is, and this is the best part of the whole story. So internally we have, you know, we have tech support and I.T. And whatever. So I like pinging these people and it’s amazing the level of support we have internal, which is lovely. And so I pinged a person over teams and I said, here’s the problem?

And they said, do you mind if I come in and take a look at your machine? And I said, of course, you know, so he, we start sharing screens, right? He comes in and starts going to the control panel and like, Oh no, you’re not. He goes to control panel and then, you know, windows update and like, don’t please don’t do that.

Cause I had just checked windows update. Right. I literally just checked the updater and there was nothing there. He goes in there and he checks the update and sure enough, there’s an update. And he said, what do you think if we apply this update and restart your machine. And then of course that that’s solved the entire problem

Jon: [00:15:18] fixed it. Good.

Kevin: [00:15:20] Well, so Rob, you just have to go get a job at Apple, get them to fix your Mac.

Rob: [00:15:24] I know, right.

Jon: [00:15:25] You can work at the Genius Bar.

Rob: [00:15:28] Oh my goodness. I am sorry. It’s a Friday. It’s like end of a long week. I’m a little bit fried and loopy. Yeah. Anyway.

Kevin: [00:15:37] I will say I have a, sorry. I was just say I have an older 15 inch MacBook pro and if there’s one thing that will kill it, it’s not, doesn’t happen all the time. But if there’s one thing that will kill it, it’s. Unplugging it from the external monitor, like, like 90% of the time when I, if it’s going to, if it’s going to die.

That’s what does it,

Rob: [00:15:55] Yeah, I think what is happening? Like, is it just like an energy loss or are there like little gremlins running around like, Oh my God, you know, like we have to wait for them to come back, you know, no gremlin left behind, what are you doing in there?

Jon: [00:16:05] I swear video, the three things that  all computers are terrible about video drivers printing. And I feel like USB hubs too. Like in general, like especially windows, my, my desktop machine. I’ve got like a few hubs. I have a thousand USB devices and windows does not like that.

Rob: [00:16:24] Wait, Jon,

Jon: [00:16:26] yes.

Rob: [00:16:26] still there,Jon. I think you’re on mute. I can’t hear you. I can’t, I can’t hear you. I’m sorry. What?

Jon: [00:16:33] I see a video monitor. It shows wave forms. I can tell you’re messing with me. Yeah. But seriously, like printers printers are still bad. I have a printer and you can. You can email to it. Like I don’t print, right. Cause I’m, you know, a nerd, but like my family wants to print things apparently. And like, I got this printer, an HP, you can at least email.

So I have a, an email address, which I’m tempted to say on the phone and people could be on the call and people could email my printer, but it is, it’s pretty neat, but everyone’s like, I don’t want to do that. You know?

Rob: [00:17:09] that’s like the 20, 20 version of a fax. Like I’ll just email you this document that your

Jon: [00:17:13] It’s true, but it is a good way to get people off my back. They’re like I have a report due. I can’t do it. I’m like just email it to the printer, like, okay. You

Rob: [00:17:22] Yeah, just email it to the printers. Then you just fax me. Oh my God. We’ve come so far. So far.

Jon: [00:17:31] And video devices. Let me tell you about video devices. Cause we’ve been doing stuff with like, because of the remote thing and my team, you know, working with community .NET things and we have this community standup show we do. And so we’re using OBS, but OBS is complicated. And then we have more and more shows splitting off from more and more people hosting, but we not, all of them have fancy computers and fast internet and know how to use OBS and stuff.

So, so then we’ve been messing with other things on top of that and we set up a virtual machine with, so that’s pretty crazy. We set up an Azure virtual machine and they have a VM SKU? They have a VM that you can get that has Nvidia like access to the Nvidia GPU. And for some reason they have like promotional pricing.

So it’s not very expensive. It’s like a buck an hour. and then you can hook it up. So that OBS is using the GPU and it’s like GPU accelerated, super nice and stuff, and actually works. But it’s, then it’s still like a. You need to go, you need to control access to this virtual machine and you have to like log in and apply updates and crap.

So we finally like we’ve settled on using some like services for that lately. We’ve been using StreamYard and Restream, and they have kind of like a web based based thing where you can kind of like we’re using Zencaster now for like, you know, you call into and it’s all on a webpage Restream and StreamYard are both very similar, but it’s like, You, your webcam shows up your, your microphone, your audio, like just are connected to it.

And it’s all like in a webpage and then you just click and you’d like add and remove people from the live feed and stuff. So,

Rob: [00:19:19] Yeah. You know, thing is I’ve, I’ve crawled really deeply into all of this stuff. I mean, I won’t say that I know anything about ops, sorry. Oh BS. But, so no, it’s one of the cool things that I started to do here at Microsoft is I’m working on the LearnTV backend. so I’m, I’m actually leading the engineering on that.

It’s really fun. I can’t believe. Yeah, I know. They asked me to do it. I’m like what you serious? Okay, sure.

Jon: [00:19:46] What does that mean? What is, what is this thing?

Rob: [00:19:50] LearnTV. Well, you know,

Jon: [00:19:53] well, I’m partly, I’m, I’m asking for, I’m pretending to be dumb, but I’m

Rob: [00:19:57] You giving me a toss here? That’s what the,

I’m

Jon: [00:20:00] the ideal dumb guy, because I actually I’m dumb.

Rob: [00:20:03] okay. No, so no LearnTV is a, it’s just the broadcasting from, from, Microsoft. And it’s kind of funny, you know, I feel like there’s still exploration happening. What are you trying to do with it? And I’m not going to try and be the spokesman for it. Yeah.

Cause they could probably get fired. However, the idea so far is like, you know, a friend, a friend of mine that I worked with here, I’m working on it. He said, I love to listen to Twitch just over my shoulder and it’s always running. And if I hear something interesting, I’ll stop what I’m doing and listen.

And so I tried to explain to a friend of mine that way, just the other day. And I said, you know, he listened to NPR or someone listened to music or whatever. You get tired of music, you turn on something else. And to have something just running in the background, That pertains to what you’re doing every single day.

it’s kinda neat, you know, you just kinda hear tidbits of things. And, and so anyway, LearnTV is, is sorta trying to be that and a little bit more. And so, they’re trying to bang it into shape, but for right now, we’re trying to do the next rev of it. So they’ve asked me to step in and help out. So I am, and it’s kind of fun to step into the streaming world because wow.

Right. Wow. There’s so much happening out there. And, and to dig into all these things and I, I’m not even gonna pretend I know what’s going on. The person I’m working with, Eric st. Martin. He is, he is. He’s amazing. He, he. I guess built the Comcast, switcher, like for Comcast.

So yeah, like he designed and implemented it. Yeah. I know. It’s crazy when you work in like places like Microsoft or wherever, you know, like these big tech companies and you talk to the people you work with and they’re like, Oh yeah, you know, I.

Jon: [00:21:35] Yeah. I wrote that spec.

Rob: [00:21:37] I created Kubernetes. Yeah. I mean, that happened to me at build.

That happened to me, a build when someone said, Hey, you should have this person come talk about Kubernetes and like, well, who is he? And they’re like, well, he’s the guy that made it. I’m like, well, I mean, is he cool? Like hanging out at a Microsoft thing? And they’re like, dude, dude, he works. He works for us like, Oh, Oh,

Jon: [00:21:57] I know he spoke yesterday at, they did the .NET Conf Focus on Microservices and his talk was like super, I mean, it was just really low, key and fun.   I mean, I guess he’s probably spoken about microservices more than once, but his talk was just, it was like, it was just fun, you know?

Yeah.

Rob: [00:22:18] Yeah, no, it’s fun. And I don’t mean to sit here and gloat about all this stuff. It’s just to me, I’m like a kid in a candy shop. It’s really fun. So.

Jon: [00:22:26] Well, that’s

Rob: [00:22:27] blah, blah.

Jon: [00:22:28] So, so, yeah, the, the engineering for that’s gotta be pretty interesting. Huh?

Rob: [00:22:32] Yeah. Well, he does all the streaming stuff in the back end and I have no idea what’s going on with that. I’m more involved with other aspects of it, but, he’ll, he’ll tell me, like, he’ll pop into Slack and he’d be like, Hey, you know, here’s what we’re going to do. And, or here’s what I’m thinking of doing.

And I’m like, sure, whatever you think, man. That’s great. For those of you wondering, I just really want to quickly say this. we have clearance to do this open source, so we are going to make it open. And I’m not sure if I’m supposed to say that I might get in trouble for it, but well, that’s what we’re going to do.

Jon: [00:23:07] Awesome. It’s too bad. This isn’t live streamed itself. You could get fired, live on the podcast.

Rob: [00:23:14] Yes. That would probably be the feather in my cap that I need.

Jon: [00:23:20] Yeah, it’s pretty interesting. The whole like live and definitely this year with the. Remote staff, you know, I, some of my experience with this, I work with, with Hank Pullman on, work kind of behind the scenes, helping with the producing for Juneteenth cough. So we just, and it was really cool. Like we use streaming yard for it and it was like, just, you know, we’re the backend producer is Mike check people.

Okay. You’re set to go and boom and streaming harvest, like after having done OB acids. Great. But it’s definitely the. It’s like Photoshop level, there’s a million knobs and switches and you can, you can do that. Anything you want with it, but you it’s, it’s not, it’s, there’s a lot of like touch that button and the whole broadcast ends

Rob: [00:24:05] Yeah. If someone described it to me as the PHP of online broadcasting

Jon: [00:24:12] They’re like, you can do anything with it. It powers it’s everywhere and it’s, it works, but it’s yeah. So, and then it’s, it’s pretty cool seeing these services that kind of automate, you know. Yeah.

Rob: [00:24:26] Sorry. No, I just have to caveat that with this is something I heard Microsofts and official stance is not that it was just something I heard online and someone was talking about

Jon: [00:24:36] It’s and it’s, it’s also one of those things where probably like PHP, once you’ve learned it, it’s, it’s kind of a sunk cost Stockholm syndrome thing, but it’s like, now you like it. Cause you’ve put in all the work to learn it, you know? So

Rob: [00:24:50] and the fascinating thing about it is like PHP. And PHB applications. Like if you need to get streaming and online fast, boom, you’re up. You know what I mean? You’re like,

Jon: [00:24:59] Yep.

Rob: [00:25:00] anyway, Kevin, I’m sorry. You’re gonna say something.

Kevin: [00:25:01] I’m not sure I’ve ever heard it’s the PHP have ever intended as a compliment, however,

Jon: [00:25:09] But PHP is still all over the place on the web, you know, I mean, it’s, it powers a lot of forums powers, WordPress

Rob: [00:25:16] Well,

Jon: [00:25:16] Herding

Rob: [00:25:16] though. If you want to, if you want to get up and running and doing something quickly, I mean, there, there really is no alternative to PHP based applications. I mean, that’s my argument.

Jon: [00:25:28] Although get hub pages is pretty close.

Rob: [00:25:32] It’s getting there. That’s for sure.

Jon: [00:25:35] It’s interesting to seem. They’re kind of, you know, scooping things together now, like with, I don’t know, I mean, there’s get hub pages and there’s get hub actions and stuff like that. You really could cobble a lot of things together. I mean, I feel like that’s kind of something I’m seeing too lately is like the many platforms kind of bundled together.

I don’t know, partly I’m thinking about this because like, With work stuff. I, so I was mentioning, we do this is peanut community stand up. And then we’ve also helped with .NET foundation where you’re like, Hey, you guys have a bunch of meetups running around the world and if you want to livestream, here’s how, here’s the stuff we did.

You know, we can kind of share it over to you and you can, you know, run your meetups as live streams worldwide. You know, and all this stuff, there’s also like a good amount of it, admin, where it’s like, okay, someone needs a schedule show. That means you need to notify someone. That means you need to create a stream and you need to put it in, meetup and you know, all these steps and stuff.

So we’ve on our team. Been automating some things using Power Automate. It used to be called Microsoft Flow. And it’s a lot of, kind of plugging stuff together. So it’s like when you fill in a form, it adds a row into SharePoint and then it sends an email and then it puts a planner task and it assigns it to a person.

And then if the task is overdue, it sends in it, you know, and like all this stuff kind of like these blocks that you hook together. And before, before we started, you know, the podcast, Kevin was reminding me, that’s basically Yahoo pipes. so,

Rob: [00:27:11] Yeah. Yeah, that’s it. That’s the problem.

Jon: [00:27:16] but, but you really can do quite a bit, you know, the whole kind of no code thing. And there’s always, you know, like the, If This Then That (IFTTT), and there’s the, you know, like it is, it is interesting to be able to share, you know, and, and I feel like if you’re doing a bunch of stuff, hooking a bunch of. Like Microsoft officey sorta things together. This is better than a bunch of like power shell scripts, or I don’t know how else you’d do it, you know, just to kind of hook things together.

Rob: [00:27:46] is, you know, I was just having a big argument, not argument, but like a, a back and forth is the best way to put it with a friend of mine. About, about all of these things. Like, no. I’m not going to give away the context because it doesn’t really matter, but there are just like the, you know, this is like the best part of computing, you know, we can do serverless, we can do these Lambdas.

We can do, you know, like pushing like Netflix, talking about Netflix and pushing the JAMstack stuff and like, it’s great. I mean, I do agree. It’s great. And Kevin, I don’t know if you’re going to disagree with me on any of this or maybe you won’t, but there’s like, there’s. You get to a point where you’re like, ah, you know, I, the only the analogy I can come up with is like, wow, that ocean is beautiful.

I’m going to go swim in it. And then you get in and you realize that just under the surface is like this load of coral, not coral, but like a kelp. Right. And it’s like, you just wrapped around and kelp and you’re like, I can’t move. much stuff happening. And you know, and I’m like, Oh, and I just kind of went through this with a project I was working on like, wait, where’s that function and what is it doing?

Oh, well we have to upgrade the node version on that one. Cause that one’s going to expire, but these other ones. Okay. You know, like, Oh, God kills me.

Jon: [00:29:01] Yup. Well, and so this is kind of more the, like, as a service sort of thing, like it’s, it’s a more serverless applied to the serverless sort of idea, applied to business process automation, things, you know, that’s like.

Kevin: [00:29:17] Yeah, this is, this has been sort of a fascinating trend for me, cause like coming out of college, you know, 1,001 years ago, I, the first company I worked for was a, what was then known as BPM business process management company, which was essentially a no code, low code development platform, right?

So it was a graphical workflow model or where you would, you know, drag these blocks and connect them. And you could, you know, make decisions that kind of like model a data flow. And there were queues where people could connect and find work. And so like, you know, this, this is literally like old hat to me.

and then, you know, we had yellow pipes, which is sort of a very early version of that kind of thing. And then it all kind of, I don’t know, I don’t want to say it went backward, but it kind of went simpler with the, like, If This Then That (IFTTT) Zapier stuff where it was really literally like a, it was almost like a top to bottom script, but you were very limited in the flexibility.

And now, you know, now there’s this sort of Renaissance, not everybody would agree. It’s a Renaissance, but you know, this kind of, if you look at the like companies that are being funded startup, the company is being funded. There’s been this whole raft of these no code, low code platforms, which are basically like, you know, sort of graphical, you know, business application builders, where you can model workflows by connecting services together in a graphical way.

So, I mean, it’s one of those things where like, I’ve been kind of eyeing this space. I haven’t really looked that much yet the current offerings out there, but I’ve kind of always kept an eye on that because of my original background. And, you know, there there’s always. Have been problems with this kind of approach.

Right. You know, eventually things get so complicated and then you, you know, you don’t have

Jon: [00:31:05] how did they grow up?

Kevin: [00:31:06] diff and like, it’s, you do tend to hit some complexity walls. But, it is, I think it is an interesting space. And, you know, when you pile on like serverless stuff where you can like, basically run these applications for extremely cheaply on somebody else’s infrastructure, it’s, it’s an interesting thing.

And, you know, It’s there’s always been this sort of like, you know, there’s, there’s kind of like the Excel world, right. Where like, you know, which is, you know, programming for non-programmers basically. and then there’s yeah. Coding world. And this is in between, and it’s never, it’s, it’s always kind of struggled to like break through.

I feel like, like it doesn’t, it doesn’t break through all the way to the, to the. People who aren’t really coders. and, and you have the coders sort of looked down on it. So it has always been stuck in this little bit of a Valley, I feel like, but it’ll be interesting to see whether this iteration of it, you know, gets any legs.

Jon: [00:32:02] It’s a, you know, that whole kind of like the problem with a lot of this, like you’re saying, is it doesn’t, it’s not a smooth continuum. It’s kinda like you can work with, you know, Excel or you can work with like a block Walkley style programming, you get to a certain point and then it just gets like horrendous and then you basically have to rewrite to move. To something better, you know, or, I mean, in the past there was also an access, right. You know, or whatever, there’s these things where these businesses are, man, I worked on a project long time ago and it was moving basically moving a union union software. And so it was like, you know, relatively big schools and, you know, all kinds of government institutions and healthcare and they, and they were running there.

Ops and HR systems on Excel. And we moved them into a system that was managed. It was based on an open source HR system. and it horrendous because I wrote a lot of the data import stuff and it was these ridiculous SQL scripts, you know, to like, and, and I remember one, there was one thing where it was like, things were keyed on unique kid on first name, last name.

And so then everyone had multiple rows in this table and they just added ones and twos. And three is to the last names I had to de dupe all these, you know, like that kind of stuff. But, but, you know, I guess, I guess what you’re pointing out, Kevin is the whole, like, if there’s a way to move more smoothly between these worlds, that would be nice.

And one, one thing, actually that I saw on this just last night, Gene Kim shared this, a tweet is a blog post from Jeff Sternberg. And he’s talking about his he’s recommending that instead of using spreadsheets, like Excel to use Jupiter notebooks or something like it. And, and, you know, he talks about like, here’s all the limitations you run into when you run a business on Excel and something like Jupiter notebooks.

Can grow up better than that. I don’t know if Jupiter notebooks, I don’t feel like Jupiter notebooks is friendly or simple enough that to somebody that, you know what I mean, like a small business can jump into Excel and just start getting stuff done in a way that you can’t with Jupiter notebooks, but maybe that’s like the start of an idea, you know? like for instance, Google sheets too, like whatever, you know, how do you, how do you make Google sheets? Like show as code and move and go to the next thing, you know, I’m trying to think there have, it seems like there’ve been some things that do that better where you can, you can start, you can go to a certain level with the kind of easy, easy mode, and then you can say, show me my code and now I’ll extend it and change it over. And any thoughts? Now it’s, it’s a, it’s

Kevin: [00:35:08] I’m not thinking of it, but I mean, I know what you’re, I understand the concept of like, you know, like you need to get when you need to take it to the next level of sophistication. Like how do you do that without having to throw it away and start over physically?

Jon: [00:35:21] yeah, yeah.

Kevin: [00:35:22] And yeah, I think that, I definitely think there’s a there’s possibilities there.

I’m just not sure anybody’s cracked that. Not yet.

Rob: [00:35:30] I dunno, I just was having a really fun discussion with a friend of mine about WordPress. And so here’s my situation, right? So I’ve got literally 45 videos all based on imposter handbook stuff and interviewing and just blah, blah, blah, blah. Right. And, you know, these are some high value videos, at least to me.

And I think people can find value in these videos. And so my problem is I need a way to get these videos in front of people, you know? And so, you know, then, then your brain starts to explode. It’s like, what can you do? Right. And so I’ve gone all over the place. I’ve, I’ve checked out learning management platforms.

I’ve. You don’t like podia and teachable and I mean, you name it. I’ve gone there. Kajabi is another one I looked at. I mean, all of these are really, really cool. And you know, the whole time I’m trying to focus on what, what is it I’m trying to do? What’s the business angle here. What’s the payoff. And eventually, like, I always come down to like, like my thing is I want least friction between the person.

And the video. Right. And, and for some, I want to charge money because some of them are like five hours long. Right. So I charged for it, but I want to make it, I want to make it like, they feel good about it. And it’s just not like me being cheesy and whatever. And I just want to make it feel like a really good experience.

And so eventually I come down to the technology angle, what am I going to use? And then that’s where just everything explodes. You know, cause you roll your own. Right? And then we’re having these discussions, right? So, you know, you got to know analytics, you got to know all this other crap. You gotta know so many things about what’s happening.

How are you going to charge this person? How are you going to makes them feel like they didn’t get gypped off? You know, you want to send them an email based on their purchases and communicate with him. And it’s easy to see why. So when just goes with WordPress, because like with the installation, if you plugins you’re off and running.

A year from now, on the other hand, you know, you’re going to be pulling your hair out because things are broken and not working. So I don’t know. I think about this every time I have a discussion with somebody about, you know, technology and functionality, what should we do? Which even comes back to the discussions I’m having now internally about what we’re going to do with learning TV.

We’re not going to use WordPress by the way, but you know, But seriously, like I did post this to somebody on the team. Like if we just had a WordPress site where we could post videos every hour, talk to me, like literally a curl script, like you’re just going to post and redirect post redirect, talk to me about what’s better than that, you know?

And like, I think that level of grounding, and again, I know people out there are going to be like, Oh my God, Connor is an absolute idiot. However, however, like. I feel like WordPress has one great use in this world, which is to be the touchstone experience in terms of what people out in the internet, you know, or out in the world expect from technology, because they have managed to capture that, you know what I’m saying?

Like a business person or whomever has an idea. They can implement it in WordPress, probably within, I would say within a week and probably within three to five days. Or last three to five hours, if it’s simple enough,

Jon: [00:38:54] It’s like the Excel, it’s the Excel of the web, you know? I mean, like,

Kevin: [00:38:58] totally is.

Jon: [00:39:00] and, and some of the things like I’ve, I’ve kept and it’s been partly an experience just cause I want to learn and understand it, but we’ve had the Herding Code website running on WordPress since the beginning. And. Aside from the fact that PHP is a fascinating platform when you get hacked, because you can override things at some really interesting levels. Mmm But, but they have done a pretty good job with some things. One thing they continued to improve the upgrade. experience. So now it auto updates and it auto updates with like security features in a pretty good way. The, the extension model I feel like is pretty good. Like there’s some pretty good hooks.

And I wrote an extension. There was a problem where Feedburner could only like Feedburner would only accept a certain number of. A certain feed size and then it would just choke. And so I went in and modify it. I wrote an extension or WordPress, add an extension, whatever. Yeah. Call it. That would for the, the latest, like 50 posts, it would grab the entire thing.

And then for the, all the other ones in the history, I would just grab a truncated. You know, like truncate I’m at a hundred words or something. and I mean, it was like, it took a little time to like understand the model, but then I was like, Oh, this second actually pretty elegant, you know, it’s and they have a pretty good system for like versioning and marking, extensions, being tested with.

Certain updates, PHP itself, like is not a beautiful language to me, but like it’s, you’re not, you’re not writing PHP when you’re developing WordPress, you know?

Rob: [00:40:42] Yeah. Yeah. Yeah. I feel like, I feel like we’ve probably tuned, made a lot of people tune

Jon: [00:40:47] yeah.

Rob: [00:40:49] There’s a WordPress again.

Jon: [00:40:51] You know, Rob, when you’re doing, you’re talking about like WordPress that you’ve done, is it mostly just configuring sites or are you like extending and writing PHP stuff?

Rob: [00:41:03] Well, No, I have, I won’t, I mean, I w I shouldn’t say it like that. I only have, I only have so much left in my brain. Like, I feel like PHP, PHP is, is a universe, and a different way of thinking. And I think it’s interesting. I just, if I start down that path, I probably will get lost in the forest. So I,

Forever

Kevin: [00:41:25] will it dominate your destiny?

Rob: [00:41:27] Yes. Forever really dominate. Right. Exactly. Oh God. So no. So what I’m doing now is I’m just literally, I’m trying to come up with ways to put videos in front of people. So

Jon: [00:41:39] Yeah.

Rob: [00:41:40] you know, it’s, I’ve, I’ve gone with, I actually made a Nuxt app, you know, that. And it works. Okay. But then it’s, it’s interesting because like, I was able to get the functionality of this Nuxt app up and going fast, like, you know, next video and what are you watching?

And I’ve got, it was really beautiful. I mean, it came together really well, but then, but then it’s like, well, okay, cool. So we’ve got, we’ve got to, you know, a 0.01, you know, the next part is like, well, what are people watching? How often are they watching it? You know, and like what, what about an RSS feed?

What about, you know, like these Twitter cards, what about blah, blah, blah, like on and on and on you start to getting into marketing and like, Oh my God. And then you just realize, like, I don’t want to do any of this and then like search functionality. And what about like, having like maybe just a partial thing where someone can watch the first 20 seconds and then you turn it off like, Oh God spare me from this.

And then of course you go into WordPress. It’s like, Hey, here’s a plugin for Vimeo that only show the first 30 seconds lesser part of your membership site. Like, wait, how did you, how do you, Oh right. Cause you run half or third of the fricking internet. Of course you, you know, anyway.

Jon: [00:42:50] Yeah, that’s

Kevin: [00:42:50] orchard? Rob is orchard, still a thing.

Rob: [00:42:54] Oh,

Jon: [00:42:57] You know, it’s funny. I mean, orchard, orchard still plugging away.

Rob: [00:43:02] Oh.

Jon: [00:43:04] Well, so, but I mean, I don’t think orchard now orchard core. Is it all related to

Rob: [00:43:10] Oh, you said

Jon: [00:43:11] or treatment?

Rob: [00:43:12] you said plugin. So I had to,

Jon: [00:43:13] yes.

Rob: [00:43:14] So you did your own dad joke and didn’t even realize it. yeah, no, I, yeah. Yeah. I’m sure orchard would probably be a I’ll investigate that later. Thanks, Kevin.

Kevin: [00:43:26] Sure.

Rob: [00:43:28] I know Bertrand’s probably listening right now. Nevermind. I can’t swear. And can’t swear in French and I won’t bother cause like bothers him more if I try.

Jon: [00:43:39] Yeah, good stuff. Yeah. I mean, I guess that is part of the thing, like the whole plugin model is just pretty amazing, right? It’s like, that is a reason why WordPress works so well. And that’s the reason why a lot of languages get super popular. Like, you know, I don’t know. I’m just thinking around like NPM and, you know, I

Rob: [00:44:01] Well, you know, it’s funny you bring up WordPress to people and they’re like, Oh my God, it’s such a pile of stinking crap, which I’m not going to debate at the same time. You know, like a lot of people will say, Oh, it’s so insecure. You know, like it’s, it’s this structured really simple platform that is hackable, which it is it’s insecure because blah, blah, blah it’s.

So they. It’s interesting to me, they make the next logical leap, which is, will therefore PHP and WordPress, my suck, you know, and then my counter to that is, dude, this thing runs a third of the frickin web. Right. So yeah, I mean, It’s going to be under a, just crazy amount of attack. Right? So if .NET ran a third of the damn web, you could be, you could be guaranteed.

You will find every, a single hack possible to get into whatever platform you’re using. You know what I mean? And like, I mean, ah, I don’t want to go too off on that, but to me that’s important to

Jon: [00:44:57] Your surface

Rob: [00:44:57] that perspective. Yeah, not again, I sound like a total WordPress advocate right now. I’m not, I just, I look at this, like, I feel I like as technology people there’s there is a split brain kind of thing happening here where.

You know, we, as software people look have down on WordPress, you know, let’s software people, whatever, call them. I don’t know this, like subset of people who are, who are doing it, Ruby and Python, node, .NET, et cetera. Right. And you’re like, Oh God, WordPress. You know, you know, I don’t, I’m not going to touch that.

That’s horrible. But yet WordPress is the dominant thing and I’ve never, I, for the last few years, I’ve never really, I understood that. And I really feel like it’s important for everybody to do that.

Jon: [00:45:39] I just really am impressed with how they’ve continued to like grow up as a platform and move from. Like, there was a time, five or more years ago where. I was always worried about getting hacked and now, like every time I log in, it’s automatically updated. I there’s a few extensions, you install, I put CloudFlare on it and it’s like, I don’t worry about it.

You know? And it just, it scales pretty well. It’s like, I don’t. So I guess that’s, I feel like that’s a success story as a, as an open source platform to have evolve that well, like their release management is just solid, you know?

Rob: [00:46:15] Yeah. Yeah. I mean, you know,

Kevin: [00:46:17] Yes. We talk about cutting edge technology here

Jon: [00:46:19] There you go.

Kevin: [00:46:20] and gentlemen.

Jon: [00:46:22] What did we talk about? Excel word, press. What’s next.

Rob: [00:46:29] what is fine? It, Eric, the guy working with Erickson, Martin, we were talking about doing this streaming thing and he, and he was, you know, he was just gushing about all this technology and he’s like, you know, what, if we’re going to do that, we have to learn rust. I don’t know. And I’m like, yes, I just jumped out of my chair, like anything to learn rust. then, you know, it’s like in the back of my mind and like, what. What is that going to serve again?

Jon: [00:46:54] I read some things that Microsoft is using rest more. I don’t really know much. I’ve already said more than I understand, but

Rob: [00:47:02] No, I don’t know.

Jon: [00:47:03] I have read like, I mean, I guess for, for system level stuff, it’s. It’s better for writing safe code. that’s about all

Rob: [00:47:15] Let’s

Jon: [00:47:16] those are words. I feel those are words. I feel mostly confident about saying I don’t understand why.

Rob: [00:47:22] are, there are hundreds of developers getting out of their seat right now, walking into their boss’s office, going Jon Galloway says…

Jon: [00:47:28] That’s

Rob: [00:47:29] rust makes things safer.

Jon: [00:47:32] You know, it will be interesting. That’s something we should like maybe try and get someone onto that knows rest to talk about that. Cause it’s but I have, I read some sort of thing and it was like, God, I don’t know. I’ve read a thing.

Rob: [00:47:47] There’s a person in my group at Microsoft. His name is Ryan Leveck and he was on the Wunderlist team and he is our local rust expert. He runs rest meetups in Berlin. He’s an amazing guy. And I hate him because his voice he’s got one of these voices. It’s like, Just dripping silk, just deep. I don’t know.

It’s just a first time I talked to him. I said, I hated him. was, you know, it’s like, hi, I’m Ryan. I hate you. Right now

Jon: [00:48:17] Yeah, no, I don’t know

Rob: [00:48:18] Yeah. All right.

Jon: [00:48:19] what, what is rests package manager? Everybody’s got to have a package manager

Kevin: [00:48:25] Cargo.

Jon: [00:48:26] cargo. That’s right. I installed it at one point for some thing. And then have not since. I don’t know. It’s good

Kevin: [00:48:35] I, the only thing I know about rust is one of the cargo is my commander, but, two is that, somebody, I forget who it was, wrote a shell in rust. God now I’m totally blanking on the name and it’s going to piss me off. hold on one sec. Googling

Jon: [00:48:52] I’ll have to look it up.

Kevin: [00:48:54] Oh yeah. New shell. It’s called. and I was intrigued by it because, so I never really took the PowerShell.

I mean, I can kind of fumble my way through it, but I always kind of hated the. The, the verbosity of it and the kind of weird syntax. but I did like the object orientation of it, I guess the, you know, the fact that the things that go flow through the pipeline or objects and not just text, that was like the killer feature.

so new shell is, has that philosophy where, you know, you’re, you’re piping objects between. You know, different operators and functions.

Jon: [00:49:34] Yeah. I’m looking at it now. It’s

Kevin: [00:49:36] but without the kind of arcane syntax that, that, PowerShell uses. So

Jon: [00:49:41] It’s funny though, as I’m looking at the sample code here, so it’s github/nushell/nushell and it’s like a. It’s funny because PowerShell does have a lot of aliases that are similar to this. So like LS, pipe, something, or other would work in PowerShell too. but you have to know the things, you know, I dunno.

Yeah. That’s neat. yeah. cool. Cool. Yeah. I guess, you know, one other thing, just, you know, as far as new issue on the way things there’s, they’re .NET 5, .NET 6. so I

Kevin: [00:50:21] I did six. Wait,

Jon: [00:50:22] I, okay, so .NET 5 do out November and then .NET 6 is the LTS, the longterm support version due out in 2021.

And, and so the idea is they’re having similar to like node and Ubuntu, and the like this, I don’t know, kind of a guaranteed release schedule so that people can plan on it. and then they went with, instead of people were confused, like we actually did have people that mix because there’s .NET Framework 4.8 and .NET Core 3, people were like, Oh, the new, the highest version number. It must be the right one. So they would use .NET Framework 4.8 instead. so anyhow that’s they were just like, Nope, it’s all.net. It’s not in that five. Then that net six.net, whatever. So in originally there were like some neat features that were going to be in Dutton at five, but because of COVID and changing stuff around schedule wise and things, some of that stuff is now in .NET 6.

so. Yeah, I’m just the, I don’t know. Neat. I keep an eye on their, they’re doing, they keep doing neat stuff with, intrinsics hardware intrinsics which like blows my mind to see like they’ll, they’ll optimize stuff in the compiler. So like, it’s doing all kinds of, like, it’s just using all these features that have apparently been in, you know, the chips out for awhile, but you have to like, write some smart assembly code to actually use them. So that’s kind of cool.

Kevin: [00:51:55] So I have a purely hypothetical question, which is not hypothetical at all, which is, you know, we have a, we have a applicant, one of our applications is written in.net framework for, and, you know, hosted on windows. And I would love to have it not be someday. you know, what is the, what is the migration path for.net framework?

You know, asp.net, MVC kind of applications. Is that hugely painful? Is it. There, you know, conversion tools.

Jon: [00:52:24] Well, so a lot of it is, it depends. there’s, there’s not like a run a tool and it’ll update your. Your thing. If you’re using MVC, it’s a lot. It’s generally smoother it, but it depends how much you’ve customized stuff. So like, if you’ve done action filters and you’ve written, you’ve like, you know, hooked into a lot of stuff in the pipeline.

And especially if you’re doing, using like the identity system, then like all of those are areas where they change over time, the actual like model view and controller thing, those are probably the least likely, you know, those have changed the least like razor as a language hasn’t changed that much. And yeah.

You know, the controllers are pretty similar. So it’s more of the, kind of got some internals where you could override an extend stuff. Those are, those are the cases I’ve talked to people where it’s like, Oh, you’re kind of screwed. You know? Like, so I don’t know if that makes sense, but

Kevin: [00:53:23] This is not a, not a case where I can like open my project in visual studio, 2021. And like, you know, magically works

Jon: [00:53:33] no, no, not really. Yeah. So it’s like a, you know, there’s definitely, there is a migration, out in the, in the ASP.NET Docs where they like talk through, here are the steps you do. and it really depends on like how well factored it is. Like the service code you can, you can use .NET standard and you can like, You know, that migrates over pretty cleanly.

Cause it’s just .net is .net code, but it’s more the, really, a lot of it is the startup hosting staff. So like there’s no more Global.asax There’s no more web.Config. All the configuration and startup stuff have changed around. and then some other things get simpler. Cause there’s dependency injection, like just it’s built into everything.

So that simplifies some stuff where before. You know, you had to, you had to configure all that sort of stuff. So, but it’s, it’s hard. There’s not like a simple one size fits all because MVC is like, there are a lot of different ways people use MVC. you know, there’s not like a canned answer for it really. I don’t know if it’s helpful, but you know what I’m saying? You could, you could override the view engine. You could override the, you know, Stuff about, you know, you could have complex stuff set up with, with dependency. You could have action filters. You could have, you know, custom, I dunno, ActionInvokers and all kinds of things that are already escaping my brain now.

Well, so it’s right about an hour. Do you think we should kind of wrap up here?

Rob: [00:55:08] We haven’t picked on Kevin enough.

Jon: [00:55:11] Nice. Alright. Well, I have no idea how we can wrap this up. So I think we should end up with a knock knock joke. No, I’m kidding.

Rob: [00:55:22] I got it. I got a good one. Knock,

Jon: [00:55:24] Oh, good. Who’s there.

Rob: [00:55:26] smell, mop.

Jon: [00:55:30] and that’s all the time we have this week.

Rob: [00:55:35] Come on. It’s like the biggest and oldest dad joke. You guys have heard that one, right?

Jon: [00:55:40] Yeah,

Rob: [00:55:41] You’ve never heard smell mob. Are you going to cut this out, Jon? You can’t cut this out. Smell. Mop is probably one of the best jokes ever.

Jon: [00:55:48] smell mop.

Rob: [00:55:50] Yeah. There you go. That’s gross, Jon. I can’t, I can’t believe you actually said it.

That’s really gross.

Jon: [00:55:56] we’re going to get kicked off the internet. If we have that end a podcast that includes PHP WordPress.

Rob: [00:56:04] Yeah, it’s true. I have to agree with that one,

Jon: [00:56:07] I think, yeah, I think to balance this out, we need to end with, with like maybe an English accent in some like, you know, some like, what is it? , you know, some like, you know, erudite music.

Rob: [00:56:22] You mean like talking about Brexit?

Jon: [00:56:25] Wonderful. Alright. Well,

Kevin: [00:56:28] are, I promise our Q3 podcast will be better.

Rob: [00:56:34] Oh, man.

Jon: [00:56:35] right. Well, since I’m cutting a chunk out, I’m just going to cut all that out.

Rob: [00:56:40] Yeah, you should start using start the whole podcast with that.

Jon: [00:56:44] That’s right. Well, this has been, well, this has been a fascinating discussion. Hopefully the next time we talk, it will be an even more fascinating discussion and I will not be wearing a mask, the entire podcast.

Rob: [00:57:00] Okay. My name is smell. Mop. All right. This

Kevin: [00:57:11] Jon, when we have our, when we have our subscription program, this is the kind of

Jon: [00:57:15] That’s right. That’s right.

Rob: [00:57:17] Yeah,

Jon: [00:57:18] No, I think people will pay to exclude it. They will pay more to not have this portion.

Rob: [00:57:24] And maybe the podcast will be hosted on WordPress at that. Oh, wait a

Jon: [00:57:28] it already is. It already is wonderful.

Rob: [00:57:32] Sorry.

Jon: [00:57:33] All right.

Rob: [00:57:35] Bye

Jon: [00:57:35] That’s wonderful. Thanks everyone. I will now stop recording. 

Rob: [00:57:42] Smell mop!