How'd you like to listen to dot net rocks with no ads? Easy? Become a patron for just five dollars a month. You get access to a private RSS feed where all the shows have no ads. Twenty dollars a month, we'll get you that and a special dot net rocks patron mug. Sign up now at patreon dot dot NetRocks dot com. Hey guess what. It's dot ned rocks all over again. I'm Carl Franklin and I'm Richard Campbell, and we're here with Rocky Lotke. We're gonna be talking to him in just
a minute. But what's up with you, mister Campbell? What's new? Oh? When's the last time we shot a three show day? I know it's been a while. Yeah, yeah, it's been fun. Usually I have a whiskey at this time of day, yeah, when it's the last show of the day, but I am staining from alcohol during the week. There've been doing this since the first of January. That's smart. Yeah,
all right, I appreciate that. Where I have now been, you know, in the new office, have actually put the crystal decanter filled with whiskey in the office, so I don't even have to I'd have to get out of my chair. Oh okay, if you had a drip tube, that would be even better. I have a I think there's Shivus regal in there right now, you know. After shooting that that windows weekly stuff people bugging
me about. Just make a YouTube channel at that. That's like one of the things I could add to a channel like that is like, what's in the decant you know, in your decanter? What's in my decandor? Like decantors are out of style ever since bottles became cheap well, and for decanters for whiskey are kind of like, nah, why do you do that? Decanters are for wine, isn't it? Well? These it's really just a
thing you put. Once upon a time, there weren't bottles for whiskey, right, and so you would take you would take your decanter your bottle while out be clear, your servant would take your decander down to the whiskey purveyor and they would fill it from the barrel and go back home on a like a growler for whiskey exactly. That's the way it used to be. But have bottles, in fact, we have fancy bottles, right, Yeah, the things are good, all right? Well cool, let's start things off
right with a little better no framework. All right, man, what do you got? Well, you you don't have to know it, so you better not. You're not better know it, and it's certainly not a framework. Don't you should know this? Well? Yeah, play yourself. This is seriously good music. Okay. So my better no framework is my band's website, which I don't know as if I've even talked about my band's website, Franklin Brothers band dot com. But I'm Franklin Brothers band dot com.
You can see our schedule, but more importantly, you can see a slew of live videos that we've recorded of the band, and we meaning me. The band uses a very cool technology for it's like all the latest stuff, but I've been doing it since like twenty twelve, where you have this headless
mixer right with inputs and outputs and headphone preamps and all that stuff. Everybody connects to it, even including the sound guy sound guy with an iPad, all the musicians with iPhones or or you know whatever kind of phone, and they can dial in their own personal mix. Each person gets their own mix that they can modify. With their phone, and so it takes monitors off the stage. Everybody gets in ear headphones and we've been working like this for
a long long time. Nice. One of the sign benefits of using this is I could just plug in a computer and it will record, you know, thirty two tracks all the channels, all the channels, and for the audio wonks right after in the signal flow, right after the preamp. So you plug in the microphone, the preamp amplifies it and then it gets recorded. So there's no effects, there's no nuhing thing on it. It's drop
yeah yeah, I know, minimal room yeah yeah. And so as long as I get a good signal and it's not too hot or too low, I can take that back in the studio and mix it and then sync it up to videos and stuff. So that's what I've done with all of these videos. So it also cursed me, Like, no monitors means it's a lot more room on the stage, yeah, hack of a lot more portable
rig like you can more yeah, more control is more. Yeah. It's important that you don't get all the bleed from the monitors going into the microphones, which makes it very difficult to mix the front of the house. Yeah for sure. So anyway, I recently published a new video which is a new mix of an older recording that we did, Jay and I did with a few other people, some people horns from the band, some not. Of the thrill is gone and so this is a song that BB King covered
it. He didn't write it originally, but he has the most famous version of it from nineteen sixty nine. And the guy who played bass on that with bb with Bebe, who actually kind of wrote the groove according to him, like he came up with that groove he played it with us. Wow, Jerry Jamott, who's I mean a legend, a legend ye as Schofield told me. He's R and B Royalty. Dude, how the hell did
that happen so well? And I mean we were talking before, But that may the BB King version may not even be the best version that Jerry played on. Yeah. Well, yeah, that's true. Yeah, because he also did the Aretha Franklin version. Well you're thinking of Son of a Preacher Man. Oh no, I'm mixing up songs. Yeah, son of a Preacher Man. Yes, so we also did Son of a Preacher Man.
You can find that. But me idiot. I had no idea that he did that with Aretha on Aretha frank And so we're playing in the band and night drummer says, hey, have you ever heard Aretha Franklin's version of that? No, So we listened to it. It's great. And then I look, Hey, that sounds like Jerry Jamatt playing bass. Sure enough, it is. And I asked him. I asked him, Hey, do you know son of a preacher? Do it? Do I do? I?
Maybe I do. Rocky, you can chime in here because the reason that I'm showing this is because I remember you came to see my band at Sailfest in New London one year. I remember seeing you from the stage. Yeah. Absolutely, My wife and I came all the way out there just for that. Actually, it was awesome. That was so cool. There's nothing better than a summer night and fireworks, yeah, with the water in the background and the weather and the and yeah. And it was a fantastic
experience and you guys really knocked it out of the park. I was very impressed. Thanks. Well, I'm very proud of this band and we don't make any money, but we sure have a hell of a lot of fun. Fair enough. Yeah, anyway, that's my better No framework have fun with that, and who's talking to us today? Richard grabbed a comment off
of Show eight sixteen twenty holy Man going back a little bit. This is from January twenty nineteen with one Rocky Laka when we were talking about migrating dot net standard back when that was a thing yecause of course he was doing it with CSLA as well, so he had certainly some good opinions about it.
And a longtime listener Tony Drake, who's out of Melbourne, Australia, Melbourne, and I would also point out one of my favorite comments of all time was the one that he sent us back in twenty eleven when we did that code mash with the Java posse. Oh yeah, that was a lot of bourbon was involved, as a lot of bourbon, had a lot of bourbon, and I as if I recall correctly, those guys got hammered and we
were kind of professionals. Oh no, because that was the thing. If you make fun of the other guy's stack, you have to take a drink, which is why, because I was thirsty, I led off with a bunch of Java jokes, as you do but now I think a couple of them were sleeping by the end of shows. Not the comment I'm going to read. I'm going to read Tony's comment in relation to that dot Standard issues, which is he said, I love the show highlights the slight man we've
gotten into. I want to say something as someone who is building a large app with CSLA and loved it. Now working in KRE two to two with dls oh Man KRE two and Standard two oh and four point seven to one, which can use the DLLs from stead of two oh and an angular seven SPA as the UI is hosted on Azure. I came from fifteen years as a PICK developer in the nineteen nineties. I'm million SQL in dot net in two thousand and five. I share those stories with the ADP PICK Basic something
like that. Yeah, I know with you, it's amazing how much change we do go through as software engineers. And I would love to have a beer with Rocky and you both. I have no real friends who know the pain we all feel of being in this odd, odd business. Imagine if making bridges involved redoing the theories in practices every five years and no, no thanks, no, no, no, no, no, I don't think it's better, Like you know the big When our software crashes, you just
reboot, which crashes. Beep per die. None good. If anything I got for this podcast, it is stay current. So I feel smuged that my current business solutions are moving one hundred percent to Core and keeping up with the latest JavaScript frameworks and packages like autumn Apper and so on is the best way forward. One thing you forgot to mention is how hard it can be
to realer in this old tech to keep it going. Getting a developer and who's never seen WPF for wind forums, and while they know dot net, it's all new, so it can't necessarily be easy keep on the latest or previous releases. My rule keep current. Yeah, good advice. I can't argue that, Tony. True enough, and thanks so much for your comment. I mean it was a few years ago, but not that many.
So a copy of music Code Buy is on its way to unit. If you'd like a copy of music Cobe, I write a comment on the website at dot at rocks dot com or on the facebooks. We publish every show there, and if you comment there and a reading the show, we'll send you a copy of music cope, and you could certainly send us a tweet or an X or whatever the hell you call it. These days, I'm at Carl Franklin, He's at Rich Campbell, but the cool kids are hanging
out. I'm massed on, I'm at Carl Franklin at tech Hub dot social, and I'm Rich Campbell at masadon dot social. Send us a tweet. I believe Rocky you're also on massadon, aren't you. I am. I'm Rocky Lotka at fostadon dot org fostaedon. Hmm, very cool. Well, this is usually where I introduced the guest, although Rocky needs no introduction. But just in case you don't know who Rocky Locky is. He wrote the very first book on dot net with Billy Hollis that I ever read, ever,
ever, ever. I always think of Billy and Rocky as your inspiration for Donna at Rocks full stop. Yeah. I mean basically, when we would hang out in the behind the scenes, you know, in the speaker's lounge at conferences and stuff, we'd be having these great conversations and I was like, these have got to be shared. Yeah, yeah, so good old friends that in a disturbing addiction to a couple of mechanics from Boston and
there you go, Dot Ross. I still listen to those reruns. Those guys are retired, I know, well one of them died and past. Yeah Tommy, yeah, car talk. But yeah, you're right. I mean, I'm a public radio junkie and I always like this stuff. And you kids got to remember that we've been doing this show. I've been doing this show since two thousand and two, which is like two years before the word podcast happened. Yeah, yeah, no, I'm the new guy.
I only did it. I was only a guest in two thousand and four. So we're going to rename this show. Three old guys talk about the old times. There, very old guys, that's true. We're all grayer on this video. Oh my god. Yeah, So Rocky, what's up? What's new? Hey? I am talking to you from well Sunny Palm Springs, California. What's up with that? Iway was expecting he has to share snow stories because you're supposed to be in Minnesota. That's well, and
that's why I'm not in Minnesota right there. Very good. My wife and I are like, yeah, let's get out of here before it gets too bad, and quite enough of that. Yeah, are your kids grown and gone now, Rocky, They are, ye ye. The oldest is well married and they just bought their house, and the younger one just got engaged. He just proposed to his longtime girlfriends. So very exciting and that's excellent. One of them's a bass player too, right, Yeah, actually both
well, both of them are amazing musicians. But the oldest one plays bass in tuba and the younger one well now primarily is the lead guitar in his band, but he plays everything kind of he's kind of like you, Carl, he's puts and I remember you and I had this conversation, probably with my son actually, about how it's you know, he's got talent, right, just kind of a natural talent, but that by itself doesn't do anything unless you put in the work and you see people like him and you get
up on age and just to the rest of us, effortlessly, you know, do tear it up. Tear it up. And people come up to me, they say, how long have you been playing? And I say, oh, about twenty minutes. No, you're right, you have to do every day and people don't realize that they think, Oh, you know, that's why people think that people are born with this ability, like they can just it just oozes out of them. And well it does after forty
years of doing the same thing every day, you know. I mean, I do think there's some innate, you know, talent or something that some people have and others maybe have less of. But honestly, I'm not so sure. I mean, when I started taking piano lessons when I was three, it was really really hard, four or five or whatever it was, it was really really hard. And you know, it was only because my mother made me practice. And I don't mean like you're going out of practice,
honey, I mean you've been practice. I encourage you to read the book Talent is Overrated I have, Yeah, Malcolm Gladwell yeah, and then yeah, And it's because this was a couple of psychologists that were going to go define talent and in the process found out it doesn't exist. Interesting, Yeah, that you can always find other evidence of effort, an environment and upbringing. Yeah. Oh god. Clara, my youngest daughter, who's twenty one now, she said to me when I was in Spain visiting her.
She said, Dad, I'm really mad at you, like, why cause you didn't make me practice. I'm like, well, this is a fine how do you do? Right? It's like you didn't want to and you wouldn't and I did try. Yeah, yeah, didn't try hard enough. But yeah no, I really you know, I would read the book Talent is Overrated and just watch the journey these folks went on to try and quantify talent and realize behind every remarkable set of abilities is a big pile of effort.
Yeah. Absolutely, What did he say, ten thousand hours is what it takes. Well, that's another set of metrics. But it was the big thing, you know. It was things like why are athletes consistently born in January? Top tier athletes are born in January February, right, because of the way the schools select their grades, so they tend to be biggest in the class, which means they're quote talented, which means they get additional training. Yeah, there was a thing about hockey players in Canada. That's
right. It applies there for the same and for exactly the same reason, because of the way the system works. But it's always the same case that you get into as soon as you dig in a little, because they were perceived as talented, they got extra training, and the extra training is the important part. Well, and this pertains to programming as well. I mean, if you don't practice all that, if you're not doing it all the time, after a while, you kind of atrophy and you forget things.
And I'm also it's amazing how little practice we do. We tend to just do do the work, and so you rarely I feel like you press. You rarely press against the edges of your skill unless you do it intentionally. Like the bypart of this is we're prone to pick the new library to not want to build the app the same way again, even though it's you know, talk about bad bridge building. It's like, well that bridge work great, I'm never doing that again. I'm going to do it a totally different
way this time. Fortunately, in our business, there's so many shiny new toys that we can play with that it's not it's not a sacrifice. Like I just just sorted a Quest three and only because Jeff Fritz told me that you can program it with Maui. Because it's an essentially an Android device, you can write a Maui app and run it on your Quest three. So I'm like, I'm all over that, honey. I got to buy one of these. It's gonna cost one thousand dollars. And she's like, yeah,
okay, whatever, it's for work. She didn't say that, by the way, she was like, what's it for? Don't you have one? Anyway, no quession. Let's talk about CSLA eight, Rocky. I'm happy to talk about that. I'm having a blast speaking of, you know, learning new things and actually I suppose doing practice. It's yeah. CSLA of course has been around in one form or another since nineteen ninety six, I want to say ninety seven. Yeah, And you know, it's just
for me at its core. Hopefully it provides great value to a whole lot of people, but for me personally, it's the way that I get to go out and learn whatever is new and shiny, right, and yeah, you know, so, CSLA eight is primarily about dot net eight, and really the thing that has changed the most between dot net seven and dot net eight is Blazer and trying to figure out the depths of these changes that have happened in Blazer and make CSLA continue to work. It's been quite challenging.
I gotta say, it's a It really forces a person to dig into parts of dot Net and Blazer that I hopefully most people never have to look at. Right now, do you do a new c SLA version for every version of dot Net? Typically? I try. And also for some years now we've been doing semantic versioning, so we store up all of the breaking changes, and you know, so nowadays once a year we get to release all
the breaking changes. Yeah surprised, Yeah, exactly, you know. And so yeah, if Microsoft were to change their cadence, then we might have to reevaluate, right, because you know, once a year is fine. In fact, that's probably as fast as anybody would ever want. But there's plenty of people pushing saying it's too fast. Still, Yeah, oh,
absolutely right, absolutely right. And you know, both both the dot net stuff and and the c s l A, you know, every every breaking change has a real cost to everybody that uses you know, your framework or your tool or whatever it is, and trying to keep that in mind and minimize the impact is an important piece of any long term project, I think. But how do how do you why do you need a breaking change at
this point? Is it really really an art re architecture or is it just reflecting breaking changes in the framework, so they come in different flavors, I guess sometimes, you know, and when dot net introduces generics or you know, Blazer absolutely requires that you support dependency injection or you can't play right then, or a sink and a weight, you know, these these are things that you have to adopt, I believe, right, in order to remain
modern and current. And yeah, otherwise why are you calling it eight? Yeah? Yeah, why are you using c s l A if you're not using generics? Otherwise, why are you using CSLA? That's right? Yeah. If if CSLA quits working, you know, with Blazer, then what's the point? And you know, so I so some of them, I'm like a victim of you know what I mean? And yeah, right, yeah, no, you you should support Blazer. Blazer requires dependency injection,
tada, you have to make major changes. You should try having a website with one hundred Blazer videos on YouTube with accompanying repos of code and trying to stay current on that. As a Dante PA probably get done by the time dot Net nine comes out, ye right, right, but our horrible process. But I always have to say, you know, this is for dot A if you want dot net seven, watch this video, go to this
repo. It's it's gonna get fun. The other big category is feature enhancements or tech debt, right, that are not imposed by Mike, you know, essentially not imposed by the platform. But you know, I keep learning and the people that use c SLA, the community, you know, comes in and says, hey, you know, why does it why does this work this way? Wouldn't it be better if it worked that other way?
And you know, sometimes we'll go back and forth, have a conversation, and sometimes the answer is no, it should stay the way it is. But other times it's like, you know, you're right, the world has changed, or we got we got it wrong when we built this piece of this feature ten years ago. Yeah, yeah, or was it right at the time, Like I got to imagine, often you get suggested that this would be a better way, and in the first couple of times it said,
you're like, nah, it's not sufficiently different. But then more time passes and the environments passed. It suddenly that weird idea two years ago is getting rather mainstream now. Absolutely right, absolutely, and yeah and again, you know, I try to minimize these breaking changes because there's a such a huge cost to people. But sometimes, you know, independency injection and acinc and a weight are two that were really tremendous. They had just you know,
because they're they're viral. As soon as you start using acinc and a weight in your code, it spreads everywhere and a good way. Right, well, it is a good way, but it forces all your consumers to adopt it to right. And dependency yeah, yeah, and dependen the injection is the same thing as soon as you aren't using it. You know, a whole lot of things that were pretty common, you know, like using static helper methods to do to simplify some coding. You can't use static methods
and dependency injection. They don't go together. And so yeah, one or the other. Yeah, and uh. And then you also consider like Blazer for example, just web programming in general, in async. You know, a web request is a synchronous operation. If you think about it, I send a request, I get a response. Something changes. But now with frameworks like Blazer, little pieces of the UI can update independent of other pieces
of the UI. And you know, if when do you call a weight invoke, a sync state has changed versus state has changed, you know, when you know these questions, Like most people who come from a you know, a Windows let's say program background and then get into the web me I understand this stuff. It's like, why when do I do that? Yeah, that's true. Although I think if you're coming from WPF into Blazer it's a little easier because for a lot of WPF apps things have been async for
a long time. It's true, the very old stuff was probably still synchronous. But you know, and Windows Forms that's the one, right if you've got a Windows Forms code base and that's been your life, yea, all the stuff. Yeah, you've been thinking syncrasy for a long time. By the way, Rocky, we I think we say this every time we talk to you, but I did it. I'm actually not done yet. I'm working on a Windows Forms project for a friend of mine who's got a little
software company dealing with machines and stuff. So he's reading from data from an industrial machine that's doing something, spinning out some CSB data. I'm graphing it, doing some standard deviation and charting and all that stuff. And it's fun. But it's really been amazing, Like how how much I missed Windows Forms the designer and wind Forms is the anomaly. Yeah, right, like never to seems to be never to be repeated. This one one great designer that
we are are prone to measuring everything against. And I always say the same thing here is because it's pixel based and the world moved on from pixels into you know, everything else sort of flow based, flow based yep, yep, yeah, and we could just go back to pixels. Well yeah, you know, but no, that's not even true. I mean Windows Forms at the end, I guess at the end, what what end are we talking about? Yeah? Right, wait when it when it quit changing radically?
Yeah, it was twousand and five. Yeah, had the reflow capabilities and you could handle huge screens and little screens and all the things that HTML and xamble were designed to solve. And yet somehow Windows Forms did it in a way that was still dragons drop, still dragon drop. Yeah. That was old quote of yours about why w p F E was succeeding when w PF was struggling because his w p F E a k a. Silver Light was designed for the web and in the web development were used to lousy tools.
Yeah, so I'm curious as to what you did for Blazer in c s l A in dot Net eight, that was different for Blazer and dot Net seven. Well, the big thing there's there's several but but the biggest thing in Blazer eight is this new blended model with different rendering, right. So, yeah, and even the default template for a Blazer app. Now, the home page is a server static page. Uh, the weather page is a server static streaming page, and the counter page runs in web assembly
in the browser or server or both, or server or both. And yeah, but it's the only page with interactivity, and in all cases it server pre renders the counter page does, which isn't always obvious if you're especially in
a dev environment. But when you start trying to, for example, say that I would like to have some sort of consistent state within my app, you know, in prior to this point, your consistency state could always be managed in a scope service, whether that was on Blazer, server or web assembly, because your code was always always running within a consistent DEI scope dependency
injection scope. Well, now on a server static page, every time that page gets rendered, a scope is created and destroyed for the life of the page. Rendering that fraction of a second. And if your code is running on WASM, you get a scope for the length that you're running in WASM, and if you're running in a server interactive mode, you get a scope for the length that you're running in server interactive. But you think about that
counterpage. It server pre renders, so a scope is created, it server pre renders, then the scope is destroyed, then the page flickers because it switched to WASM, for example, and a new scope is created, and so any attempt on your part to maintain consistent state is just gone. It's very hard and until everything settles in. And I noticed this in the in
the basic web assembly thing. You know, if you, for example, put a button on the homepage and give the homepage some interactivity, that you could try clicking that button the first time you see it, but it ain't going to happen until web assembly comes down, and then you're going to get your on after render with the first render set to true and then now now you can use it well. And that's that comes just ignoring the CSLA aspects.
That's a UI design thing, right, and I think Microsoft in their template should have done a better job, like with the counter page of showing how you that button. The counter button should have been disabled until it becomes interactive, which you can do. But it's left. It's kind of like a math problem, right It's it's left to the left, up to the reader to figure out how to do this thing. Right, We're still trying to sort out how automode is useful right now. It really isn't because there's
an outstanding bug. This is a bug that I found and I went to report it, and I missed it by four hours. Somebody had added it as a bug, and then Steve Sanderson jumped in and everybody and they confirmed, yep, this is a problem. So if you're in automode, what's supposed to happen is youmediately should get a server side rendered you know, Blazer server interactivity. So when I clicked that button on the homepage like that I
was just talking about, you shouldn't have that. You should have that server rendering immediately, the server side code. But what ends up happening is it works just like the web assembly template, which is that nothing works until web assembly comes down, and then you get this brief moment of server interactivity, and then when you refresh the page, you're in WASM. Yep, ye,
so that's a bug that they're working on it, buddy. That'll just make it more complicated though, yeah, because it will go through three modes instead of two. Well you already have three, right, well, but a service side rendering for the very first page, and then you when WASM comes down, you finally get server, and then when you refresh, you
get WASM. This is the way it works. So the so I initially I wrote a blog post actually because I worked through a solution, a solution to this problem, which is if you ignore the WASM piece, it's actually not too bad because you can maintain an in memory cash. You have to figure out some way to have a unique identifier for the user, which I used a cookie with a guid right, pretty straightforward, and then you can
look up the user's state over and over again. Every time the scope gets recreated, you go back and look up the state and grab it, right, so the user can have consistent state across all these spaces. And you might be telling me, Rocky, you shouldn't have any global state. I'm like, well, in a business app, you have to. In a business app, you know, you've got to know the user's department or I mean there's just all sorts of stuff that you have to have, right.
I solve this problem, rocky by using a cascating app state component and you know, implementing that as a cascading parameter. And that seems to work really really well, but doesn't bridge to WASM and then back that's the question. Yeah, it seems too. If you mute, if you mutate the state on the WASM side, does it go back to the server, because I are you talking about having mixed So if you have one page with server interactivity
and one page with WASM interactivity, does it work across both? Yes, I'm talking about that default template where or maybe? So here's the thing I think, Carl, is when you look at this new render mode, I find it very compelling because most apps have a lot of pages that just show data and then some pages that are very interactive. And so the ability to have server static, static rendered pages that just do the show data part, I mean, that's so fast and simple and awesome, and I want that
and seamlessly. I want when the user goes to a page that's a data entry page, I want that to happen. Right, you want the WASM quick interaction effect well or server side I mean either way, but yeah, that's absolutely right. What I don't want is if you have a static home page and then you go to one that's interactive and I want to have to wait for websimily to download. I want that to happen behind the scenes. That's what this is all about, right, Yeah, hiding the big hall.
That's exactly what it is. Yeah, because I do think in the end, especially for a large line of business apps, you do want WASM because you want to be leveraging that client side memory and lowering the server lower. So it's obvious what the solution is for the developer. Don't use like per page or per component rendering. If you have state, well I would pick one. I would pick web assembly, which you're going to have that
bonk in the beginning. But then after web assembly is downloaded, it's cashed and all that stuff, and you've got your state or read my blog post Carl, and just it works, and now I built it into CSLA.
That's that's the even better problem. Yeah, that's what we're talking. If you're using CSLA, then all this this problem has been solved within the framework and hopefully at some point Microsoft solves it inside of Blazer, right, but in the meantime, you know, they the last I was seeing on any of the stuff on GitHub for Blazer as well, we might consider doing it for dot net nine and uh that stinks. So yeah, it's not going to happen soon. And gentlemen, I got to interrupt for one moment for
it was a very important message. Then we're back. It's dot in a rocks. I'm Richard Campbell, that's Carl Franklin. Hey, hey, and over there is Rocky Lock hanging out in the sun. Because that's unfair. I'm going to send some Minnesota snow to you Internet. Yeah, thank you much. This is the reward for empty nesting that you can just go. You know, what we could do is work from Palm Springs and right, as long as you got internet, life is good. Yeah, you make
it work. I appreciate the render modes and really overcoming these issues of how do we make this perform where we'll still all those benefits, Like it does feel like they're smoothing off the edges of the challenge of working with WASM, which is just this kind of hefty initial load. Yep, yeah, I mean they're doing, they're moving in the right direction. I got to say, it feels like the mixed render mode stuff in dot Net eight isn't complete. No it's not. Yeah, it is V one of what they called
universal right, yeah, exactly they were. There's the thing though, they were so excited about saying, now you can just sprinkle interactivity wherever you want. You want a little ASM over here, you want little server over there, and that's all cool. But as Rocky is saying, reek's havoc with dependency injection in any kind of state management. So I say, pick pick one web assembly or server, make it global, and use that for now. And and I totally appreciate that, Carl, I really do. But
I want it all. So this is what I've been Yeah, I want it all, and I want it now. So that, yeah, that that state thing was is one big issue. Another one is user identity being consistent across all of these render modes, and there appears to be I don't know if it's an intentional like feature thing, or if it's a bug. It's we've we've got some discussion on the Blazer GitHub about this. But sometimes well you can always use the authentication state provider in the UI, but it's
disallowed for some reason in library code. And so if you've got a DLL with business logic, in that business logic includes needing to know the user identity, which is no, it says it's not allowed for use. And so I actually have such a terrible message. It's terrible, isn't it all? Right? It's like, yeah, yeah, it's a it's a runtime message that comes up and says, yes, the service is not allowed in this
kind of text or something to that effect. Right, So you had to put some band aids around that so they can inject something that looks like a principle just for the requirements. Right. Well, actually, what I did is I created an abstract way to get at the current user that either pulls it from HTTP context or from the authentication state provider, depending on which one's actually available. I thought we weren't supposed to use HTTP context anymore. Well,
they changed the way that all works in Blazer eight. In Blazer six and seven you really couldn't use it because it wasn't consistent and or available. But now because of the way the server rendering stuff works. I want to say, I can't tell you why but you can actually use it when in the cases that you can't get at the authentication state provider, HTTP context appears to always be available and stable. Wow, yeah, it's it's rocky lock
Alazer. Gentlemen, He'll be here for another twenty minutes. Try to feel Yeah, but also these are things you know we'll have to revise after nine Oh, I hope these are. This feels like placeholder code. It's like, for now, we will do this. Yes, it sure feels so. Really, what you're saying is that CSLA eight, if you're not using it with Blazer in dot net eight, you're a fool. It sounds like
that. I like, I want to use this everywhere now. Well, I mean hopefully CSLA continues to be super useful for your other code too. But yes, I'm trying desperately to tackle these really big issues in Blazer eight. But I think you're also bridging the path for folks who've built with CSLA for wind forms. It's like, if you want to go Blazer, you can. Yes, yes, not a huge leap. That is exactly right.
Yeah, that's been forever. That's been the promise of CSLA, right, is you can switch youI technology geez with minimal and zero hopefully zero, but the most minimal change to your business logic and domain model and stuff. Yeah, and I appreciate that like this, You've done all this work to make a good domain model for your business, you know, but you do
need to change clients. That's the demand. Although I got to think the shifting CSLA to the cloud was not a trivial thing back in the day either. Well, but CSLA was designed initially from the ground up to be a distributed world or distributed tool, and so yeah, shifting to the cloud certainly like things like kubernedes, we did all sorts of cool stuff that became possible, but it didn't impact It had no breaking change, you know, Like
right, you didn't take a dependency that needed a VM anywhere. No, no to make it hard, you know, make expensive to run in a cloud. Everybody's existing code. You just could choose to deploy it in the cloud or not. And yay. Right, as an in app service, I presume app service and then ultimately containers and right, and then and then what we did do is add a bunch of cool features, for like routing to subgroups of containers that are running you know, you think about kubernetes.
You know, you might have some pods that are running on machines that have GPUs and other pods that are not and and so right, and so you want to wear cloth specific routing, and so CSLA supports that. So you can say, well, this n you know, this particular object, this class business class has to run on a server that has a GPU versus, right, you know others don't. So yeah, and you don't want to provision everything with GPUs because they're charged a ton for those these days, the
exactly are everybody does? That's great? Yeah, but you know that's really the cloud natification of c s l A. Yeah, natification. Natification. I love that word. You told me last week to make new words. I'm just following constructions, oh man. But I mean, isn't it amazing to think in those terms now that we literally need to route by workload requirement for cost efficiency? Right? I mean most people don't, let's let's be fair, right, but when you do, you really do. And having
that capability right yeah. Yeah, And same thing with this diversity of client it's like more and more choices for working on on these clients and and the advantages that they have. Right, Well, apparently Carl was just telling me that I can run CSLA on what was it an Oculus or what was that? Oh yeah, Quest three ques three right right right? Yeah, the android Maui. Yeah, yeah, because CSLA works great in Maui too. So there you go, go c s l A on a on a Quest
three. That's now I need to go buy a Quest three. You're going to be able to talk to she who must be obeyed about it. It's a business expense. It's a business expense. And beat Saber, but you know whatever, all right, you guys don't hate play games like you talk about the definitive VR game, Like the game it's Beat Saber. Just is it all right? Beat Saber? Yeah? Oh yes, I think I played that. You've seen it, the two lightsabers cutting things apart as they
go by. Yeah, that's right. Like, look, it's hard to find a good VR game. VR games are difficult. Most games don't adapt well to VR, like first person shooters is VR is a mistake? Man, that's like instant nausea, right, I mean, but somehow I my
current I got one of Oculus Rift or something like that. Yeah, it's quite old now, but I got it because Elite dangerous the spaceship right right, And I don't understand this, And you might know, Richard, why is it that I get instant nausea with like a first person shooter thing? Yes, but man, I can fly a spaceship for a long time and I never have any issues at all, no problem. I mean I have friends who are in the gaming industry who, when the VR thing came on,
worked on trying to fix games. The main problem with first person shooters is that you move way faster to first person shooter than is normal. Like you literally, like for a Call of Duty, that kind of game, you're running at thirty miles an hour because it's boring if you're not. And as soon as you put that in your face where the perception of speed is more relevant, your body is deeply concerned. Like it triggers things where you never have a sense of speed in space. It's not there. You're just
drew. You know, you're just moving. It's on the directional view. It's not actually effects of acceleration. And that's what's making a nauseous is your body believes it's accelerating that isn't getting the right signals to your balance center and so things you're poisoned, and so it tries to make you throw everything up. Hey, guys, I just found this while you guys were talking that that whole issue that I brought up about auto render mode looks like that was
closed. And I'm going to read from the lank and i'll give you the link show notes. Yeah, so it says Auto render Mode Improvements improves the auto render modes so that components are more response and have a decreased initial time to interactivity when web assembly resources are not already cased. So these are the improvements. Removes the time out for loading the boot canfig This prevents server interactivity
from always being used when the connection quality is poor. Introduces a limit to the maximum parallel web assembly resource downloads when an auto component initiates the startup of the web assembly run time. This limit is set to one and overrides any user specific limit and fixes an issue where the circuit sometimes remains open even if web assembly gets selected for auto inner activity. So there you go, they're working on it. Let's cool. Film at eleven. I'll go, I'm
gonna check it out and I'll tell you how it works. Well, like Sanderson's doing the reviews, so I'm in confidence level high. Yeah. Well, you know, I got to I don't know who the person is who did this particular work with McMillan, McKinnon, Buck mcmannon Buck. Yeah, but I'm looking down the reviews and I gotta think. When you get a comment from Steve Sanderson about your code and the comment is looks great, Yeah, that's gotta be a good dayne oh Man. Well and he's Sanderson thinks
my work looks great. Well, and he said, you know when I because he didn't, he wasn't confident that this was a real bug. So I went and published it to Azure and did the things that he asked me to, and he's like, yeah, that's a bug, guy, So we have to get on this right away. Nice. Yeah, so I'm happy to have contributed to this. Oh and yeah, the contributor is actually Microsoft employee too. Yep, So there you go. Awesome, that's real time work for a recorded show. I know, right, well, but
that is the thing, right. The Blazer team, and this is part of why I'm so happy to be involved with and heavily invested in Blazer is because of exactly this, right. I mean, they're just it's a very active group, very responsive to get HUB issues. Maybe not always responsive in the way that I would like, but they're not necessarily agreeing with you, but they are disagreeing with you in real time. And that's fine. You know. I do that with people that contribute or you know, come into
CSLA sometimes too. They're like, yeah, blah blah blah, and I'm like, yeah, that's you know, interest, I hear you, but it's not the right thing or you know, you gotta admit though. I mean, you must feel like Yoda sometimes when people bring things to you, a dark spot in the force, I see you. Well, you know. So yeah, just about a month ago, somebody contacted me and we
did some work. It had a really complicated, well have set of business logic, which is the I mean, CSLA should be perfect for that, and they built it with CSLA and this one page that was going through like all these super complicated rules and it could take a minute or two to finish and which is ridiculous, right, And so we were looking through this whole thing, and part of it was that Blazer was refreshing the UI constantly because
there were fields that were being changed, so we disconnected during this big process, disconnect the UI, right, and so there's no binding that sped it up by thirty seconds all by itself. Because the way that Blazer you monitors the background dom can it can And this is not unique to Blazer, Windows forms WPF. We've had this sort of issue forever where data binding can be
overly aggressive. Right. But then the other thing is that pretty much all these rules needed the user identity and they didn't want to cash the user identity because they want like they want admins to be able to go revoke your rights in the middle of using the app. Oh yeah, the customers love that. And I'm like, well, but couldn't you cash? Couldn't you cash it for like just ten seconds? Right? Can you give me some warning? So we ended up adding into CSLA and this is the thing, right,
So CSLA eight now, and this was not a breaking change. It's just like this transparent enhancement where you can turn on cashing for certain types and say I would like you to cash this user identity query and you know, for ten seconds and what Basically we went from one to two minutes to run this page down to like two seconds. Wow, wow between the just for a little bit of cashing, a little bit of cashing and stopping the UI
from data binding refresh constantly. Yep then right yeah, So I don't know if that makes me feel like Yoda exactly, but it man, that is I mean talk about satisfying when we were done with that. I just that gives you a warm, happy feeling, right, Yeah, especially for something around the survivors a perimeter create. Yeah, but I I love that sort of shirt duration cash taking pain away too, right, Like we're not doing
any voodoo cashing here. You're not going to wait for you deal with a lot of expiring and so on. It's just hey, this is going to get called a ton so if we hang on it for just a little while, we're going to save a lot of external calls. Yeah exactly right. Yeah, in this case probablybably one hundred or two hundred. I mean it was just amazing. Yeah, yeah, great worker, great solution. It is kind of a workaround, like it shouldn't be necessary, shouldn't be called
that much. But this code you can fix. His code you can't fix. Yeah, yeah, that's right. You know that's just bouncing act I just got asked to do a project in Blazer in Automode, and I said, you know it's broken, isn't it? And the guy wrote back and said, no, they just fixed it. So that's how I found it. So there, I'm really anxious now to use this project now that it
works. If it works, do you think they fixed it in eight one hundred or whatever or two hundred whatever version just came out this week or yeah, I don't know. I don't know, but I know that Visual Studio there's an update to Visual Studio which we'll bring down the latest stut net. So I'm hoping that it's fixed. That's a solution. Yeah. So I feel like all we've talked about for CSL eight is Blazer. Is there any thing else that's important? I mean eight is faster than seven, but I
don't know there's much for CSOLA to do there. Yeah, that's the interesting thing is yes it is. You know, there's so many better things, but they're automatic. There were very few maybe no changes. I'm trying to think. I mean, I've been cleaning up the code, you know, as I go in to do some of these other things. You know, a Visual Studio keeps coming up and going, hey, there's this new language feature you should you know, Yeah, I think there's a lot of older
C sharp in that code base that could be quote unquote modernized. Not that it's broken, just that there's new language features and so. But you know that doesn't break anything unless you do it wrong. Well, but see, I just I hit what do I hit? Control? Control period and let the refactor thing do the refactoring and nice, you know, but I do have to say there's a couple well one in particular, it keeps one I need to collapse simple if else things down into uh you know, the statement
question mark block. I don't like that either. Oh I hate that. You know, that is readable one step too far from readability for me. And I agree there's a whole lot of old C programmers that are like, no, that's the way to go that way, And I'm sorry, but I disagree that's you know, you can I said this before recently, and this is something that I've done when I'm writing for a customer and I'm working
on their code and they don't understand it. You know, I would take like a link statement and ask chat cheapt to explode it into four nested four loops with comments and then leave that as a comment in the code, so somebody who wasn't familiar with that syntax could actually see what's going on and you can understand. Yeah, that's cool. Yeah. Are you seeing chat chept
for anything basically what you're talking about? That sort of thing? Yeah, you know, I mean it's I guess I use it constantly and don't actually think about it because it's like intell a sense on steroids, right. I don't often just ask for stuff, like, you know, go to chat GPT. I rely on copilot that's built in just to be helping me out and and it is helpful, it is. I sometimes ask chat GPT to make copilot code better. You know, is there any way to make this
better from a non coding perspective? You know, I play tabletop role playing games, and so I have been using well, actually I suppose it's not
really chat GPT. It's more dolly, isn't it, but creating various graphic assets to you know, liven up my uh some of the gaming and and uh I have started dabbling though by by providing love that providing the historical background of my world because we've been playing in the same world for you know, like thirty five years in real time human time, So upload the historical background of the world and then asking it to like write poems or create a legend
about this hero or wow. And it's fiction anyway, so it doesn't have to be perfect any respect, save the feel. And I'd love that pretty amazing. Actually, if you want to play a fun game and you don't have anything to do for the next ten minutes, good five minutes, good at chat GPT, and ask it to create a picture of something food, right, whatever it is, you know, describe some food and it'll give you a picture and then say, okay, now make it look more delicious,
and see what happens. And do that three or four or five times, even more delicious, even more delicious, and you'll be surprised at what you get. Does it get better, does it get horrifying? No,
it gets It's just more of the same. So if there was a guy in New York who did this with a bagel, you know, give me a bagels and locks or something like this to phrase marketing, Okay, now make it more delicious, and it just piled on the stuff and he kept going until it was like you know, a square meter of meat with two to that's not more delicious, that's just impossibly filling. Yeah, it's fun though, you know, you can do with anything. It's like they get
more hot Carnegie Delli disease. Yeah, you could just say make it more and then your favorite adjective and see what it does and then keep going. Yeah, then go excessive, Give me a puppy, make it cuter, make it more cute, more cute, more cute. Seven story puppy is cute as puppy of all. Oh yeah, the eyes will be as big as plates by the time you're done. Well, this has been a lot of fun, Rocky, What's next? What are you working on now?
Well, continue to work of course on on CSLA and that sort of thing. And I'm working with uh, well, what was x Spirit We just renamed zbia and in that context primarily doing cloud modernization type work and get up migrations and all sorts of cool stuff like that, and so that's pretty neat and but yeah, for for me, you know, I just continue to really be enjoying myself with with Blazer and dot net eight and and oh, I guess the other thing that I am working on and got a new person
to jump in and help. Is a humanitarian toolbox Project Nice. That is a kid's I D kit that has gone through several iterations thanks to changing web and mobile technologies. Right right, the current incarnation is actually a Blazer MAUI hybrid. Cool, and I feel pretty good about Mali program, liking it a lot. So that's how I only do Mali apps now unless I have
to hybrid hybrid. Yeah, it's more consistent. I don't know what you think, Rocky, you're still in xama Land sometimes, yes, I well, I think for unless you're If you're trying to create something that is has to be really like native iOS versus native Android feeling, then the Blazer hybrid is not the way to go. But if you're trying to create something where you're mostly concerned about having consistency, I don't care if you're on an iPhone
or an Android. I want the app to work the same way and I want to be able to contain the cost, then I think the Blazer Mali hybrid is fantastic because it gives you a pretty darn efficient from a developer cost perspective, way to create an app that runs on and not really just iOS and Android, but also it can be a Windows and MacApp also, and so it's quast three. Yeah that's true. I hadn't even thought about that like that. Yeah, all right, we got to run. I got
another show to do here. So thanks again, Rocky. It's always great catching up with you. Thanks for being you. It's a pleasure, I mean, thank you all very much. Trade to chat with your friend. Okay, we'll see you next time on dot net rocks. Dot net Rocks is brought to you by Franklin's Net and produced by Pop Studios, a full service audio, video and post production facility located physic in New London, Connecticut,
and of course in the cloud online at pwop dot com. Visit our website at d O T N E t R O c k S dot com for RSS feeds, downloads, mobile apps, comments, and access to the full archives going back to show number one, recorded in September two thousand and two. And make sure you check out our sponsors. They keep us in business. Now go write some code, see you next time. You got jamdavans and
