How'd you like to listen to dot NetRocks 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 will get you that and a special dot net Rocks patron mug. Sign up now at Patreon dot dot NetRocks dot com. Hi, this is Carl Franklin.
And this is Richard Campbell.
We've got two special shows coming up soon, episode nineteen ninety nine and two thousand.
For episode nineteen ninety nine, we're collecting people's y two k stories what did you do to help the Y two k event not actually happen?
And for episode two thousand, we're going to be sharing stories about how dot net shaped your career.
We have a special page at dot netroocks dot com slash voxpop where you can record messages for us that we can play on these special episodes. So tell us what you did for Y two k and what dot net means to you, and of course how long you've been listening to dot net rocks. So go do dot NetRocks dot com slash vox pop now and leave us a message before the thought of operates like whiskey left in a glass overnight.
Do it? Hey, welcome back to dot net Rocks. I'm Carl Franklin.
An Amateurd Campbell.
Daniel Roth is here. Holy crap, hooray who the asbnet guy, the Blazer guy. I We're gonna introduce Dan later but formally. But Daniel, we do this introduction and feel free to just jump in. It's okay. Our listeners have told us that they like that.
Give me a signal you want me to actually say something or.
No, no, no, no, you just jump in when you need to. This is episode nineteen ninety six, and as promised, here, let's talk about the things that happened in that year, nineteen ninety six.
All right, so any favorites.
Yeah, Well Bill Clinton defeated Bob Dole, the guy who liked to talk about himself in the third person.
Nice his re election, Yeah of course.
Yeah. So some really bad stuff happened in nineteen ninety six, the major tragedies and aviations and shooting and terrorism, but there were some scientific breakthroughs like Dollia's Sheep and Taliban rose up to power. Let's see in Afghanistan. Yeah, Afghanistan, the helicopter collision in Israel, Port Arthur massacre Tasmania thirty five people, and that triggered sweeping gun law reforms in Australia which have pretty much held held fast.
Yeah, they didn't until just recently. Then there was an incident at the Bondi Beach.
Right, But they went for a long long time without having ay having any incidents. John ben a Ramsay little girl, six year old pageant queen found murdered in Colorado. Dolly the sheep first mammal clone from an adult cell by scientists in Scotland, twa flight eight hundred crash Boeing seven forty seven exploded off Long Island. I remember that it was taken off.
Yeah, a lot of conspiracy around that one, but we eventually proved that it was a problem with the wiring in the center fuel tank what was empty and it exploded and blew the nose off the plane.
Yeah.
And the Centennial Olympic Park bombing pipe bomb exploded.
Because it was also the Summer Olympics in Atlanta.
Summer Olympics in Atlanta. And that guy they thought they had the right guy, I can't remember if he ever got arrested or whatever. But yeah, and speaking of Scotland, the Dunblane school massacre. Gunman killed sixteen children in a teacher. It just wasn't a pretty nasty year for that grim year.
I mean, I can point in a few more positive things going on. The Motorola Startack phone came out, the first really popular cell phone.
Wow, the cool phone, the star Attack Yeah, okay, that's cool.
Yeah. Also the pom pilot. This was the first, the first you know, productivity device, the pomp pilot. Right on the space side of things. Seven Shuttle flights this year, three two of which go to to mir because they're now bringing astronauts up to mer and they're doing your six month shifts and rotating out. The rest are mostly have experiments. Most notable in November Columbia not going to miror because Columbia couldn't get to Mirror being slightly heavier.
It broke the record for the longest mission ever seventeen days, fifteen hours. It also had the astronaut's story Musgrave on it. He was one of the principal guys behind fixing the hubble and with the flight on Columbia, he was the only astronaut to fly all five shuttles. Wow. I had a chance to meet him once. He was just an amazing, amazing guy, really brilliant. He was doing a presentation for
a conference that I was involved with. You know, he's the guy who fixed thehubble, right, So he goes into the presentation and before he start, everybody's waiting for me's about to start. He gets off the stage, walks up to the projector and starts twiddling. We was just sorry, I really care a lot about focus.
That's great.
Well, I laughed. I thought that was hilarious. I don't know that anybody else knewed it was about Yeah, that's staring mys gram.
That's great.
One other space thing. The last module mirror the Purorda module, which was an earth sensing module partially funded by the US that had been sitting you know, at this point the Soviet Union's collapse, the Russian Federation is very financially restricted. So they had built this module and wasn't quite done yet, and so this was very much an international thing. The US kicked in some money. There were experiments for a
bunch of different nations, and so it was his research module. Yeah, and then commet hayakud Hayakatake, detected by a Japanese astronomical student in January, made a very close pass on Earth in March, and just a it was just a reminder back then that we don't have good eyes on what's
out there far out, you know. And the big difference, big difference from between us and the dinosaurs is the dinosaurs didn't have a space program and so you know, if the comet had was headed for Earth, we only had two months notice, like, there was probably nothing we could have done about it. But as it was, it made a close flyby, was spectacular. It's a very near thing on the web. The population of the web, but that points about thirty six million users. This is nineteen
ninety six, we're just in the beginning of it. It's also the year that was figured out that there was more email sent than physical mail, which doesn't seem like much of accomplishment today, but it's kind of a big deal at the time. This is the year that ICQ was released, right, sort of beginning of a whole messaging wave of things.
Yeah, USB, univers verssal Syria Bus, the first prototypes are out then, along with Microsoft makes direct X for the Win nine X stact.
They also released NT four and I E three.
Somebody told me once and I couldn't believe it that Windows XP didn't support USB.
It well, it was me.
It wasn't until Windows two thousand.
No, No, it was not until Service Back two.
Oh that's what it was.
Yeah, So the original release of XP did not have support for USP, but they had service Back two they added it.
Just hard to believe, I thought, Op, it was like the whole new generation.
Are memories of XP are posts SPA two. Yeah, we made fun of XP when it first shipped. It was nt two thousand with the Fisher Price interface. Right, it was all per three and colorful and cute, you know, it wasn't that shiny.
And it had profiles. I think that was the big deal too, Like you had a different profile to swap them.
Yeah. Amazon releases Alexa, the first one of the first voice modules.
In nineteen ninety six United States. Are you kidding?
Yeah, it isn't good, but they come up with it, huh. Over at Sun they released the Javit Devil look at one point. Oh and then in gaming, three fairly famous popular games Duke Nukem three D it's time to kick ass and chew bubble gum. But I'm all a lot of gum and from Blizzard Diablo, which was a overhead view proportional sort of dingon Dragon's Game, and Loercroft tomb Raider.
Big deal that one, Yep, that one, And that's all I got for you, friend. All Right, I'm going to go back to culture.
Here.
The top ten albums, Top ten selling albums. Number ten Older by George Michael, the singles I don't recognize any of these, but Jesus to a Child, Fast Love, Spinning the Wheel and Older. I guess I wasn't listening to George Michael back then. I don't know a Number nine Backstreet Boys International debut, Quit Playing Games, Get Down and Anywhere for You Load by Metallica, a number eight, twelve
million copies. Singles Until It Sleeps, Hero of the Day, Mama said in king Nothing Tragic, Kingdom by no doubt, awesome, awesome stuff. Don't Speak, just a Girl, Spiderwebs Sunday Morning, Lance Morrisett Jagged Little Pill. This was released in ninety five, but it had massive nineteen ninety six sales. Yeah, thirty million plus lifetime You ought to Know, Ironic, Hand in My Pocket, You Learn huge album.
Yeah, it's just one of those ones where every song is good. It's a crazy album.
Yeah.
Yeah. The Fuji's album is the score. That's where killing Me Softly Lauren Hill right ready or not? Fuji la I liked that stuff. Tony Braxton's secrets You're Making Me High and break my Heart. I Don't want to Matchbox twenty came out with Yourself or Someone Like You and their singles were Push, three Am, Real World and back to Good. Spice Girls came out with their album Spice singles want to Be, say You'll be there, to become
one and who do you Think You Are? And then the number one album Of course this was released earlier, but Celine Dion falling Into You with over thirty two million copies. As singles are because You Loved Me, It's all coming back to me now all by myself and call the me in all right and really quick. The top ten movies of nineteen ninety six number ten, Jerry Maguire, number nine, Breaking the Waves, number eight, The People Versus
Larry Flint number seven, Shine, number six, Big Night. I don't remember that one, but it looks like a period piece. That looks pretty good. Number five Train Spotting, Great Movie, Number four, Secrets and Lies number three, The English Patient number two, lone Star, number one Fargo, Fargo Awesome. Oh yeah, don't you know. I think that's where people were really introduced to that, you know, Minnesota, that accent, Yeah, south North Dakota. Almost Canadian, isn't it?
Well? Yeah, in that part of Canada. Yes, yeah, it's all all right.
Well that's what I got, So I guess we should get onto better no framework.
Right, awesome? Apart man, what do you got?
Our old friend Simon Crop, Simon, what have you been up to? He's got this tool called Delta, which is an approach to implementing a three oh four not modified return leveraging dB change tracking. So the approach uses a last updated timestamp from the database to generate an E tag header right, and all dynamic requests then have that E tag checked and or applied. The approach works well
when the frequency of updates is relatively low. In this scenario, the majority of requests will leverage, the result in a three oh four not modified being returned in the Brew as are loading the content in it's cash nice and effectively, consumers will always receive the most current data while the load on the servers reduced.
He just it's clever.
You know, this stuff just pours out of his brain.
Simon, Well, it's okay, clearly he's dealing with the problem. It's like, how do I get brown performance there? Yeah, it's like we'll stop hitting the database that unnecessarily when nothing's changed.
Yeah, So that's what I got for him and for better no framework. Who's talking to us today?
Richard grabbed a comment off of Show nineteen oh three, which back in June twenty twenty four with our friend Beth Massey talking about Maui and Blazer fun conversation. You know, certainly, you know the many UX choices. In fact, do we often get comments along those lines of just how many user interface frameworks Microsoft makes much less the rest of the ecosystem.
And Moyd had had hot We did that at Build that show, right, I don't remember. Yeah, I think we were alive. I mean we were in a little huggy a couby it.
Builder in the booth. Yeah, yeah, it's possible about the right time. So this comment comes from mooid Hatat, who said I've been using neo vim with dot net via PowerShell on Windows for over a year now. Although it as a step learning curve, once you've developed the messle memory, you can seriously enhance your productivity, so another approach to it. Neo Vim's been around a long time. Additionally, I've started using terminal more frequently. This is what jumped out to me.
You know, before we were really you know, dealing with agents and stuff, already folks were starting to go down this path, which has introduced me to many terminal based tools I wasn't familiar with before, such as zoxide, PS read line, I know that one well for working PowerShell, JQ, lazy, get, Yazzy, and bat. These tools have greatly improved my workflow, not even more productive. But most of these tools are open source and cross platform, providing me with opportunities to contribute
to open source projects. Since their cross platform, I'm not tied to any operating systems anyway.
I think we can blame the Linux people for getting us all into command line interface.
Right well, and I say blame there's certain you know, you know, with love, Yeah, well we say that with love exactly. But also we came to appreciate the fact that infrastructure's code automating deployment, like all these things are better done in command lines. And now you know the conversation we just had with Kathleen about going CLI first.
Now that you're working with these variosations and things again command lines and so I'm seeing a lot of software built now where you just working from the command line with it calling it out and it's rendering on that you know, eighty twenty five kind of formats and so forth. So when I saw my AIDS comment, I'm just like, you know, you may have been prescient, my friends, like you were doing stuff before the rest of we're going, Yeah, that's kind of cool.
When you get it down, like it's way faster than going through guy's and things.
I mean, I totally agree, yeah yeah, And now you know, the old days of arcane slash commands and so forth, it's just not that big a deal, right, Like we've sort of gotten better with all of that. We have better interfaces, better way to manage it.
So now you get your lms to write your command line tools, right.
And that's the other part of it, as long as it's discovering plus PowerShell yeah, So Waite, thank you for your comment and a copy of music. Co buy is on its way to you. And if you'd like a copy of music, go buy right. A comment on the website of dot net rock so commoner on the facebooks and a coupleish every show there and if you comment there and ay real on the show, we'll send you copy of music.
Go by Music to Code by twenty two tracks of focusy Goodness, twenty five minute long musical tracks. See you stay work focus Yeah it is now that will help you stay stay in a state of flow.
Go to music to Code today.
Yeah, I'm not very focusy obviously. Go to music toocoby dot net and you can get the collection in MP three wave or flack formats. Oh my god, we're finally around it. Dan Dan dan Roth. He is a principal product manager on the ASPNAT team at Microsoft, specifically working on dot net web development with Blazer. It's a pleasure to have you back as always.
Hello, it's great to be back at Carl herryt welcome friend.
Yeah, no, good stuff. We want to know, I mean we if you were paying attention around dot net comf you understand what happened in dot net ten. But maybe we should just before because I want to get to the good stuff coming in dot net eleven. But maybe you should sort of recap what dot net ten gave us for web development in general and Blazer in particular, just maybe, you know, I.
Mean, we were just shift dot net ten. It's only like well like four months old, like it's still new. It's still still pretty hot. I think it's really hot. It's like that warm loaf of bread, and you know, it's still filling the room with all those delicious aromas.
And but no, I point out that, uh dot net eleven, Uh uh release two is out too, Like it's not like you guys are stopping.
Nope, never stopping. Every year, every year there's a new release. Yeah, we just shipped in eleven preview two earlier this month, and there will be another preview coming up here pretty quick, and uh the next month for preview three.
So in part that already, Daniel and I did a Blazer Train episode recently about why you should upgrade your Blazer projects to dot net ten. So if you're interested in that, I think we should put a link in the show notes to that.
We will do that.
Lots of good stuff and done it. I mean obviously the latest long term support release.
So you've got.
The new another three years of support with dot net ten, and it's just loaded with good features. I mean in the new sea Sharp features like the new extension members and extension properties. File based apps, those are super fun. You've tried those with like your AI agent, like getting them to generate just little c sharp kind of like the little c sharp scripts. Almost right, it's a single file that you can just dot it run and I think the way you go, no, no project file needed.
Lots of great run time improvements perf perf oh Man. I love watching Tobes dot net com recording where he's just like showing all these amazing marks of how much we've reduced allocations and increased performance, right, and that goes all all way up and down the stack, like he's showing like low level run time things. And for library improvements.
And then at the ACE core layer, we did a lot of work on the memory pooling so that the memory pool can be can can shrink in size, can be released for like real high scale UH, the deployment scenarios better adjacent de serialization for your for your APIs. You have lots of perof across the stack. That's kind of just part of our culture. Like every release has to be faster upgrade you get speed.
And you watch Stephen tub his his presentation if you want to know the nity gritty, but you could sum it up just by saying it's faster and he uses less memory, much less memory.
Just that's same code and it's faster. That's that's what you get.
So that just by migrating you get a performance proof.
Yeah, absolutely definitely, and man reduced memory UH footprint as well as was a big win I think in the UH in the dot net with the on a ten release with the improved garbage collection system and then an acemic core like we did like a whole bunch of things, Like we did lots of observability improvements, so lots of new metrics and tracing Like Blazer, we added a whole
bunch of Blazer specific metrics and Blazer server traces. Like Blazer servers has a sort of unique request pattern, right, We've got these long run, long running web socket request which means that when you're trying to like look at your page navigations and things like that that would normally appear a separate requests in a traditional web app, you know,
it's hard, they're harder to see. In Blazer Server and dot on a ten, we added specific activities so to model all that, so you get a really nice activity trace through through what's happening in your Blazer server apps. We also added like a bunch of Blazer web assembly diagnostic tools so that you can like get CPU profile performance profiles from your Blazer websmity apps take memory dumps to track down those hard to diagno those issues, so that all got in.
Yeah, yeah, excuses.
Just upgrade and if you haven't tried already, the get up Copilot app monetization tooling for doing those those upgrades, like going from version to version, like AI will just handle it for you. I mean, it's it's generally not a very cumbersome process. In general, you should mostly just update the DFM and update your packages and you're done.
But if you have a really big solution you just want AI to to deal with it, then get up Copilot app Monetization is built specifically for dealing with that.
Yeah, very good, very good there, and there's no upgrade issues, right, Like if you're living on eight and you switch to nine or come up to ten. I don't expect any code to break well the.
Usual the problems are third party tools that don't support dot Net ten yet, or you know, have different syntax going from one to another, or you know dependencies. That's usually the problem, and the c sharp in the code is never the issue for me.
We keep a very high compat bar, like we take compat very seriously. I often think of combat as like it's our most important feature because you're taking a bed on a platform, and why do you do that? You do that so that you can just accrue value with every new dot net release, Like I just upgrade and I don't even have to change code, and I get that performance, I get the improved security, I get the new features, I get new c sharp without changing a line of code. And I can't just upgrade.
I don't get that, yeah, without anything breaking.
So breaking changementally well, because the.
Chances I have cycles to go back and fix existing code or low right, Like that's that's hard, I'll just stay on the older version absolutely.
I mean, I'm sure there are some breaking changes that happen with every release. We try very hard to non introduce some of occasionally there are some cases where we feel like for the good of the platform, we really do need to make a change here, And you can of course find all those documented in the dot net
breaking change stocks. The app monetization tooling is aware of those breaking change documentation, so we can actually help you adjust code, and if you are actually touching those those places that got changed, it can help you with the with the addressing those breaking changes as well.
Right, I mean, these days, aren't you just pointing your agent at it and saying, should it what's the consequences of upgrading to ten?
I should have says none, just gone, it's fine.
What is this consequence?
Thing? You speak? Yeah, then it explodes and you're like, why did this explode?
Oh?
You're right, You're right, You're absolutely right.
No, no, no, no, not at all. Maybe on some other unnamed developer ecosystems that happens when you're upgrading, but not that.
I think. I think I asked you that question on Blazer Train. I said, so, when would you ever not want to upgrade? And you said, what are you talking about? You always want to upgrade?
Yeah, he might be a little biased our for our friend Dan.
You know, he's maybe a little bit.
A little bit.
Yeah, well, like I said, you know, if you're using a third party tool that doesn't work or for some reason or the syntax changes, that happens a lot, you know. But you know, you get all the latest updates for all your packages and hopefully they work. But usually it's the ones that don't load or have different syntax that's the problem.
Yes, or maybe you have an environment constraint. We're getting the new runtime into your environments is requires going to some I person and getting things signed in triplicate and stuff like that. We understand that people have their processes that they need to follow, and that's perfectly understandable. But if you can upgrade, I think you will be very happy.
Yeah, like you said, at the minimum performance benefits but also great new features. Yeah, it's just annual cadence tough on the team, Like, how do you know, I know folks are struggling with trying to use upgrade at net every year. Yeah, I don't know how it is for you guys.
I think it's kind of a mix. Actually it's a struggle. I don't think it's a struggle for us to get a release out every year and we do know that we have users that also that even that, like you said that that pace is maybe even faster them. That's why we have the long term SUP releases and the standard support releases.
From want of way, lots of folks that are every other that just take the LTS.
It's not that it matters, but that's what those are there for. I think the struggle is actually more the opposite is like, you know, things just are accelerating right now, like like AI is making development faster and more productive, and you know, getting value to our to our users is something that we would like to to to speed up.
But at the same time being you know, sensitive to and cognizant of the fact that you know, the platform needs to be a stable, you know, trustworthy thing, Like it's not something you actually want to be moving around a lot or changing a lot. You want it to be a sure foundation that you build your stuff on
top of. So there's this tension right now of like, oh, like, well, we can do more right now by leveraging AI to help us develop features and and you know, burn through our backlog and quality and all these things, but still only shipping on that yearly cadence kind of creates a you know, we have to we have to wait a little bit then to get some of those improvements.
That's so, that's funny. I was thinking there's got to be features that take longer than a year to build too, but I don't know if that's true.
There are those as well. Runtime asink I think is like an example of that.
Oh my goodness, yeah, sharp Union's that's not the that's not the Blazer team. That's the team trying to move stuff what is it out of runtime and into or out of language and into runtime.
Yeap, out of the compiler.
Basically, I don't envy that battle. That's a big deal at that battle, have you guys.
So that's a big effort for eleven right now is working through runtime asink, and a lot of it will land in eleven so you can start using And I think though the full story is probably a post eleven feature, a lot of the runtime features are kind of like that. Like another effort is the like the web assembly runtime consolidation effort. Like right now, our current websmity runtime for
Donna is based on the old Mono code base. We're trying to consolidate all of our runtime implementations to be based on course, you'll are the mobile workloads have already been working on that for a while. Webs somebodies of sort of the last one in the line to top that upgrade. That's also a multi release effort. Like a good chunk of the Blazer team right now is actually working on getting the new COURSELR based runtime stood up.
Well, because you guys care about wows and more than just about anybody.
Well, I was gonna say, do you does the ASPNT team core team push changes in the language? Does that happen the other way too?
Oh?
Yeah, have you come to the language team and say hey, we need this feature all the time and then they come back and yeah, that's.
Definitely Like I'm well, a lot of the minimum API development experience and how that works, oh involved like working with the compiler folks and getting specific language features in to make that experience really good, and the infrastructure around it. You know, a lot of the stuff that was done around source generators was done heavily in collaboration with the ace minut core team for a lot of our scenarios like Razor and Razor compilation was one of those, but
not the only one. There were others as well. Yeah, I know that. That's one of the benefits actually of that stack is we can all we have this very fluid communication with across the stack, with run time frameworks, libraries, languages, app models, tooling. We kind of own that all together and try to deliver a cohesive in and experience.
How far is the walk between the Aspnut building and the c sharp Well.
So a little I took his button on Microsoft Teams and I just thought, well, okay, share the speaker, Hey toad, Yeah.
Are you guys all in twenty five when you are on campus.
I'm actual pretty serius. A lot of us are remote and spread across the world. The folks that are here in the what I am in Washington. I'm in the Seattle area, and building Building eighteen is where a lot of us sit these days. We're going through our turncuse.
It's near like a two days a week in the office or anything like. I don't know how that works.
Three days a week is what we're just transitioning to now for books that are close enough to the office to do.
Yeah.
Yeah, we get to see each other in person.
Yeah, yeah, that's cool. There's merited that, but at the same time, it's like you've got pretty good workspaces at home, now, like where are you most productive?
I know it's a it's tough, so I can tell you there are a lot of people with mixed feelings about it. I'm sure, yeah, but it'll be fun. It'll be fun to be able to you know, be in the in the office, to have those hallway chats and and all that, but still having to do teams calls because a lot of our people are are still remote, like a lot of the yeah I work with on Blazer and in Europe or in Prague, and we've got people on the East Coast like they're they're all over
the place. So we're definitely a distributed team.
That's cool. Yeah, it's just the nature of the beast. You're never not going to have the teams call on Yep, the chance of everybody being there.
Everyone's pretty much hybrid, and you're gonna want it anyway, right because who wants to like take notes there?
Yeah, we got we've got tools for that. You just have to turn them off, yes, exactly. Yeah, it's fair.
Sounds like me trying to get all the horns to come to rehearsal at the same time before a gig, it's like pulling teeth.
They can't do that remote now they can't know I mean on over there. But yeah, I'm pretty sure. Did I say that out loud? I'm sorry, I take it. We should take a break.
Yeah, let's take a break. It's a good time and we'll be right back after these very important messages don't go away, and we're back. It's dot net Rock. So I'm Carl Franklin's Richard Campbell, Hey, and that's Daniel Roth and we're talking ASPNT core ten C sharp and let's talk about dot net eleven, the future, the future.
What's coming down. Yeah, we're hard to work at Donna at eleven. Already the team is is already delivering new features. So PREV two is already out, and we have published our roadmap for acep core, which includes Blazer for for donin at eleven. You can find that on in our GitHub repo. It's just a get up issue if you want a short link aka dot ms slash acep net slash roadmap, and that's where you'll find it. And there's kind of like four high level themes I would say
to what we're focusing on this year. The first one is pretty broad. It's just like you know, addressed top pain points and uh and and feedback that we have in our repo. So everyone who has your your favorite issue that's sitting in the a spit core repo that you really want addressed, that's been there for a while. We look at, you know, all those thumbs up reactions
on the original posts. We look at people commenting and telling us that this is important, and we're trying to really push to get those into the stack, even some things that have been around for for a while. So things in that bucket, Like one of the big ones is we're finally going to do a sync validation in asp net core. I think we've had that one in the backlog since I've been working on the stack.
Wow, are you saying validation is synchronous?
Got framework?
It is? I know a lot of people you got to wait to push the button before you can get the validation. I think that's what you're talking about.
Yeah, well, I mean you want to check your username to see if it's already taken in the database and things like that. So people have been using things like fluent validation and other third party libraries to achieve that for quite a while, we've we've decided that there's been enough people complaining about this that it's finally time to
go do it. So we're going to do it for minimapis, we'll do it for for a Blazer, and we're actually working with the Core libraries team to push this down into like system component model data annotations and the core abstraction layers, so that ACINC validation now becomes a first class feature across the stack. Yeah, involves a lot of work again on compatibility. Like we were talking before, we care a lot about compatibility and a lot of people
use those abstractions. So making sure that when you know code with ACYNC validation logic now shows up in the graph that we have good reasonable behaviors, good good compatibility story for how that will be will be handled, and then up in the app model layers like in Blazer, you know, providing you with the ability to provide the right user experiences when you know validation kicks off and now well it might take a little while while I go talk to the database to validate what you're doing,
that you can provide a user experience to say, hey, hold on a second, I'm checking that that input here's a little spinner or something until the actual validation input comes comes back. So yeah, ACINC validation was the top requested feature. So we're gonna we're gonna take a look at that. And there's a bucket of those, Like, there's a lot of them that are in the stack.
That and do you do that validation through the existing c sharp ACINC or are you hanging in for runtime ACNC, Like where does that play?
It's I mean runtime ACINC I think, just takes the existing acc model and makes it effectively more efficient, Like it takes of the what the state machine being generated by the compiler runtime ACENC moves that into the run time itself, which should dramatically improve performance for people that have acinc code today. So this just means you use the c sharp ACNC coding model to write your ACINC validation logic and then it gets even faster thanks.
To and your expectation is once it gets when the runtime acinc becomes real, it'll just run just better.
Yeah that's exactly right. Cool yep, so big bucket up.
Just as I remember, I remember I was having a conversation with Andrews about a sink back in the day, and this has got to be a decade plus ago. It's like, well, I have control of the language. I could get that to happen here. We could get it to happen in the runtime. Ye like that that used to be the way. It's it's nice to have everyone working closer together on these kinds of problems. That and
and ACYNC became a hit. I don't know that he knew at that time, Like there's a C plus plus inmvalentation of a sync now.
Started a wave movements when it hit.
When it hit JavaScript, I was like.
It was the right syntax. You know that people could dig it.
When it hit JavaScript, I knew, Wow, this is way bigger than way bigger than we thought.
So we also have a bucket of fundamentals work so again purpose part of our culture, some more performance improvements, security focus. We do added Pasky support and ten for acemic Core applications for folks that are using acemit core identity.
We have a number of follow up items there that we want to do to flesh out the user experiences that are enabled more observability, some more tracing diagnostics, and we do a lot of that work in collaboration with our friends on the Aspire team, so you get that awesome experience in the Aspired dashboard and open telemetry based monitoring of your application. So we'll continue to push on
cross cutting fundamentals. Our primary investments will be in our what we think of as our modern stack in ACE net core, so think like minimal APIs blazers are recommended. Webi offering minimal APIs for API development signal R. We still of course love and support our NBC developers and our Razor Pages developers and people building API controllers, but that's not really where we're like investing.
You're not innovating.
Yeah, that's not where we're trying to optimize. But you can feel good your apps will continue to work and they'll get all the other benefits from the platform improvements. You'll get c Shark, Clipteen, and you'll get all those performance improvements.
But for the app more, it seems from your attitude that people get really persnickety about that, Like do they complain to you, It's like, so what are you killing MVC?
Oh, they get nervous, I mean they want to know that they app we're gonna you know, stop working in the future, that they'll still continue to get dirty update.
Like they're just gonna fall down, right, you know, Yeah, well burst into flames.
And the support, like the support matters, Like you want to know that security fixes are going to keep coming coming your way. Yeah, of course, Yeah, And I think we have I mean, we have a There's been certainly some cases in the past where Microsoft has you know, caused people pain, you know, the the he who should not be named silver Light situation for example, you know, things like that.
Yeah, to be clear, there's one scenario and people are still upset about it.
Yeah, that's the only scenario really, and it was and it was the right call by Microsoft.
I might say it was the right corption. I would say there were better ways to go about doing the right thing.
Yeah, well their hand, their hand was forced, and.
I don't disagree.
Water under the bridge at this point.
But Blazer.
Doesn't matter. The browsers moved on, it wouldn't matter anyway.
Yeah.
I think it's really funny that people, a lot of people were asking me about like, how do I know Blazer's not going to be the next silver Light? Even today they still asked me that.
Yeah, you still do me too.
And I think it's ironic that the same websamby runtime that we use is actually used by this community project called open silver, which is a reimplementation of silver Light but based on our webssembly runtime. So you can still run silver Light apps in a browser using the runtime that we built for Blazer. So no, Blazer is not silver Light, but it helped, I guess, resuscitate it in an open source way.
If you really want to run that code, if you really want it, you can do it.
Yeah. Yeah, And we did shows with the open Silver guys back in the you know, as silver Light was finally coming out of support. I think it was twenty twenty one, you know, we were they they got done in time. I just don't know how many people actually were still using it at that point. Like from a CISDMIN perspective, to be able to run the silver Light
plug in right now is incredibly hard. It only runs, it only runs an I E eleven, It only runs in a particular compatibility mode, like you have to jump through some hoops to make it actually allow that plug in to run.
And why would you run it in an in an old browser that doesn't have the latest security patches or anything like that. It's completely insecure.
Well it does. It's a main it's a it is a maintained mode strictly the internal you know, for certain companies, and they still exist that need that plug in to run. But it is I've done, show, I done run as is on this like, it is not easy to tease that thing back to life. It is not for public consumption. It is purely for old school compat.
Well, when I was excited about silver Light, it wasn't because I was excited about plugins. It was only later when I realized that when like the rest of us, that plugins were dangerously insecure. That and that's why I think it was the right call. But the whole browser community moved on to extensions, which are a completely secure version of plug ins, which weren't well.
With asp do on net. I think we have a pretty good track record, Like there are lots of people happily running their web forms, apps, their ACE, NBC apps, apint Webpi, and it's still fully supported, and it's been supported for a long long time, and we expected to be supported for a long long time in the future. Same thing with anit core, NBC ACEPNIT core APIs like those, you can feel good you'll continue to get platform improvements
on those for for a while. But we were going to be focusing our investments in eleven on our modern stacks of minimal ada Blazer. That's where we're really trying to direct people, and you can see that in a lot of the features that we have planned.
So I got a question and dot ten you when we talked on Blazer Train, you said that there is a new feature in dot ten about being able to decorate properties of a class with an attribute that would allow them to persist you know, through browser storage local storage, which is really cool, you know, for using for keeping
state around, right, especially for a component state. Yeah, you disconnect and reconnect and it's right there, something that I've been doing through my components and talking about on Blazer Train a lot. And people got confused and they're like, well, does that mean that I don't need to have an app state component? No, you still do. You still have to have a container for your state. You know, that's not going to write it for you, but now you
can persist it. That's what it's all about. But in dot net eleven, I see that there's some new persistence stuff for state.
Yeah, so we did the pause and resume support and the declarative persistent component state support and DOT at ten.
So those features are already available. So if like, for example, if you're pre rendering your components before they become interactive, yeah, and you have to acquire a bunch of state during that pre rendering stage where you're just basically going to statically render your components as HTML, and then when the components then wire up interactively like either either doing the Blazer server thing or Blazer web assembly, often you end
up acquiring that state again. So to avoid doing that twice, you can just take the state that you got during the pre rendering and persist it into the page so that it can be reused when the components render interactively. That makes things more efficient and it improves the user experience. Prior to DOT in ten, it was a little clunky to do that, like there was some APIs and services that you had to wire up in the right way.
In ten, there's just an attribute like you slap it on a property and say this is the state that I need persisted so that when I render interactively, I'm good to go. So it's much easier. We then took that model and made it so that when your circuits are potentially going to get evicted or might or being explicitly paused, you can take the state of your server hosted circuits and persist them so that they can be
again rehydrated. Like this might happen if your like your client, becomes disconnected for an extended period of time, Blazer will try to hold on to your the circuit state the server state for at least a little while. I think the faults like three minutes. But if the client doesn't reconnect, then the server's going to say, well, I guess they're gone, and it will evict the circuit and the user's state
is gone. If they try to then come back and say, like five minutes later, then they're basically back to the beginning again. With state persistence the component state persistence, you can before the component gets the circuit gets evicted, it can save its state, and then when the user comes back, it can just oh, be like, I know who you are. I'll just recreate your circuit for you from the persistent state,
and you're good to go. That will actually happen automatically for you in ten the thing you can do manually also is you can request that the circuit be paused. So like let's say the the user minimizes the browser and goes to lunch, Well, you've got the circuit sitting there on the server and the connection like, well, it's not doing anything, it's just wasting your server resources. You could detect that that happened and say like, well that's
not even visible. Let me just pause the circuit and that will evict it and persist it, and then when the browser becomes visible again, you can have logic that says, oh, now we should recreate that circuit for them so they can continue using the app. That API for explicitly pausing and resuming is in ten is a client side API. It's like a JavaScript API. We didn't get the server based ability to persist the circuit and rehydrate it in ten.
We'll we'll have that done in the eleven, and we'll give you also of some of the policies that we had talked about enabling intent, Like you know you're about to restart the server, and so you want to actually take all the circuits that you currently have active and save them so that when the server comes back up, you can resume them. Ideally, you want to run some server side code for dealing with that type of stuff in eleven will make that much more and more easier to deal with and handle.
And here's here's a tip. Guys. You know we were talking about using pre rendering, right and so on initialized is going to fire twice, once in the pre rendered state and once when it's complete. I've had projects where that on initialized code takes a while, you know, to load everything. It's got to go out to the database, it's got to fetch a bunch of stuff, boom, put it all together. And you don't really want that pause
in the pre rendered state. So what I do is I just get dummy stuff, you know, and use that in the pre rendered state and then wait until I'm not you know, until i'm full fully complete on the second pass to do the actual loading of data.
Yep.
But you could do that too.
You can even stream that pre rendered content. We support
streaming rendering for static rendering. So streaming rendering will basically say like, I want to statically render this page, but while doing that, if there's like some long running asynchronous task that happens in the middle of that logic instead of just having the client weight for any HTML to show up, Go ahead and send the first batch down like whatever you got, send it down, and then when that task complete, send the following follow up batch and
just patch that into the the dom for me. That works with pre rendering us as as well. So you could, you know, implement some like you know, i'mloading dot dot dot even in that static rendered state that then gets filled in once the database query or whatever it is that you're doing completes.
Yeah, good stuff, But I love being able to choose how that works based on the complexity or the size or the scale of your app.
The thing I hope that that all this work on pause and resume and state persistence really enables is I know that some people get some anxiety about the scaling characteristics of laser server based apps. You know, I have all these circuits that you're maintaining for the users that are connected to your application. You have all these connections. How is that going to scale? I mean, it turns out that even without any of these optimizations, it actually
scales pretty darn good. Like you can pretty easily handle like tens of thousands of concurrent users on the site with pretty reasonable hardware for most Plazer server apps. If you're really trying to get big to like, you know, one, hundreds of thousands or millions of concurrent it's really concurrent users that map number of views, but people on the site at the same time, then yeah, maybe it could be heavier load, and maybe you might want to think
about moving more of that to the client. But with these patterns of like you know, being able to pause the circuit and the victims to free up those resources. So even even if you have a you know, quote unquote a current user but they went to lunch and they're not using the server resources and that type of stuff, you can really optimize the server utilization quite a bit. And scale.
Are there many folks doing much of a client side it seems like the server side one.
There are passionate folks on both sides. It's it's it's uh okay, I love that. Yeah, and they love to each other and you don't.
And as I understand, you don't have to choose either, Right, you can run some stuff clients some size server like.
Yeah, in the same app, you can have a mixture of both. But there's definitely like sort of the blazer webs of the crowd who.
Like, wa love bugs.
I love it so and I do everything blazers server and I love it and they'd love to like, you know, throw The.
First question I ask potential clients is how many users do you think concurrently would be using your the maximum that would be using it concurrently? And you know, for the for the clients I've had, there's no more than you know, fifty thousand or something like that, twenty thousand, And I'm like, well.
Yeah, and those are big, those are usually the big ones. I talked to a lot of people are like, you know, a few hundred, yeah, And I'm like, well, don't even think about it.
I don't even think about it. Yeah, but yeah, for fifty thousand, you know, you could just get a big, you know, fourteen sixteen gig server if you want. And jeez, don't.
Support thousand concurrents. Yeah, what are you doing? Like that's a lot, Like it's just a lot.
Well that they might be doing some sort of commercial customers facing.
It said the whole stadium worth of people to a site at the same time you got.
Some global app or like I talked to a lot of people doing like you know SaaS offerings, so you know they have multiple they're they're hosting the same app for multiple customers, and so they have to think about the scale and end times for each customer. Apps at that scale definitely exist, and it's something you do want to consider when you're thinking about your architecture for your Blazer apps.
Hopefully with these features like pause and rezoom and all the also the like just the static service ide rendering features that we're adding it there's less anxiety about using some of these features that are particularly convenient.
Well, I mean it's not like you can't change your mind either, right, Like it's just.
And you can always switch the render mode exactly.
And we gotten at ten especially because perfe and memory usage got so much lower. You know, you can have even more jeez, you wouldn't even need all that ran.
Guess it gets more efficient for static service side rendering. We are leaning into that also quite a bit, Like there's a we think there's this really nice sweet spot where I don't even need an interactive render mode to
do a lot of what I'm what I'm doing. And for that like think of all like we have actually quite a few people that are still using classic NBC or Razor pages or back to web forms for their applications, and they're just mostly doing static service side rendering and maybe some JavaScript to light up some interactivity wherever they need it. And there's a lot of people building apps
that way. Blazer we're trying to position as the you know, our single recommended WebUI offering, and we want to make sure that the people that come from that style of app don't come to Blazer disappointed in any way, shape or form. There's a few feature gaps that we're filling in there and dotten at eleven, like support for temp data, like dealing with session state, like having things that a lot of the tag helvers.
Yeah, there's no state that.
We don't have in Blazer as components like adding those as well.
There's no state for static rendered mode right.
Right, yep, so you have to like provide these mechanisms to the past state state along. We're also looking at like for forms, when you have a form and you want to do validation today in Blazer you end up flipping to do either you write your own JavaScript or you flip to an interactive render mode to have client
side validation logic for that form. Right, you know eleven, we are going to add a a a some client side validation support for static service side rendering in Blazer that doesn't require an interactive render mode.
That's cool.
Can think of it as like a modern replacement for the like remember the old like jquera and uptrist to validation libraries that we have for NBC. I think of it as like a modern replacement for that that you can use with with Blazer. And since it might as well, we'll probably also make it work for existing NBC and Razor Pages apps too, so you maybe can get rid of that jQuery dependency.
Finally that well, well you kind of did that already with with the forms validation, not forms validation, but forms processing. Right, you can do that without interactivity because you do a fetch, a JavaScript fetch or something like that, and so it works, but but you still don't have state, so you kind of can be fooled into thinking, oh, I can just put a class level variable here. Yeah, you get pretty close, You get pretty close.
Yeah. I think that's the enhanced navigation, enhanced form form handling that we have in Blazer, where it will feel like a SPA app even though it's actually doing service side rendering for the form and even that case though the validation is still going to happen server side. If you want to try and even prevent the request, you still want that client side validation to kick in to say like hold on, you still got your email or phone number miss miss uh misformatted. And so that's what
this uh, this feature will enables. You can have a client side validation model without you having to really go full and full on interactive.
Awesome. Yeah, so a bunch of stuff there.
What else in dot net eleven?
So on the web assembly side, one cool thing we we're adding is a new a new template for building uh dot net based webworkers uh in the web platform. So the webworkers are right? Are these kind of like it's like a separate process that you can spin up in a in a browser and offload some work from the UI thread and do something in the background. One of the top uploaded features we have in our backlog
is support for multi threading in Blaser web assembly. Yeah, we wanted it forever and I promised it actually for your multiple years. Is that we're going to do it, and we had been working hard on it. But on the mono based run time, and now, as we talked earlier, we're consolidating our run times to be based on core CLR, so we need to get that done first before we can deliver multi threading and then do the multi threading on top of course CLR. So the multi threading work
is kind of blocked right now. It's kind of pause, so sort of as a peace offering to our users that really need some way to move work off of the UI thread to free up.
The main So the web worker is kind of like a service worker in a pwa A, right, is it kind of the same idea?
Yeah, yeah, very very very similar. Think it's the same underlying infrastructure.
But it's C sharp so yeah.
So what you can do is you can have a a donn It webworker that your Blazer web assembly app references and you can use that to fire up some work that happens in the background, like if you have some really CPU intensive stuff that you don't want to have happen on the UI thread. Donnet webworker template will allow you to do that. Nice, so that'll be available, and it's general purpose. It's not actually even Blazer specific, like there's nothing, there's no Blazer component model in this thing.
It's just a way to run dot neit code on a webworker. It came up in part because one of our internal teams at Microsoft that the team that builds Copilot Studio, like that the tool that you use to build like custom agents that run in Microsoft Copilot Microsoft through sixty five Copilot. Copilot Studio actually uses our Donet web assembly run time for their agentic infrastructure, and they run a lot of it client side on web Assembly,
but they do it on a background webworker. They don't do it on the UI thread which when we found out about this, we were like, wow, that's like amazing that you were able to figure out how to do that, because if it wasn't an officially supported feature, like they've gone in and seeing the found all the run time APIs and just worked it out themselves. And we're like, we should probably, you know, make this more first class, like make it a thing that that everyone can do
and everyone can use. So we're standardizing that pattern in eleven and giving you a template so that you can do it. And also it helps mitigate a lot of these scenarios that people want multi threading for at least as a temporary measure. I do want to some caveats that you are spinning up. You know, basically two run times, right, you have the runtime on the main thread and another runtime in the background thread. So memory usage can be heavy with this pattern, so use it judiciously. If you
don't need it, don't don't. Don't don't go spinning up web workers left and right in your in your application. But for those people who have those CPU intensive workloads, things they need to off move off the UI thread. This is a pattern that you can now.
So don't run it on one of those old Android phones you've found in your drawer of broken dreams.
Maybe not?
Who's running proto anymore?
Sandwich screep saw.
Which uh the drawer broken dreams?
I still have mine?
Yeah, pack all those phone phones, those old old phones.
Other cool things. I see. Sharp unions I think are finally coming right, like C sharp unions.
Yeah, yeah, they've they've been hammered on that for a long time, trying to get that right.
That is you're right, you know, I think you and Kathleen are the only ones who understand what that is.
We have this are right? Like you want to return multiple types from a controller action or a minimal API like either the actual result or a you know, some HP status code thing. All those like types that have multiple genetic parameters where you're basically sort of handcrafting unions in in a core using a proper sea sharp union feature. I think we'll make a lot of those patterns more for more natural. We'll need to do framework work to enable that in the ACE.
I mean, don't mere mortals just create a class to return.
Yeah you can. I mean, nothing stop you from sort of creating your own union today manually. It just gives you a language feature for for doing.
Those things, right, I suppose. So if you really want to impress somebody on a job interview, you say, well, just spent a union and you got the job.
My friend, I didn't know this was like a like a NEWT features. I'm using unions of my.
Only the cool kids, that's right.
Yeah, And of course there's all the AI stuff which would have to work out half to day something.
You know what. I'm not unhappy we didn't talk much about AI. It happens often enough, but we are.
We will pay pay homage to the the AI gods to make sure we do all the I think so Microsoftic Centers. A.
Hey, I'm excited about the past key implementation. That makes me happy because you know, by bit getting away from past ors is a good thing. So there's a lot of cool stuff coming. And I really like the way you talk about asp core as a whole. It doesn't matter whether your web forms or MVC or raizor or Blazer. It's all the same.
It's one framework and one dot web development story. That's that's that's pretty important for what we're trying to.
Deliver well in airon lies, you know the issue and even going back to the comment, which is too many UXes and so the C a unified group out there presenting one, you know, a set of ways to do things that work together. I love everything about that.
Yeah, anything else you want to spring on us Dan here at the last minute.
Well, I'll show just one one little AI think just one little.
Cool Okay, one little AI think brother, hit.
Me one thing we are working on in Blaze, and we showed a little bit of this at dot net comp But I think it's cool is we're working like when you're trying to build an agentic app, right, an app that surfaces AI functionality to your users. You know not you're going to build it with a I two, but like the actually having an AI feature in the app.
One of the problems you offer encounter is, well, I have some client and it needs to talk to the server and the servers where I'm really accessing the AI resources like Microsoft Foundry or whatever wherever your model is is hosted. How should I set up that channel of communication? How do I deal with the streamed results from from the AI the agent, Like, you know it's going to stream you back a bunch of tokens. How do I
deal with that? What if I want to handle multimodal inputs, like I want to be able to talk to my agent, Now, I've got to figure out an API surface area for dealing with that. Maybe I want to send it images or camera input. There's a protocol that's been defined called
AGUI Agent to QI I guess what's short for. That defines that interaction between front ends and their AGENTIC Backe and so we've been working with our friends on the Foundry chain that built the Microsoft Agent Framework library to add AGUI support to that framework so that you can easily stand up an AGUI endpoint and then on the client, like in your Blazer app or your Blazer Hybrid app
or your Maui app. We're going to give you Blazer Ai components that make it just really trivial then for you to build out that agentic user interface that then talks to that back end. So that's something that we're working pretty hard on with our friends and partners over at co pilot Kit who wrote the AGUI spec. They've
been great partners to work with. We have some early preview bits for the AGUI support that's already out There's if you really hunt around in the agent Framework Repel, you can even find some branches with prototypes of the Blazer Ai components that we've been working on, and we expect to get those out here relatively short order for people to be able to try so awesome. Agentic UI is the big thing that we're working on in the eleven time frame as.
Well, the new term of concept. Okay, I love it.
Yeah, thanks Dan, I'm sure we'll talk about that more next time we talk to you. Sounds great, Yeah, and uh, speaking of talking next time, We'll talk to you next time, dear listener 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 physically 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.
Chapters Middle vand day A Summer times is hard and my taxes in line
