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