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, welcome back to
dot net rocks. I'm Carl Franklin and I'matechard Campbell, and we are in
our respective hovels. Here me on the East coast of North America. You
on the West coast of North America. Yep, both experiencing some weather.
Oh yeah, I mean it's warmer here, right. There's a little bit
of snow on the hilltops, which is where it should be, but just
a bit stormy. But you're right on the ocean. This is the trade,
right, So we're recording this ring what is really being hyped up as
like the worst storm to ever hit America ever? Really? Yeah, because
it's big, Yes, because it's big and tornadoes and like there's multiple fronts
and multiple things happening up here in the East coast. We're going to get
rain and strong winds with hurricane watches. So you know, if it was
colder, it would be a nor'easter, right, And I guess it's still
a nor Easter because it's coming out of the northeast. Yeah, nor eastern.
Typically you got the warm jet stream coming up from the south, the
southwest, and you got the Arctic blast coming over the Great Lakes and they
kind of join up and turn into Snowmageddon. But it's no snow this time.
Well, very little, I guess, but where I am. But
anyway, so we're we're hunkering down for a good show here, and thank
god the propane tank is full and the generators working. Yeah, I stalk
the wood in case we lose the electrical heat, although heating on wood is
pleasant, you know. But you know what though, if you lose power,
Yeah, what would be better then? To, you know, pull
out your battery powered phone or whatever, plug in a charger and listen to
some old dot it rock shows there what would be better? Okay, maybe
drinking yourself silly might be better, but I can think of a couple other
things. You know, you can do both. That's true. Hey,
David Fowler is here. We're going to be talking about dot net Aspire,
but first let's roll crazy music for better no framework awesome. What do you
got? This being showed eighteen hundred and eighty one, which is just unbelievable,
isn't it? M palindrome? Yeah exactly. Yeah, I noticed that
the last day of twenty three was one two three one two three one two
three yes, yeah, two three one two three one two three yeah.
All right, So it's eighteen eighty one dot pop dot me and that'll bring
you to leftover Salad dot com to some cartoon versions of personifications of your favorite
programming languages, and I just it just made me crack up. The first
one, Python is a hipster smoking a cigar. He's got tattoos and holding
a coffee cup, and he says, my formatting is my syntax. Boomer.
No, you didn't say boomer, but I can just I can just
see you can hear it. Yeah, So I asked you both, David
and Richard, to take a look and tell me your favorite ones. What's
your favorite one? Richard? Oh? Well, see Sharp, obviously I
have a daughter just like that. Yeah, C sharp is I am nothing
like my father, and she looks C and C plus plus she looks uh
off the father. Yeah. So the right right above her is Sea,
which is an old guy with a big gray beard and a balding head.
If you're not allocating memory, you're not living. And then C plus plus
right below it is the same guy, same caption, except now he has
borg implants. Right, David, did you find one that tickled you?
I thinkline is my favorite. Yeah, he's awesome. Her ling's very manga,
isn't it is it is? And it's uh. It's this woman with
a with a cane and skeletons behind her, and she's saying, destroy one
of my processes and I will only grow stronger. And that is a magic
staff if I've ever seen one. Absolutely, she's wearing like an amulet and
there's like mascara dripping from her from her eyes or whatever that is. I
don't know, right, although Haskell is probably like peak. Yeah, the
diagram is exactly what I think of HOSCO programmers, Like above everything this pure
math, everything is just like it is perfect. Yeah. And then go
is this giant Google monster, you know, with a Google T shirt just
ripped right, bald head and it's a little nerd sitting in front with bang
Eyes. All right, Well anyway, okay, I thought that was fun.
It's a good diversion. So Richard, who's talking to us today,
Well, it turns out we haven't had mister Fowler on the show for a
little while, probably a little too long actually, but he's been busy being
a distinguish engineer and stuff. So I'm yeah, we're not gonna fuss too
much on that. He gets a get out of jail free card. Well,
and I went back and looked at some of the old shows and so
forth. I'm like, hey, you know, but I found this great
comment just by searching on his name. Actually, it's actually a comment.
It's seventy years old. It's from August of twenty sixteen, episode thirteen thirty
five, and when we were talking to Matt Watson, who's the Stacify guy,
about his experiences migrated to dot net Core, of which we blame David
for extensively. And so Matthew Decree made this comment admittedly seven years ago,
where he said, having weathered the storm of dot net core and its other
names since Beta eight, I can completely understand the frustrations trying to follow all
the decisions that have been made. I even gave up during the RC periods.
Yeah, there was some bumpy times getting too V one holy man.
However, the dot Net standard version is much easier to understand if only you
have the right resources. Trouble is it seems that a large number of naming
changes. That seems to be that there are many official locations for documentation too,
remember to Life before Learn, none of which you appear to be completed.
I guess a documentation is in preview two. I did manage to and
they managed to find an analogy by David Fowler, and he provides a link
to a GitHub doc that's not in his head David that puts in terms any
c sharp should be able to understand with code. With this is clear to
understand the PCL capabilities. You can target the right version based on your capabilities.
It even describes Zamaran libraries in these terms. As a result, it
makes it easier to know whether you're making a library that can be run on
mobile or at least in that sense, if it compiles, it can ship.
And that's what delighted me about this find right, was it's like,
oh, it's David Fowler. So he answered a question with code. Of
course, it's great. And the code still run, is still up,
it's still there. I mean, of course the pcls are gone. Let's
not talk about that, my god. But yeah, it was such a
cool comment and I probably should have read it years ago because it was one
of those great things about how do you explain stuff to people? Yeah,
so, Matthew, thank you so much for your comment. A copy of
music Cobe is on its way to you. And if you'd like a copy
of music Code buy I write a comment on the website dot net 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 your copy music Codbear and you
can follow us on Twitter if you want to. But the cool kids are
hanging out. I'm mastadon, I'm at Carl Franklin at tech hub dot social,
and I'm Rich Campbell at mastadondol social sen Usitute. You might get a
mug. Pretty sure you won't, Pretty sure you might. All right,
so let's bring David Fowler back here. He joined Microsoft, of course,
as a developer on the aspenat team in two thousand and eight. Before that,
he did two internships at Microsoft as a tester and developer. He's originally
from Barbados and went to college in Florida. And you may have heard of
a couple of things he's been interested in, like I don't know signal R
you know that little thing, lots of other stuff. And now we're going
to be talking to him about Aspire. Hey, David, what's up.
Hey y'all, haven't seen you in a while, haven't hung out for a
bit. Yeah, it's been a long time. Yeah, you know kidding,
Yeah, yeah, yeah, And again, congratulations on the distinguished engineer.
I don't even know if I know people people know what that even means.
Yeah, I think it means a little bit of great hair. You
had been doing this for a while, Tiny. It's weird when you go
from being the youngest person on the team, being the intern, to like
being there for a long time and only beginning to realize how long you've been
there when new people join and they ask you questions and you're like, what,
huh, you guys not just normal? If you guys want to hear
Old, I remember when dot net Aspire was a program designed to support the
growth and development of developers who are passionate about dot net technology. Oh my
gosh, name reuse problems that never happens. What that's not? That's not
that's not a thing. So if you go to chat GPT and ask can
you tell me about dot net Aspire, that's what comes out, unless you
ask it to go to the web and say no, no, no,
no, I'm talking about the Azure thing net framework thing. Oh my name
is super hard. I mean yeah, I remember even trying to name things
like Signal Or, Razor, Blazer. We got some pretty cool names.
I will like, Blazer is a really good name. Yeah. Finally Razors
as well, Razor Exactly. It's not Microsoft rendering tech stock for SP three
like that meme that we have at Microsoft were naming things poorly. Blazer and
Razor brought the entire mold. I mean to be clear, it's not a
meme just at Microsoft Over Technology Foundation otherwise known as w t F. Yeah,
OKID, it's been a ride. So it was an Ignite that you
decided to roll this thing out. Couldn't wait for build? Huh you were
ready, couldn't wait for build? That's right, that's right, Ignite.
What's insandable? Aspire was the team had a lot of ideas rolling in our
brands for like a couple of years now, right, So we did TIE
in twenty nineteen, and Tie if you hadn't seen it, it's still there
on GitHub, dot net, slash tight and TIE was our first real attempt
at trying to build a micro service tool developer experience for making easy to develop
these kinds of applications that were that were made up of multiple parts of your
app. And the story of TIE is is interesting because what ended up happening
was was twenty nineteen was that year where Kubernetes was like we had been ignoring
it, but me personally had been like, you see it, and it's
important, and it's a thing people are learning, but it you put it
in the back burner and you wait to see if you get more signal.
And it kept getting stronger and stronger. Okay, this is the thing that
people are using, and this is TIE T y E tie T y e.
Yeah exactly, yep, yeah, yeah. You know. I went
researching dot net Aspire a little deeper from when I saw it ignite, and
the first thing that came to mind is, oh, kind of like as
your service fabric, but you know, community driven and yeah, so and
we should correct one thing before Jeff Fritz actually reaches through the wire and strangles
us all. He announced it a dot comp which happened to the same same
time as a night but and I was working a night although I did do
a shift at dot net comp, but it was a dot dot com.
So please no car box, like, calm down. I very angry right
now. And we were we were actually at Ignite like that same week.
So I did the keynote dot net Comp. We did talks, and then
I did the two panels like Aspire and stuff at Ignite in Seattle. So
you did talk about Aspire at Ignite while also having announced it at dot net
Comp. Correct, because that's not confusing at all. That comp is a
community thing, right that Microsoft gets behind, and you know Ignite is obviously
Microsoft's baby. But from what I remember, there were more people that were
tuned into dot net KOMPF than went to Ignite. It was huge this year,
like it was insane this year. Just yeah, quite amazing actually watching
that conference girl from this super small thing that Heavier kind of helped together into
what it is today insanely massive conference that people watch real time life, and
it was a ton of fun, like making the keynote recording at this time.
I remember last year the keynote is life ye oh my gosh. Yeah,
total stressful, like the back to back rehearsals making a keynote like work.
Well yeah, well I know that you are no stranger to live keynote
code on the fly, demos that blow people's minds like mine. It's funny.
Life coding to me is like the easy part, right yeah, all
right, so let's just talk about dot net Aspire. What is it?
So tai Tie is the precursor project, right, yeah, yeah, so
Tie is the precursor, but in particular, how does it compare to as
a service fabric, which kind of walks in the same path. Yeah.
So what's funny is when we were building TAI, I felt like we were
going to get feedback about Doctor Composed and Thaie service fabric. Kind of surprised
me, to be ho, and it should have, but it surprised me
that people drew the comparison. But it in hindsight it made complete sense because
Microsoft shit and Orchestrator. So during the Great Orchestration Wars of twenty you don't
know fifteen to twenty nineteen. Right, there was Mesos from Apache. There
was like it was Mesos, Doctor Swarm, Kubernetes, Service fabric. Right,
there are these four big ones that people were all using, and there's
one called Nomad from I think Hashi Quork, and everyone was kind of trying
to see which one to win. I'm not sure if you recall, but
in Azure there was there was a service called ACS, right Adre I think
it was the original AJUC container service, and it supported multiple orchestrators. You
could pick your own and there was no winner at that point. Right,
you could pick an orchestrator like and bring your own containers. And then Kubernetes
won. A service fabric is still very much used, Like, yeah,
it's not like it went away and enterprise is Yes, it's still there.
Right, why do you think Kubernetes won? But it's also really tied to
Azure, isn't it service fabric. I mean it will run on Primo,
we'll run on whatever cloud. But it's really it really shines because it's using
I mean Azure itself is using service fabric, but it is the core of
Azure uses service fabric for sure. The Spire is really more like a framework,
isn't it. For the dot net framework that super challenging makes it easy
to put these things together. So there's the difference. We had this really
hard time trying to figure out how to describe it succinctly, like what is
a single sensus that describes what Aspire is because it combines kind of four things
together and it is a framework, but it isn't a framework, So like,
don't you don't use the Aspire framework. You use it's been at core
right. One of the challenges was, you know, we built this amazing
website, we built this amazing tech over the last like eight years, and
we have all these pieces that you can put together yourself in an application,
but you kind of have to know how to do it. How do you
wire up telemetry, how do you wire up wire up poly how do you
wire up health checks? All these things existed in the ecosystem, but putting
it together into a package and having it be orchestrated and to end is the
thing that aspired it to Aspire added orchestration for local development and give you patterns
in your application for that. And what's funny is the tech isn't new.
It's just we we glued things together that were that were there already, right,
So I looked at the Aspire components. Yeah, and you know,
there are all the components that I would use my own dot net framework,
except they have an Aspire in front of them. So yeah, obviously,
so like Aspire dot as your blob service or whatever is as your blob service,
but it's got the glue to hook it into the rest of what Aspire
does. Open telemetry, Yeah, there's tons of them. Open Telemetry Configuration
DII exactly exactly, so, and it's funny. We spent a lot of
time trying to figure out if that's valuable, Like is it valuable to have
Glue packages that our version consistently and that glue things together that you would always
need in an application. And we went back and forth with the you know,
the adre ESDIKA team. Should we put this in the SDK, Should
we have a separate component? What's the value in having a separate thing on
a glue package? But it I think based on what we've seen feedback,
why so far people love the convenience, Like you basically grab this package and
you call a method and it wires up like four or five things that you
would have had to do by hand. And I think in isolation it looks
simple, Yeah, I did it once this one time here for this one
component. But when it's four or five reds and blogs and all these and
you have distributed tracing on canfig config working, de I working, and it
also configures the pipeline in the right order. Right, I mean that's right.
That's that's the biggest problem. When you have these things. It's like
where does this go? Right? Yeah, exactly, It's like a jigsaw
puzzle. Yep. And some of this actually came out of watching there were
some internal teams building these higher level libraries on top of lower level SDKs,
and we asked them like, why are you not using the SDK as is?
And they were like, well, if you're building an at skilled cloud
service. Turns out these default configured, configed heatings made to work in any
of it don't work well for the for our services. So we went,
huh, could we take what you've learned from kind of building, you know,
the team's backhand or the bang backhand and package it into a way that
just works for our customers by default. So aspires trying to take knowledge from
teams at Microsoft building high skill services and making it available for a third party
as well. That's as well. Nice. Yeah, there's a lot there.
There's a lot to it. But at the end of the day,
it's about that configuration, isn't it. It's about the distributed builders. Instead
of like the regular old app builder you do in aspn net, you use
the Aspire builder and then you can just add reddits at this ad that,
yeah, wherever, and it just figures out how to put that pipeline together.
Correct. One of the the first things we did was we took the
shop example on containers. Was one of like, is that it's funny?
The backstory for shop is kind of incredible. One of our product managers,
i want to say, like seven years ago, said we need to have
this sample and a book with it, and they kind of like on their
own built this thing, right, got vendors built, built this mega samples
out. It's super popular, right, yeah, it never goes away,
it never goes it super popular. So we were like, okay, that's
why I said, it's like really I heard I heard you. Well shop
Shop got a massive revamp revapp in so the engineering team to cover e shop.
So now the Aspinet core team owns the shop. There's a there's a
new fork. It was a new repo that is kind of like successful to
the older one containers and it's a Spire based a Blazer front end, right,
yeah, it got it. It's all a Blazer front end, like
it's all modern, super modern, has a beautiful photo like the the the
diagram is like amazing, and it's all Aspire based. And part of the
proof we were like, okay, we need to be able to take each
shop which is built on Doctor Composed and had a lot of manual deployment scripts
for deployment to different parts of Azure like akas Aca, et cetera. And
we said, okay, our test is we need to be able to take
at a minimum a thing like each shop and aspiify it and then like be
able to deploy it to Azure and have it just work right Azure or crew
nities and have it just work without too much changes. Right. The Doctor
composed situation for Aspire and those who don't know, Doctor composed is a way
to compose a multi process application locally, but you have to put everything in
containers first. One of the big pain points in building doctor files for dot
net projects is you have to copy every single project reference into the container for
container builds. Wow. So if you were to look at the doctor files
for the shop, they're like one hundred lines long copying cs projects because Dunnet
has solutions and project references and you end up having to copy the transitive closure
of all these dependencies just to build containers. Right, So imagine. So
I've seen feedback people saying why would I use Aspire if I have composed And
I think the the what ends up happening there is if you figured out the
secret sauce to make it all work, and you have like massage your composed
files to a point where if you're Mark Randall, yeah if if you if
you somehow figured it out, then maybe you're happy with what you have.
But the moment you want to change add move things around, it gets hard
again, right right? Yeah, wait for two exactly. So the when
I mean when we moved each shop to Aspire, when we got enough of
Aspire working to move each op to it, it was like, holy crap,
Like we move and I think there were like four or five composed files
on different environments because if yamo, there's no code you can't write if statements.
You're you're bound by Like you basically end up having n different files for
any different configurations. Right where in the Inspire world we give you see sharp
and you can write it if statement and you can declare variable. So like
you end up in this place where I can just write code to say,
if I'm in development, do X, otherwise do y right, yeah,
super nice, super nice dot net visual studio, dot net templates. Yeah,
is that where we would start, Like, I know you need docer
for desktop, but I think it requires currently the preview version of visual Studio,
right, yeah, so there is, there is. It's funny this,
This is one of the big things when we were like debating how were
things land first, you can use Aspire from the command line or VS coach
is fine, okay, cool, right? Big thing VS big VS does
for you is when you hit F five, it'll auto attach to all your
processes and you can debug. That's one of the big things people ask for
When we did TIE three or four years ago, it was I want to
be able to debug a micro service, and I want to hit F five,
and I wanted to launch the under the debugger all of my processes,
so I can step across the end to end tracing right the end to end.
So typically you do that with the solution properties, right, run multiple
projects exactly the same time, so you don't have to do that, correct,
you don't have to do it. So your Aspire app, it just
launches like end projects, containers, processes, and it will attach and you
can just step into it. That's cool. Yeah, so be more of
that please, it's super nice. Yeah. We we built this local orchestrator
and I think this is where the service fabric can be comes in because it
has a very similar thing where service fabric has a local orchestrator, but that
thing is the real orchestrator. When you deploy to like your environment on prem
or to Azure, you are running that orchestrator. Yeah. Service service fabric
is really it includes the platform, the path. The platform is a service
right, yes, correct, it's the platform right like it really is like
you are running service fabric. It is an all in one, like give
me the local dev orchestrator and then when you publish you get that same experience
like in the cloud or whatever else. So Aspire Aspire is different different It
differs there it's lightweight's community driven. Did we mention that open source? It
is this lightweight orchestrator and actually details wise, it's actually built on the Kubernetes
pattern locally, but then when you when you deploy, when you publish,
we create this intermediate format or IL if you must. This manifest. It
is declarative and it kind of describes all of the resources used to build the
application locally. And then it's definitely Jason, but this is one of the
big things we were trying to figure out, what do we how do you
go from local development to production? Right? Do you do? You do?
You take the orchestrator everywhere you go. So we said, no,
that isn't what we're gonna do. We're gonna spit out this manifest that kind
of describes in this declarative format all the resources and all the types. The
reatises all the caches, environment variables. And then it's up to a separate
tool to glean from that manifest and turn it into concrete resources. So when
you use the Azure Developer c l I you say a cd up, it
actually tells ASPIRER give me your manifest and then it'll convert that manifest into BICEP,
which is the you know, the as code language for azure. Yeah.
Yeah, it's for ARM for as your resource man exactly, for for
ARM exactly. It's nicer ARM than ARM Jason. But it's writing ARM under
the hood for you, just so you know, like there's no voodoo here.
It is, but there's no matches. But if you've gotten tired of
staring at Jason, like is more language y correct, I'm more tired of
staring at Yamel. Honestly. One of the big things that we were we
were trying to have as a as a selling point for a spier was like,
are you tired of looking at Yamo your silver Hansleman must have been involved
in that because he hates it just as much as I do, honestly.
Like when you enter the cloud Nati space, one of the big things I
think people just accept is like there is YAMO and can figure everywhere you are
doing bits together by editing canfig files and passing in IP addresses and host and
trying to figure out how things all like do this right glue together? No,
get hub told me again, YAML is my number two language and I'm
like, Steph, I bleue a lot of stuff together, Like that's just
reality for me. Yeah, it is. I think one of the big
things Aspire will enable is building an ecosystem of packages that hide some of the
YAML that the ammal isn't there is that you didn't have to type it.
Yes, Rank God, that's the important part. You call rettis and you
can give Intel a sense for configuring the port configuring like the uife reddis and
you can build like you actually compose things, right. I think one of
the big things that Polumi did, like they put that Plumi figured out which
they knew. Right. With code, you can build abstractions and packages and
modules, and you can you can abstract end things by by having like one
interface that does end things under covers yep, the Yamo bass can fig models
don't let you do that. You are stuck with stream replacements. You were
like, how do I how do I have Let's say you want to have
a base platform for your team, So my team is going to use Grafana
and low key, and you name the top five CNC things, right,
how do you give all of your team a template that says you guys should
use this base template for all of your services. Like it's difficult, right,
I wonder what the cartoon representation of Yamo would be. Let's just think
about something to do with like it's duplication. So it's something to do with
duplicating stuff everywhere, maybe like Lucille ball trying to sort the strawberries as they
come off, or the chocolate chocolate. Yeah. Yeah, So that was
one of our big drivers, like could be and it was a big discussion
on the team, like what do we use as this file format? Do
we have a solution, do we try to change the solution file because the
solution is kind of like the Uber project for multiple projects, but we wanted
something code based. It was like you put together your application by saying,
give me an application, let me add projects to it, containers to it,
executables to it. And that gives you enough of a primitive for others
to kind of say, my company is going to use my platform. You
know I can do builder dot add my company's platform composition. Right, things
we learned I don't know, fifty years ago from programming languages that can picktiles
don't give you nonm ranting. Yeah, I know, it's so great that
we're on the same team. Hey, guys, let's just take a break
real quick for these very important messages and we'll be right back. And we're
back. It's dot net Rocks. I'm Carl Franklin. It's my friend Richard
Campbell. He get out there with the beavers and the otters and the bears,
most of the otters these days. And we're talking to David Fowler for
Microsoft about dot net Aspire and how absolutely freaking cool it is and how much
I love Jason, and I know, you know, it also strikes me
that this might be the thing that gets you know, I developed a dot
a developer that hasn't really gotten into the micro services container space yet, and
said, am I ready now? Because it's pretty intimidating, you know,
I got to this project works, you want me to do? What to
it? You know exactly? So I just I just wonder, coming from
an existing application that just hasn't been broken down in that way at all,
it's just a happy ball of mud. Great question, and then we do
that. Yeah, can Aspire help me get started it? Can it?
One of the big things we tempted to do was Aspire has kind of these
four main pieces like orchestration, components, telemetry. You can kind of pull
in what you want want to pull in for your projects, so you can
adopt at your own pace. One of the big things we learned and personally
personally that I learned doing dot net Core in the first place, was people
love migration when they can opt into doing it incrementally, right, Yeah,
no dead drops please. We just had a great show with with with Jimmy
Bogart where he talked about migrating a framework app over the core, you know,
to starting you got went to six and then up from there and just
that we reverse processes things so you can just replace one piece at a time.
It's always done on two platforms. And but no dead drops except that
one day there's nothing left running in framework anymore except authentication. That was last
off session super heard off in session. But yeah, so that that was
one of our main driving factors. Like you add the Aspire orchard to your
main solution and you just get Aspire. You launched that project, it'll launch
your big application, your big ball of mud, and you get the dashboard,
you get telemetry like you can you can kind of ease your way into
getting these benefits and features, You get container published, you get deployed to
different environments, you watch the percentage of mud go down every day. That's
the whole. Right. We have big aspirations. I'll tell you. While
we were doing the Aspire prototype, I was trying to project, like a
couple of years out, what this could look like in the in the long
run, And there were ideas floating around and just about being able to build
your app as a monolith, the holy grail. Right you to build your
app. You think about app components, you think about parts of your app,
and I think laser is the first incantation of seeing this from for a
client framework. Yes, I mean and next jess and spelt kittting those things.
Let me carve off a set of my app as a component, and
then let me name it. And then I'm going to turn that universe into
a deployable asset. So it doesn't matter if I start as one project or
like five projects. I can isolate my code, and I can isolate my
app into different deployable units. Yes, and I feel as though Aspire is
kind of inching in that direction. We started off with this very basic like
I can add a project here, I can add a container here. You
can imagine that being like, let me add a chunk of code, and
that chunk of code becomes its own deployable unit. Right. So I think
I feel like that is the way to get people into a mode where I
can build my application without feeling guilty that I did it wrong, right,
and I can shift and change and refractor like as I go as I grow,
right, Because who would want to start with micro services? Like when
you don't have the complexity like it, it's asking for pain before you have
that desire, right, And if you can have someone be pretty active when
they start off, start off, and then as they scale up, they
don't have to rewrite everything from scratch, like, I think that is the
holy girl we've been looking for for the last Like I don't know how many
years we've been doing software right, many many many many many years. Yeah,
Yeah, it's been a while. Good stuff. It's good stuff.
So we were talking about the open source finess of Aspire. So in terms
of those community contributions, what are some of the areas in dot net Aspire
that could benefit the most from open source development. So one of the big
parts of Aspire that we knew, we knew would be once it controversial.
It was a point of discussion for the team itself was components. Components are
accurated. One of the big things we were trying to learn from watching other
players in the space spring boot being the Java equipment, the biggest probably the
biggest well known thing in the club needs space for a spring Boot. Right.
One of the things they have is this thing called spring Cloud, which
is essentially a set of components that are curated. So when you are looking
for something like a critis or a database driver or any client library for any
open source piece of software, they had an answer, right. And it
wasn't that we didn't have an answer. It was that they showed you this
list that had all the answers. So we were like, you know,
maybe there's something to this list. Let's try to do a curation thing where
all the aspiring components are basically this first class list that we create and third
parties can build their own. But if you want to be in the curated
list, you need to you have to be a verified Aspire component, so
you have to come through us, right. That was the You have to
pay your eight dollars a month and get that badge. It's free. It's
free, but you have to pass. You have to We don't really have
a really well defined council ar review process as yet, but the intent is,
like you if you were in the a Spark component list, you can
be sure like the quality is high. It has these these minimum features by
default, et cetera, et cetera. Right, so it is a new
GET package, but it's one where there's like more checks and there's more things
in place, and there's more more things that we did to make sure it
passes some midbar of feature work. Right. Yeah. The community as soon
as we went by open source, I could not believe how fast the community
added more components like we had in the very beginning seql server obviously, like
that's what we ship SQL server, seql server postgrass Rettis and the community just
like through out a ton of amazing things. And the prs were of such
high quality it was incredible. We got my cql from the from the my
sql author for dot net. We got after PR, we got Cosmos.
It was just like dB so I yeah, Mango dB like and we didn't
even have a document on how to write components. People just figured out how
to write figure it out. But so we're even there yet. It normally,
when I've worked on open source for a long time, and the maturity
in the in the pull request that we got for Aspire, we're shocking,
like shocking because these weren't small bug fixes. These weren't like, you know,
changing the semi colon hair are cleaning up comments. This was here's a
whole new feature that works end to end, right, it blew me away.
You mentioned open telemetry, Yeah, so how does that? How did
I mean that? That requires some knowledge of how to use open telemetry obviously,
yeah, but how does the how does that work together with Aspire?
So one of the things we get to do since it was twenty twenty three
and now we're in twenty twenty four. One of the benefits of coming this
lit to like these spaces are things become more stand so we don't have to
invent our own protocol, we don't have to invent our own tools, we
don't have to invent our own libraries. Turns out, over the last five
or so years, open telemetry has been pretty much being standardized in the industry.
So the benefit of that is we in Aspire, we said, how
do we get telemetry by default. One of the things we realized was if
you think about the F five experience for a single project, the debugger and
VS and like how amazing it is and the experience you get when you step
through can see variables, what is that experience for distributed systems? Right?
And James James King who did just donet. He went away for a week
one week, right, and he built this trace UI in the dashboard.
And the first demo we had where we showed someone here's kind of our fate
shop and here's the end to end trace, Like, people just sat there
because on F five you had this default end to entrace that went through service
A, service B and a database call and it was just on by default.
And all the work we had been doing with open telemetry, with like
our libraries, with the EF team, with all these open source partners,
they had all this stuff like in the tools, it was just really hard
to see without wearing up ten different containers and diamo. And now on your
default Aspire F five it's just there, right as though we turned the light
on. Someone said, we did all this work and it was invisible,
And now with this one dashboard view. All the work we did over the
last five years is like there in your face. Is there a danger in
not knowing how these things work under the hood and just running the default application
the projects and just publishing it. Absolutely so. One of the first Reddit
threads on the Aspire stuff when it first came out, you can see the
the tug of war developers had where this is amazing. It made me so
productive, where some other people are like, oh, you know, this
is an astraction layer. I need to know what's happening. I think it's
kind of like like like anything else, developers will have to know certain things,
and I think part of my job and our job as designers of a
framework is to hide stuff but don't make it obscure. Right. So one
of the things we do is when you create an Aspire project. The reason
open telemetry works is because there's coding your app that says at open telemetry like,
it's there. We didn't hide it from you. It's not magic,
it's right there. Configure with the comment and it says add the the OTLP
exporter, which just says if you have an environment variable to call this thing
like it's passed in from the Aspire host and it works. What I've learned
over the years is if developers can draw lines from coll to how things work
in their brain, then it becomes less magic and more Oh, I get
how that works. I get how this this goes there, how that gets
sent here, et cetera, et cetera. It might be helpful to have
an AI that could explain things when you don't understand what's going on. If
only we had that. Yeah, if only there was an AI that way,
that would be strange. That's not a real thing. You guys are
crazy, but you know, like, Okay, I get how to do
it and it works, But what's going on here? Why does it work?
Right? I love that. I love that. Right now, I
think we're at the phase of what's funny is that discussion? This discussion would
have been super strange if we had it like four years ago. Yeah,
yeah, it would have been It would have been a joke, right,
It would have been like, it's sort of like, what problem we try
to solve here? Like, what are you talking about? I know we're
here in twenty twenty four saying that statement, and it is reasonable, it's
right. Yeah, I could to the AI like describing how works under the
cover. Is how how like when you create a container and a process held
in neworking works between them, et cetera. Yeah, yeah, look at
my app and draw me a app. Right, that's not crazy, No,
it's not crazy. Yeah, we are. We are interesting towards that.
It's an ability to see these pieces. But the other I mean,
part of what you're doing here is you're creating better delineations between pieces of functionality,
right, yeah, That's always been the problem is it was very it's
very hard to tell what is one piece live and another piece live? And
how do they talk to each other? Like that whole manifest part has never
been well described. You really have to read it and dig at it and
then watch it running like it takes a while to have confidence. This is
what this actually means. I've been programming I believe it or not, a
Windows Forms app in the last month for a client. Oh man, it's
all like scientific technical analysis kind of stuff. And this this guy who hired
me is a knows VB, knows how to read VB, but he didn't
understand link and so I had some link statements in there that were pretty complex,
and he's like, what the heck is that? And so I just
took the link statement pasted into GPT and says, hey, can you explode
this into four loops for me and comment it? And it did and I
was like, here, this is what it's doing. And I tried it,
you know, and it get me the same result. And so I
just left it in the code as commented rights as a way for somebody who
doesn't understand how to read link statements. That's great idea. It's very very
cool, very powerful stuff. Or here's another thing that you can do the
other way. You have this convoluted for loop that somebody's written and you say,
hey, can you optimize this code for me? And it will?
Will it write a link statement? I will tell you, it'll write link
statements, it'll use parallel computing, like you know, it's pretty freaking amazing.
This is a space that there is active interests on our team looking at
like how do we take advantage of the AI to do this kind of stuff?
Yeah, because it really does begin to feel like the things that you
wanted to do before in your brand, you know, possible, Like what
if we could have Stephen Toby in a box? Right? Yeah? What
if I could just have him on my shoulder when I'm coating, like the
toll model, and there's a more optimal way to do that. You know,
let me just optimize that for you. Start with the system prompt.
You are, Stephen Taub, How would you do this exactly? That's what
you want? Yeah, yeah, But we digress a little bit. This
is a conversation we had with Mad's Targeted back in the day where I said,
like, okay, you're twelve versions of C sharp in like what and
pretty much the code I wrote in C sharp three still runs just fine,
So why would I use the new features? He says, You know,
we're really going to have to focus on the tooling to help drive you towards
the new language constructs. So it is that how do you hint? How
do you present a given chunk of code that runs It's say, you know,
there's a terser way or cleaner way or faster way to do that.
Yeah, yeah, it's tricky. Like languages, the changes have I think
personally have been quite amazing, and I love the I love hew C sharp
mixed things that were arduous and like more verbose, less verbose, and like
succinct. I've seen a lot of teeth gnashing about being able to do things
in a very similar way with different syntax. The way I see it as
the syntax gets cleaner over time, Right, I can do things more more
expressively and easier. But it can be seen also as like you've added more
ways to do the same thing, Right. I really think that's the thing.
We we see as like an even split. Like I'll paste something on
Twitter and on X and people will be like, what is this new syntax?
I don't understand it, and I'm like, this is super nice to
have. I love the simplification. Simplication. Yeah, that's how I think
we see it, like implicit usings. We simplify the syntax. Yeah,
yeah, yeah, we' usings yeah, collection expressions. Yeah, it's beautiful,
beautiful. So I want to get back to something that Richard brought up
before the break, which was taking an existing dot net application and what did
you say, aspiifying it as asper. So what challenges do you foresee in
adopting dot aspire in existing projects and how can you address them? How can
we address them? So the big the biggest broad block thus far has been
the fact that the Aspire Aspire has been targeting and up So when we started
off, we were like, let's just say it, and immediately you know,
people use the product and they want to use it because I think once
you figure out how easy it is to use and how how you can opt
into different parts of it incrementally, then I think people begin to say,
Okay, this isn't such a big hammer. I don't have to change all
my stuff. I can add it to all of my stuff, Like,
I'm not not worried, right, we will have to see what ends up
happening there. I think that's one of the big blockers today, Like you
have to be undone at it for it to work, right. So it's
really great applications, but for or or if you're going to upgrade to eight,
then you'll have Aspire support in your in your apps, right. But
most people are still on earlier versions of dot net let's face it. Yeah,
but but you know, if they're on five, then they're unsupported.
If they're on six, they're supported, right, But I mean, I
know people are spread across the spectrum. We we see like that feedback sometimes.
So if you still have a startup dot cs in your project, you
you might be a red neck. Oh my god, do you want to
crazy a crazy thing? So when we shipped dot net one core one zero,
right, we had gotten rid of the product Jason, my beloved product
Jason that we killed. And there was a team inside Microsoft who had deployed
an app on DNX and the engineer that had deployed it left and this engineer,
the engineer that had that took over pay me. I was like,
can you please get some support. I don't know how to move this thing.
I don't know what to do with it. We built a tool to
help migrate. So like that's what he did over time, but like something
broke and then he was like I can't find the dots anymore because the dots
are now for like the cs fraud and the Jason follow is like gone.
And it was yeah, those were tough times, yeah right, crazy?
Where was being AI? Yeah? Huh huh. Let's talk about the roadmap
for dot net Aspire in any coming features or integrations that you think are particularly
exciting. Yesterday, so let's say we came back from vacation. We shipp
preview to just before the breaking for for winter, for before we all left
for holidays. What's funny about that one. We a set of us went
on vacation and we were trying to ship like days before going on break.
This is about it. They do not ship software days before you to break.
You're going to wrack your holiday, like you're just asking for it.
So it took us a couple more days to get it out. So some
of us were like every night I was watching the chats trying to see if
we were like any closer we got out the door. Preview two is what
I thought Preview one should have been. How do we had more time?
Preview two is like, yeah, I can try it now. And we
took all of the top feedback and we addressed a bunch of issues. So
people were asking, how would I orchestra and application where I have multiple repositories
right that have my source code? What do I do right? And their
options that are like I can clone them all locally and orchestra and orchestrate that
way, I can put it in a container. So we basically give you
the options now to do all the things. You can reference projects not in
your solution. You can reference containers, you can reference the process and they
all work the same way. That that was one of the big things we
had to solve because everyone saw it and thought, do I have to put
everything in one solution? And then to fight that, we have to have
enough features so you can experiment with how you liilt your source code, how
you lailt your projects, et cetera. Right, Yeah, I imagine you
see a lot of variations on that, like more than any given person.
Yeah, just because you guys have such a broad view of the different ways
that the studio gets used, correct and people. The hardest part. If
you look at the Aspire docs, it says that the stack is opinionated.
H The team struggles, like we struggle with having strong opinions because we are
built in to be framework designers and we basically build pluggable systems. Yeah right,
Yeah, So you have this dynamic between being inclusive. Lots of people
can use this the way they want to and opinionate it, so it's not
trying to be everything everything exactly, and so it's really nothing exactly. You
got it. Another way to say opinionated is convention over configuration, which last
time I looked, was a really good idea. It is I think some
of the Aspire things we said no to early on may come back in the
future and people may ask for things like there's a lot of there's a lot
of requests and I shouldn't be surprised there are a lot of requests to run
the orchestrator like locally on prem like on prem. People want to replace their
local on prem deployments with I and I guess I'll win now service with Aspire.
And we had no intention, like zero intention of having this thing live
past development, right, So that is N five locally, it's not it's
not run time exactly. You five locally and you can debug and see the
dashboard. But then when you publish, you're targeting something. You you target
kubrunettes, you target Azure, you target Amazon's cloud like you you run locally
and you target a cloud environment to a space. There's a lot of feedback
from people, and I think the feeling is you can help me make might
out more modern if you give me a way to kind of like take the
ASPA experience, put it onto my local on prem environment, and then I
can go to the cloud. So that's an interesting like thing that I think
came up that we didn't foresee, Like I did not think that was gonna
be a thing. Do you want to go down the run time of path
because man adds a lot of weight. Yeah, just to use Kaberunetes.
Honestly, it might just be if you're on a local machine and you want
orchestration Kubernetes, and yeah, exactly, you guys don't want to put exactly
exactly you got it. We already had too many as it is, right,
and and Kubernetes now has that that natural monopoly weight that the ecosystems growing
around it. It has Helm and all these other tools right that make our
lives everywhere. Yeah, and everything runs it. So your every nautical metaphor
you can possibly think the same. The same way you made us write less
Yamo, you can make us can figure less Kubernetes exactly. So that's what
we're gonna do. So we have this. So on the road map is
we're targeting Azure container Apps in the addera space for for V one that people
ask for app service, people ask for Azure Kubernetes service. Akash aka s
was was on the map, It might still be on the map, but
Agri Container Apps is the primary like scenario or for B one, now we
have community one of our community members. Remember I mentioned mentioned high quality contributions.
This contributor built a manifest Kubernetes experience. Incredible. Wow, it's called
it's called Aspirate, like not, I mean the name is desperate. Yeah,
and I have an in the name, so it's Aspire eight. That's
all very close to Respirate, which is it's still breathing. It's still breathing.
It is very close to respiate. But it's super cool. I can
take my Aspire app and say, like, give me a Kubernetes and it
spits out all of the stuff and it's all a lot of stuff, all
the manifests, all the yamo, all the it does all the things.
How about g r p C g RPC web speaking of James King, Oh
yeah, so there's there's first class support for g r p c's service Discovery
and Aspire. One of the things we aim to not do is recreate anything
that we already have. So say it's been at Core, it's g RPC,
and we weave our way into those subsystems via how they're extended. Yeah,
that's great. It really like it really should feel like I have my
app. I added Aspire and I tweak like two pieces of code, and
it's not cold that you wouldn't have done yourself. It's just we did it
for you, right, And it's the plumbing you would have done. You
would have done this code yourself, you would have called at open telemetry and
add these five things. We're just making it available to call like as a
as a baseline. Yeah, awesome, very cool. So personally, what's
new, What's what's coming up for you? What's in your inbox? What's
next? Good question. I've definitely been looking at the AI space a lot.
You could imagine inside Microsoft, there's a lot of interest in overall,
a lot of interest, and I've been avoiding AI personally for a very long
time, but just you know, you know it exists. Yeah, you
know there's people doing learning and that stuff, but you you kind of like
wait until the way I get involved in stuff is I kind of like keep
it on the back burner and I wait for signal to like kind of exceed
some threshold. Yeah. Yeah, And it is past that point now where
I have to know enough about the space to have conversations to understand how I
can integrate with what we're doing. So for me, for me personally,
I've been getting involved in just understanding more the space so I can kind of
understand how it affects the next ten years of dot net, Like do we
have to be a big player in this space? Is it the Python will
win it? Ready? Like just those those basic things I've been thinking about.
Just yeah, but definitely shipping aspires is top top top of top of
my list, right yeah, yah, yeah yeah. It doesn't not sound
like a spire is going to leave your life anytime soon. Yeah, right
sure, no, no, and that definitely not. The list of next
is huge, That's correct. Your burn list runfo and you wouldn't you wouldn't
believe. Like historically, when you build a new thing sometimes I mean this
is well known, like people wait until Virgin three to try it out,
like the version version one is not good, And internally it's really hard to
get teams and to adopt things sometimes because you know, they want things that
are tried and true and done, and only if they already have affordances for
it will they like take a dependency on it. HM. Like we're seeing
people want to want to use a spire, like they see the benefit of
it and they want to get toe lemetry and they want to get these things.
So we're going to spend some time also trying to figure out what Aspire
looks like for inside of my inside of the company sure, and hopefully bring
some of those learnings like back out. Yeah, that reminds me of a
line from when I one time drinking with Jeff Snover where he said, you
know, when I created PowerShell, they may be a distinguished engineer, but
when I got the whole company to use it, they made me a technical
fellow. That's pretty awesome. That's great, that's what I have to do.
I got it. Well, David, it's been a delight talking to
you for the last hour, and it's always great talking to you. And
Aspire is amazing. What can I say? And I hope everybody will dive
in, check out the documentation and get started write something awesome. Thanks again,
all right, and 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 physically 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