.NET Conference 2025 by C# Corner | Day 2
0 views
Aug 6, 2025
Uncover the future of .NET. Attend insightful sessions, engage in technical discussions, and build your .NET knowledge base. 📺 CSharp TV - Dev Streaming Destination http://csharp.tv 🌎 C# Corner - Community of Software and Data Developers https://www.c-sharpcorner.com #CSharpTV #CSharpCorner #LiveShow #dotNet 🎙️ New to streaming or looking to level up? Check out StreamYard and get $10 discount! 😍 https://streamyard.com/pal/d/5348850450038784
View Video Transcript
0:00
[Music]
0:28
[Music]
0:28
[Music] [Applause]
0:32
I
0:39
[Music]
0:46
[Music]
0:50
feel
0:53
feel
0:53
feel it. We do
0:58
[Music]
1:03
it. Do it. Do it. Do it. Do it. Do
1:16
it. Do it. Do it.
1:20
It do it. Do it. Do
1:23
It do it. Do it. Do
1:23
It do it. Do it. Do [Music]
1:25
[Music]
1:25
[Music] Do it. Do it.
1:29
[Music]
1:44
[Music]
1:44
[Music] Do it. Do
1:47
it. You do
1:52
it. Do it.
1:55
it. Do it.
1:55
it. Do it. [Music]
2:29
Heat. Heat.
2:39
[Music]
3:04
[Music]
3:04
[Music] I
3:10
[Music]
3:12
[Music]
3:12
[Music] feel
3:15
[Music]
3:16
[Music]
3:16
[Music] feeling
3:20
feeling feeling. We do it. Do
3:25
feeling feeling. We do it. Do
3:25
feeling feeling. We do it. Do it. We do it. Do
3:30
it. Do
3:32
it. Do
3:32
it. Do [Music]
3:34
[Music]
3:34
[Music] it. Do it. Do it. Do it. Do it. Do
3:40
it. Do it. Do it. Do it. Do it. Do
3:40
it. Do it. Do it. Do it. Do it. Do [Music]
3:48
it. Do it. Do
3:54
Do
3:56
Do
3:56
Do it. Do it.
4:08
[Music]
4:19
Heat.
4:25
[Music]
4:27
[Music]
4:27
[Music] Heat. Heat. Heat.
4:30
Heat. Heat. Heat.
4:30
Heat. Heat. Heat. [Music]
5:04
[Music]
6:30
Hi everyone and welcome to day two of
6:33
Hi everyone and welcome to day two of
6:33
Hi everyone and welcome to day two of .NET conference by C# Corner 2025. Uh we
6:36
.NET conference by C# Corner 2025. Uh we
6:36
.NET conference by C# Corner 2025. Uh we had an incredible uh day one. We had
6:38
had an incredible uh day one. We had
6:38
had an incredible uh day one. We had about 7 to eight different sessions. Uh
6:40
about 7 to eight different sessions. Uh
6:40
about 7 to eight different sessions. Uh we had speakers from Microsoft. We had
6:43
we had speakers from Microsoft. We had
6:43
we had speakers from Microsoft. We had uh quite a few good community speakers.
6:45
uh quite a few good community speakers.
6:45
uh quite a few good community speakers. Microsoft MVP C Shapon MVP joining us on
6:47
Microsoft MVP C Shapon MVP joining us on
6:48
Microsoft MVP C Shapon MVP joining us on day one and I'm really excited to
6:50
day one and I'm really excited to
6:50
day one and I'm really excited to welcome you all on day two. For someone
6:52
welcome you all on day two. For someone
6:52
welcome you all on day two. For someone who's joining us very for the very first
6:54
who's joining us very for the very first
6:54
who's joining us very for the very first time, I just wanted to uh remind gently
6:57
time, I just wanted to uh remind gently
6:57
time, I just wanted to uh remind gently about the code of contact which just
6:59
about the code of contact which just
6:59
about the code of contact which just simply means that uh be nice to the
7:02
simply means that uh be nice to the
7:02
simply means that uh be nice to the other attendees uh especially in the
7:04
other attendees uh especially in the
7:04
other attendees uh especially in the chats and also all the conversations
7:06
chats and also all the conversations
7:06
chats and also all the conversations that we are having on social media. just
7:09
that we are having on social media. just
7:09
that we are having on social media. just follow that code of conduct and actually
7:11
follow that code of conduct and actually
7:11
follow that code of conduct and actually please feel free to go ahead and ask any
7:13
please feel free to go ahead and ask any
7:13
please feel free to go ahead and ask any questions uh that you want to ask to the
7:15
questions uh that you want to ask to the
7:15
questions uh that you want to ask to the speakers. So we have about I think four
7:17
speakers. So we have about I think four
7:17
speakers. So we have about I think four to five sessions. It's a very light day.
7:19
to five sessions. It's a very light day.
7:19
to five sessions. It's a very light day. Um so if you feel asking any questions
7:23
Um so if you feel asking any questions
7:23
Um so if you feel asking any questions to the speaker you can actually go ahead
7:25
to the speaker you can actually go ahead
7:25
to the speaker you can actually go ahead and drop it in the chats. Uh we will
7:27
and drop it in the chats. Uh we will
7:27
and drop it in the chats. Uh we will either take it towards the end of the
7:29
either take it towards the end of the
7:29
either take it towards the end of the session or maybe your speaker wants they
7:31
session or maybe your speaker wants they
7:31
session or maybe your speaker wants they can take it on the fly. Uh with that
7:34
can take it on the fly. Uh with that
7:34
can take it on the fly. Uh with that said we have quite a few folks joining
7:36
said we have quite a few folks joining
7:36
said we have quite a few folks joining us. We have hosi joining us from Brazil.
7:38
us. We have hosi joining us from Brazil.
7:38
us. We have hosi joining us from Brazil. Rohit from India. We have Sartak here.
7:42
Rohit from India. We have Sartak here.
7:42
Rohit from India. We have Sartak here. Hello Sarak. We have Uno platform. We
7:44
Hello Sarak. We have Uno platform. We
7:44
Hello Sarak. We have Uno platform. We love Uno. Right. They're joining us from
7:46
love Uno. Right. They're joining us from
7:46
love Uno. Right. They're joining us from Canada. And we have Arun. We have Cap.
7:50
Canada. And we have Arun. We have Cap.
7:50
Canada. And we have Arun. We have Cap. We have Abi I think Arif. We have Atul.
7:54
We have Abi I think Arif. We have Atul.
7:54
We have Abi I think Arif. We have Atul. Atul is my teammate. He's in Uttra now.
7:56
Atul is my teammate. He's in Uttra now.
7:56
Atul is my teammate. He's in Uttra now. I'll be joining him the other day. Roy
7:59
I'll be joining him the other day. Roy
7:59
I'll be joining him the other day. Roy says, "Hey, Simon." So, hi everybody.
8:00
says, "Hey, Simon." So, hi everybody.
8:00
says, "Hey, Simon." So, hi everybody. Welcome once again. And I'm quickly
8:02
Welcome once again. And I'm quickly
8:02
Welcome once again. And I'm quickly going to go through the agenda that we
8:05
going to go through the agenda that we
8:05
going to go through the agenda that we have. Uh today we're starting it's 7
8:07
have. Uh today we're starting it's 7
8:07
have. Uh today we're starting it's 7 p.m. here in India. The first speaker
8:09
p.m. here in India. The first speaker
8:09
p.m. here in India. The first speaker that we have today is Chandu is going to
8:10
that we have today is Chandu is going to
8:10
that we have today is Chandu is going to talk about blazer. I still remember that
8:13
talk about blazer. I still remember that
8:13
talk about blazer. I still remember that even the other day we started with
8:15
even the other day we started with
8:15
even the other day we started with blazer web development. So it's very
8:16
blazer web development. So it's very
8:16
blazer web development. So it's very exciting to start even day two with
8:18
exciting to start even day two with
8:18
exciting to start even day two with blazer. Then we have an coming up with
8:20
blazer. Then we have an coming up with
8:20
blazer. Then we have an coming up with the lightning talk where he's going to
8:22
the lightning talk where he's going to
8:22
the lightning talk where he's going to talk about uh efficient containerization
8:24
talk about uh efficient containerization
8:24
talk about uh efficient containerization of application. Then we have Kaman also
8:27
of application. Then we have Kaman also
8:27
of application. Then we have Kaman also going to talk about dotted Aspire
8:29
going to talk about dotted Aspire
8:29
going to talk about dotted Aspire followed by Purima uh and Alvin who
8:31
followed by Purima uh and Alvin who
8:32
followed by Purima uh and Alvin who works at Microsoft uh in the Microsoft
8:34
works at Microsoft uh in the Microsoft
8:34
works at Microsoft uh in the Microsoft learn ecosystem and then towards the end
8:36
learn ecosystem and then towards the end
8:36
learn ecosystem and then towards the end around 10 p.m. Indian time we're going
8:38
around 10 p.m. Indian time we're going
8:38
around 10 p.m. Indian time we're going to close it. With that said boys and
8:40
to close it. With that said boys and
8:40
to close it. With that said boys and girls without any further ado let's
8:41
girls without any further ado let's
8:41
girls without any further ado let's bring our very first speaker of the day.
8:43
bring our very first speaker of the day.
8:44
bring our very first speaker of the day. He is Chandu Shaker. Chandu is a senior
8:46
He is Chandu Shaker. Chandu is a senior
8:46
He is Chandu Shaker. Chandu is a senior staff engineer. He's a Microsoft Azure
8:48
staff engineer. He's a Microsoft Azure
8:48
staff engineer. He's a Microsoft Azure architect and an enterprise architect.
8:51
architect and an enterprise architect.
8:52
architect and an enterprise architect. So uh welcome Chandu to the net
8:55
So uh welcome Chandu to the net
8:55
So uh welcome Chandu to the net conference 2025.
8:58
conference 2025.
8:58
conference 2025. Hey uh thank you S.
9:02
Hey uh thank you S.
9:02
Hey uh thank you S. Thanks thanks for your time Chandu. I
9:04
Thanks thanks for your time Chandu. I
9:04
Thanks thanks for your time Chandu. I think we we are connecting for the very
9:06
think we we are connecting for the very
9:06
think we we are connecting for the very first time. Um are you willing to tell
9:09
first time. Um are you willing to tell
9:09
first time. Um are you willing to tell the audience who you are and actually
9:11
the audience who you are and actually
9:11
the audience who you are and actually where you're joining us today from?
9:14
where you're joining us today from?
9:14
where you're joining us today from? Okay sure. So uh this is Chandu uh
9:17
Okay sure. So uh this is Chandu uh
9:17
Okay sure. So uh this is Chandu uh having uh more than 18 plus years of
9:20
having uh more than 18 plus years of
9:20
having uh more than 18 plus years of experience completely into you know the
9:23
experience completely into you know the
9:23
experience completely into you know the Microsoft technology stack. So I started
9:26
Microsoft technology stack. So I started
9:26
Microsoft technology stack. So I started my career from you know net 1.1 to the
9:28
my career from you know net 1.1 to the
9:28
my career from you know net 1.1 to the latest technologies. I joined from hyder
9:31
latest technologies. I joined from hyder
9:31
latest technologies. I joined from hyder basically. So I am working as an sen
9:34
basically. So I am working as an sen
9:34
basically. So I am working as an sen from an you know fortune 65th company.
9:37
from an you know fortune 65th company.
9:37
from an you know fortune 65th company. Yeah. Wow.
9:41
Now that is super cool. So yeah that's
9:43
Now that is super cool. So yeah that's
9:43
Now that is super cool. So yeah that's that's pretty nice. 18 years is a long
9:44
that's pretty nice. 18 years is a long
9:44
that's pretty nice. 18 years is a long time. We were uh uh our team was there
9:47
time. We were uh uh our team was there
9:47
time. We were uh uh our team was there in Hyderabad uh just last week we were
9:49
in Hyderabad uh just last week we were
9:49
in Hyderabad uh just last week we were at CBIT. I think it's one of the
9:51
at CBIT. I think it's one of the
9:51
at CBIT. I think it's one of the colleges there right so we did a
9:53
colleges there right so we did a
9:53
colleges there right so we did a hackathon there in CBIT but 18 years is
9:55
hackathon there in CBIT but 18 years is
9:55
hackathon there in CBIT but 18 years is long I remember I started my career with
9:57
long I remember I started my career with
9:57
long I remember I started my career with C with uh Windows 8 app development that
10:01
C with uh Windows 8 app development that
10:01
C with uh Windows 8 app development that UWP and everything that's that also old
10:04
UWP and everything that's that also old
10:04
UWP and everything that's that also old that is also old I'm not as I'm I'm not
10:06
that is also old I'm not as I'm I'm not
10:06
that is also old I'm not as I'm I'm not a legacy developer like you but I'm not
10:09
a legacy developer like you but I'm not
10:09
a legacy developer like you but I'm not I'm not that no I'm not a legacy
10:11
I'm not that no I'm not a legacy
10:11
I'm not that no I'm not a legacy developer you know currently I'm working
10:13
developer you know currently I'm working
10:13
developer you know currently I'm working on net 9 you know completely into Azure
10:16
on net 9 you know completely into Azure
10:16
on net 9 you know completely into Azure here yeah okay that's that's pretty good
10:19
here yeah okay that's that's pretty good
10:19
here yeah okay that's that's pretty good that's that's very good and So exciting
10:20
that's that's very good and So exciting
10:20
that's that's very good and So exciting Chandu. I know it's at 7 p.m. here in
10:22
Chandu. I know it's at 7 p.m. here in
10:22
Chandu. I know it's at 7 p.m. here in India. So please feel free to go ahead
10:24
India. So please feel free to go ahead
10:24
India. So please feel free to go ahead and share your screen. At the bottom
10:26
and share your screen. At the bottom
10:26
and share your screen. At the bottom you'll find present. If you click on
10:28
you'll find present. If you click on
10:28
you'll find present. If you click on present then share screen and then you
10:30
present then share screen and then you
10:30
present then share screen and then you can select the screen that you want to
10:31
can select the screen that you want to
10:31
can select the screen that you want to present. And everybody in the chat the
10:33
present. And everybody in the chat the
10:33
present. And everybody in the chat the person says hi Chandu. Everybody's in
10:36
person says hi Chandu. Everybody's in
10:36
person says hi Chandu. Everybody's in the chat it's going to be 35 minute
10:37
the chat it's going to be 35 minute
10:37
the chat it's going to be 35 minute session. Now after 35 minutes you know
10:40
session. Now after 35 minutes you know
10:40
session. Now after 35 minutes you know uh we can start the Q&A.
10:49
So, I'm sharing my uh screen.
10:53
So, I'm sharing my uh screen.
10:53
So, I'm sharing my uh screen. So, feel free to stop me. Uh
10:57
So, feel free to stop me. Uh
10:57
So, feel free to stop me. Uh all right. So, I'm going to I'm going to
10:59
all right. So, I'm going to I'm going to
10:59
all right. So, I'm going to I'm going to add your screen to the
11:01
add your screen to the
11:01
add your screen to the stream. Everybody else can see it now
11:04
stream. Everybody else can see it now
11:04
stream. Everybody else can see it now and next 35 minutes is all yours.
11:09
and next 35 minutes is all yours.
11:09
and next 35 minutes is all yours. Okay. Thank you.
11:11
Okay. Thank you.
11:11
Okay. Thank you. So uh today I'm going to cover uh you
11:14
So uh today I'm going to cover uh you
11:14
So uh today I'm going to cover uh you know the blazer part uh basically so the
11:18
know the blazer part uh basically so the
11:18
know the blazer part uh basically so the topic name is unleashing the power of
11:20
topic name is unleashing the power of
11:20
topic name is unleashing the power of blazer the future of uh web development
11:22
blazer the future of uh web development
11:22
blazer the future of uh web development that's what I feel so as I mentioned
11:25
that's what I feel so as I mentioned
11:25
that's what I feel so as I mentioned earlier this is Chandu Shaker uh so
11:28
earlier this is Chandu Shaker uh so
11:28
earlier this is Chandu Shaker uh so currently working as an senior engineer
11:31
currently working as an senior engineer
11:31
currently working as an senior engineer for one of the uh biggest retail company
11:34
for one of the uh biggest retail company
11:34
for one of the uh biggest retail company uh so you know so you know uh I'll start
11:38
uh so you know so you know uh I'll start
11:38
uh so you know so you know uh I'll start with the introduction of to Blazer
11:40
with the introduction of to Blazer
11:40
with the introduction of to Blazer basically. So Blazer is a net print
11:43
basically. So Blazer is a net print
11:43
basically. So Blazer is a net print framework that allows you to build
11:46
framework that allows you to build
11:46
framework that allows you to build applications using C# and Razer
11:48
applications using C# and Razer
11:48
applications using C# and Razer components. So you know uh if you are
11:51
components. So you know uh if you are
11:51
components. So you know uh if you are familiar with the web development uh we
11:53
familiar with the web development uh we
11:54
familiar with the web development uh we are hearing lot of technologies like you
11:55
are hearing lot of technologies like you
11:55
are hearing lot of technologies like you know Angular, React, Vue.js JS and you
11:59
know Angular, React, Vue.js JS and you
11:59
know Angular, React, Vue.js JS and you know different different technologies
12:00
know different different technologies
12:00
know different different technologies but with
12:02
but with
12:02
but with bler we can develop the web application
12:04
bler we can develop the web application
12:04
bler we can develop the web application only with C# and uh with the Razer
12:08
only with C# and uh with the Razer
12:08
only with C# and uh with the Razer components and also we have the
12:10
components and also we have the
12:10
components and also we have the privilege or you know we have uh the
12:12
privilege or you know we have uh the
12:12
privilege or you know we have uh the capability within the blazer that we can
12:15
capability within the blazer that we can
12:15
capability within the blazer that we can interact with the JavaScript as well. So
12:18
interact with the JavaScript as well. So
12:18
interact with the JavaScript as well. So you know it's a powerful tool that
12:20
you know it's a powerful tool that
12:20
you know it's a powerful tool that enables you to create fast interactive
12:22
enables you to create fast interactive
12:22
enables you to create fast interactive and scalable web applications. So you
12:25
and scalable web applications. So you
12:25
and scalable web applications. So you know unlike other JavaScript based
12:27
know unlike other JavaScript based
12:27
know unlike other JavaScript based frameworks, Blazer allows you to write
12:31
frameworks, Blazer allows you to write
12:31
frameworks, Blazer allows you to write rich web applications entirely in C#
12:35
rich web applications entirely in C#
12:35
rich web applications entirely in C# eliminating the need to switch between
12:36
eliminating the need to switch between
12:36
eliminating the need to switch between the languages for backend and print
12:39
the languages for backend and print
12:39
the languages for backend and print development. So we can develop the
12:42
development. So we can develop the
12:42
development. So we can develop the scalable applications the web
12:44
scalable applications the web
12:44
scalable applications the web applications basically entirely in C#.
12:47
applications basically entirely in C#.
12:48
applications basically entirely in C#. It combines the uh power of net with uh
12:51
It combines the uh power of net with uh
12:51
It combines the uh power of net with uh simplicity of modern web development
12:53
simplicity of modern web development
12:53
simplicity of modern web development without relying on the JavaScript. So
12:55
without relying on the JavaScript. So
12:55
without relying on the JavaScript. So that is the biggest advantage of
12:57
that is the biggest advantage of
12:57
that is the biggest advantage of blazer and also uh it simplifies the
13:00
blazer and also uh it simplifies the
13:00
blazer and also uh it simplifies the fullstack development for net developers
13:02
fullstack development for net developers
13:02
fullstack development for net developers by allowing code sharing between the
13:05
by allowing code sharing between the
13:05
by allowing code sharing between the client and server. So it was introduced
13:07
client and server. So it was introduced
13:07
client and server. So it was introduced in 2017 by Steve Sanderson at uh Oslo.
13:11
in 2017 by Steve Sanderson at uh Oslo.
13:11
in 2017 by Steve Sanderson at uh Oslo. It leverages basically you know the web
13:13
It leverages basically you know the web
13:13
It leverages basically you know the web assembly for client side execution. So
13:15
assembly for client side execution. So
13:15
assembly for client side execution. So the blazer the name you know the history
13:18
the blazer the name you know the history
13:18
the blazer the name you know the history behind it is a mix of browser and razor.
13:21
behind it is a mix of browser and razor.
13:21
behind it is a mix of browser and razor. So you know reflecting its ability to
13:23
So you know reflecting its ability to
13:23
So you know reflecting its ability to run C# code in the browser replacing the
13:27
run C# code in the browser replacing the
13:27
run C# code in the browser replacing the traditional server side rendering within
13:29
traditional server side rendering within
13:29
traditional server side rendering within uh client side approach. So this is all
13:32
uh client side approach. So this is all
13:32
uh client side approach. So this is all about the introduction to blazer. So you
13:34
about the introduction to blazer. So you
13:34
about the introduction to blazer. So you know I would like to give an dive into
13:36
know I would like to give an dive into
13:36
know I would like to give an dive into the blazer. Uh so you know I would like
13:39
the blazer. Uh so you know I would like
13:39
the blazer. Uh so you know I would like to start with the key features of
13:41
to start with the key features of
13:41
to start with the key features of blazer. So Blazer supports or you know
13:45
blazer. So Blazer supports or you know
13:45
blazer. So Blazer supports or you know blazer is an component based
13:47
blazer is an component based
13:47
blazer is an component based architecture. So build we can build the
13:50
architecture. So build we can build the
13:50
architecture. So build we can build the reusable UI components with C#, HTML and
13:54
reusable UI components with C#, HTML and
13:54
reusable UI components with C#, HTML and CSS like we do in Angular or React. You
13:57
CSS like we do in Angular or React. You
13:57
CSS like we do in Angular or React. You know we'll have the same sort of thing
13:59
know we'll have the same sort of thing
13:59
know we'll have the same sort of thing like you know we can build our
14:01
like you know we can build our
14:01
like you know we can build our components. It supports you know two
14:04
components. It supports you know two
14:04
components. It supports you know two hosting models. I said two but I
14:06
hosting models. I said two but I
14:06
hosting models. I said two but I mentioned three. I'll give you the
14:08
mentioned three. I'll give you the
14:08
mentioned three. I'll give you the history as well. you know till net 6 or
14:11
history as well. you know till net 6 or
14:11
history as well. you know till net 6 or 7 uh we have a web blazer server and the
14:14
7 uh we have a web blazer server and the
14:14
7 uh we have a web blazer server and the blazer web assembly but in net 8 onwards
14:18
blazer web assembly but in net 8 onwards
14:18
blazer web assembly but in net 8 onwards you know we are having the blazer web
14:19
you know we are having the blazer web
14:19
you know we are having the blazer web assembly and blazer hybrid so the blazer
14:22
assembly and blazer hybrid so the blazer
14:22
assembly and blazer hybrid so the blazer server is basically you know it supports
14:25
server is basically you know it supports
14:25
server is basically you know it supports server side rendering with realtime
14:27
server side rendering with realtime
14:27
server side rendering with realtime updates via signal whereas uh the blazer
14:31
updates via signal whereas uh the blazer
14:31
updates via signal whereas uh the blazer web assembly is in you know the client
14:33
web assembly is in you know the client
14:33
web assembly is in you know the client side rendering so you know uh typically
14:36
side rendering so you know uh typically
14:36
side rendering so you know uh typically it works as in web assembly rendering
14:38
it works as in web assembly rendering
14:38
it works as in web assembly rendering like you the code whatever is compiled
14:40
like you the code whatever is compiled
14:40
like you the code whatever is compiled will be downloaded to the browser side
14:43
will be downloaded to the browser side
14:43
will be downloaded to the browser side and from there you know it will operates
14:46
and from there you know it will operates
14:46
and from there you know it will operates whereas blazer hybrid from net 8 onwards
14:49
whereas blazer hybrid from net 8 onwards
14:49
whereas blazer hybrid from net 8 onwards you know it will have uh you know it
14:52
you know it will have uh you know it
14:52
you know it will have uh you know it targets basically uh the web desktop you
14:55
targets basically uh the web desktop you
14:55
targets basically uh the web desktop you know the maui basically you know I'm
14:56
know the maui basically you know I'm
14:56
know the maui basically you know I'm talking about so as as as I mentioned
14:59
talking about so as as as I mentioned
14:59
talking about so as as as I mentioned you know the blazer supports the uh web
15:02
you know the blazer supports the uh web
15:02
you know the blazer supports the uh web development as well as the desktop
15:04
development as well as the desktop
15:04
development as well as the desktop development and mobile development
15:08
development and mobile development
15:08
development and mobile development And also it supports you know the
15:10
And also it supports you know the
15:10
And also it supports you know the JavaScript interoperability meaning that
15:12
JavaScript interoperability meaning that
15:12
JavaScript interoperability meaning that you know it integrates with the existing
15:14
you know it integrates with the existing
15:14
you know it integrates with the existing JavaScript libraries as well as from
15:17
JavaScript libraries as well as from
15:17
JavaScript libraries as well as from JavaScript we can able to call the C#
15:21
JavaScript we can able to call the C#
15:21
JavaScript we can able to call the C# code as well. So you know when we are
15:24
code as well. So you know when we are
15:24
code as well. So you know when we are looking back into the history like you
15:26
looking back into the history like you
15:26
looking back into the history like you know when we have ASP.NET
15:28
know when we have ASP.NET
15:28
know when we have ASP.NET uh ASP.NET MVC you know whatever you
15:31
uh ASP.NET MVC you know whatever you
15:31
uh ASP.NET MVC you know whatever you know we develop you know somehow we rely
15:34
know we develop you know somehow we rely
15:34
know we develop you know somehow we rely on the JavaScript here also you know it
15:36
on the JavaScript here also you know it
15:36
on the JavaScript here also you know it supports the same sort of thing but uh
15:39
supports the same sort of thing but uh
15:39
supports the same sort of thing but uh it's more into razor and you know more
15:41
it's more into razor and you know more
15:41
it's more into razor and you know more into the C# kind of thing. So these are
15:44
into the C# kind of thing. So these are
15:44
into the C# kind of thing. So these are the key features of
15:46
the key features of
15:46
the key features of blazer. Uh so you know I would like to
15:50
blazer. Uh so you know I would like to
15:50
blazer. Uh so you know I would like to elaborate more on the component based
15:54
elaborate more on the component based
15:54
elaborate more on the component based architecture. So
15:56
architecture. So
15:56
architecture. So uh blazer apps are based on the
16:00
uh blazer apps are based on the
16:00
uh blazer apps are based on the components. So a component in blazer is
16:03
components. So a component in blazer is
16:03
components. So a component in blazer is an element of UI. Say for example you
16:05
an element of UI. Say for example you
16:05
an element of UI. Say for example you know we can the button is a
16:09
know we can the button is a
16:09
know we can the button is a component. So you know uh any element of
16:14
component. So you know uh any element of
16:14
component. So you know uh any element of UI is an component such as a page or a
16:16
UI is an component such as a page or a
16:16
UI is an component such as a page or a dialogue or in data entry form you know
16:20
dialogue or in data entry form you know
16:20
dialogue or in data entry form you know whatever you know we'll call it as an
16:22
whatever you know we'll call it as an
16:22
whatever you know we'll call it as an component components are net car classes
16:25
component components are net car classes
16:25
component components are net car classes built into net assemblies basically so
16:28
built into net assemblies basically so
16:28
built into net assemblies basically so it defines the flexible UI rendering
16:30
it defines the flexible UI rendering
16:30
it defines the flexible UI rendering logic handle user events can be nested
16:34
logic handle user events can be nested
16:34
logic handle user events can be nested and reused so the main purpose is you
16:37
and reused so the main purpose is you
16:37
and reused so the main purpose is you know reusability so it increases the
16:40
know reusability so it increases the
16:40
know reusability so it increases the reusable if we create the components in
16:42
reusable if we create the components in
16:42
reusable if we create the components in an appropriate
16:44
an appropriate
16:44
an appropriate way and also the components the
16:46
way and also the components the
16:46
way and also the components the component class is as usually written in
16:49
component class is as usually written in
16:49
component class is as usually written in the form of razor markup language with
16:52
the form of razor markup language with
16:52
the form of razor markup language with dotrazer file extension. Razer is a
16:55
dotrazer file extension. Razer is a
16:55
dotrazer file extension. Razer is a syntax for combining HTML markup with C#
16:58
syntax for combining HTML markup with C#
16:58
syntax for combining HTML markup with C# code and designed for developer
17:00
code and designed for developer
17:00
code and designed for developer productivity. So see here you know on
17:02
productivity. So see here you know on
17:02
productivity. So see here you know on the right hand side I mentioned you know
17:04
the right hand side I mentioned you know
17:04
the right hand side I mentioned you know um the code basically you know at the
17:06
um the code basically you know at the
17:06
um the code basically you know at the rate code and then we are writing the
17:09
rate code and then we are writing the
17:09
rate code and then we are writing the methods that can be invoked. See here
17:11
methods that can be invoked. See here
17:11
methods that can be invoked. See here the increment count is a method that is
17:15
the increment count is a method that is
17:15
the increment count is a method that is being used at on click. So you know this
17:18
being used at on click. So you know this
17:18
being used at on click. So you know this method is being called here. So the
17:21
method is being called here. So the
17:21
method is being called here. So the components render into an inmemory
17:23
components render into an inmemory
17:24
components render into an inmemory representation of the browser's
17:25
representation of the browser's
17:25
representation of the browser's documentation that is DOM basically you
17:27
documentation that is DOM basically you
17:27
documentation that is DOM basically you know called render a tree which is used
17:30
know called render a tree which is used
17:30
know called render a tree which is used to update the UI in flexible and
17:33
to update the UI in flexible and
17:33
to update the UI in flexible and efficient way. Okay. So this is all
17:35
efficient way. Okay. So this is all
17:35
efficient way. Okay. So this is all about the component based architecture.
17:37
about the component based architecture.
17:37
about the component based architecture. So you know now I would like to you know
17:39
So you know now I would like to you know
17:39
So you know now I would like to you know go into the hosting
17:41
go into the hosting
17:41
go into the hosting models.
17:45
So as I mentioned uh you know one of the
17:48
So as I mentioned uh you know one of the
17:48
So as I mentioned uh you know one of the hosting model is blazer server. So it
17:51
hosting model is blazer server. So it
17:51
hosting model is blazer server. So it supports hosting of the Razer components
17:54
supports hosting of the Razer components
17:54
supports hosting of the Razer components on the server in an ASP.NET core
17:57
on the server in an ASP.NET core
17:57
on the server in an ASP.NET core environment. So you know assume that you
17:59
environment. So you know assume that you
17:59
environment. So you know assume that you know uh this is the server and uh we
18:01
know uh this is the server and uh we
18:02
know uh this is the server and uh we have the
18:03
have the
18:03
have the ASP.NET core here and you know resides
18:06
ASP.NET core here and you know resides
18:06
ASP.NET core here and you know resides that you know we'll have the tazer
18:08
that you know we'll have the tazer
18:08
that you know we'll have the tazer components. So these razor components
18:11
components. So these razor components
18:11
components. So these razor components basically you know will be rendered as
18:14
basically you know will be rendered as
18:14
basically you know will be rendered as in DOM but you know the interactivity
18:17
in DOM but you know the interactivity
18:17
in DOM but you know the interactivity will be happen through
18:19
will be happen through
18:19
will be happen through signaler. So uh here I I'll go uh into
18:22
signaler. So uh here I I'll go uh into
18:22
signaler. So uh here I I'll go uh into deep. So you know the UI updates and
18:26
deep. So you know the UI updates and
18:26
deep. So you know the UI updates and event handling and the JS calls are
18:28
event handling and the JS calls are
18:28
event handling and the JS calls are handled over signal connection using the
18:31
handled over signal connection using the
18:31
handled over signal connection using the websocket protocol. So in a way it's a
18:35
websocket protocol. So in a way it's a
18:35
websocket protocol. So in a way it's a blessing uh because you know the end
18:38
blessing uh because you know the end
18:38
blessing uh because you know the end user doesn't know that uh something is
18:41
user doesn't know that uh something is
18:41
user doesn't know that uh something is happening. So it will give an single
18:43
happening. So it will give an single
18:44
happening. So it will give an single page application
18:46
page application
18:46
page application uh kind of field to the end user but
18:49
uh kind of field to the end user but
18:49
uh kind of field to the end user but internally it uses signaler and it will
18:52
internally it uses signaler and it will
18:52
internally it uses signaler and it will communicate through websockets protocol.
18:55
communicate through websockets protocol.
18:55
communicate through websockets protocol. the runtime stays on the server side um
18:58
the runtime stays on the server side um
18:58
the runtime stays on the server side um and uh executes the you know the
18:59
and uh executes the you know the
19:00
and uh executes the you know the application C#ar code and sending the UI
19:02
application C#ar code and sending the UI
19:02
application C#ar code and sending the UI events from the browser to the server
19:04
events from the browser to the server
19:04
events from the browser to the server and also you know applying the applying
19:06
and also you know applying the applying
19:06
and also you know applying the applying back the UI updates to render the
19:09
back the UI updates to render the
19:09
back the UI updates to render the component that are sent back by the
19:11
component that are sent back by the
19:11
component that are sent back by the server. So the changes will be applied
19:13
server. So the changes will be applied
19:13
server. So the changes will be applied on the DOM side but you know the
19:16
on the DOM side but you know the
19:16
on the DOM side but you know the communication will be happened through
19:18
communication will be happened through
19:18
communication will be happened through signal arc in blazer server hosting
19:20
signal arc in blazer server hosting
19:20
signal arc in blazer server hosting model. So when a razor page or a view is
19:23
model. So when a razor page or a view is
19:23
model. So when a razor page or a view is rendered to the browser, every line of
19:26
rendered to the browser, every line of
19:26
rendered to the browser, every line of Razer code emits the HTML in text format
19:31
Razer code emits the HTML in text format
19:31
Razer code emits the HTML in text format so that you know it will be rendered the
19:33
so that you know it will be rendered the
19:33
so that you know it will be rendered the HTML will be rendered on the DOM side or
19:36
HTML will be rendered on the DOM side or
19:36
HTML will be rendered on the DOM side or the browser side. The blazer produces a
19:39
the browser side. The blazer produces a
19:39
the browser side. The blazer produces a graph of the components. So you know uh
19:41
graph of the components. So you know uh
19:41
graph of the components. So you know uh all the components that are rendered as
19:44
all the components that are rendered as
19:44
all the components that are rendered as in
19:45
in
19:45
in HTML will be rendered as a graph of the
19:48
HTML will be rendered as a graph of the
19:48
HTML will be rendered as a graph of the components to display on uh you know to
19:52
components to display on uh you know to
19:52
components to display on uh you know to display basically similar to HTML or you
19:54
display basically similar to HTML or you
19:54
display basically similar to HTML or you know the XML dom a component is disposed
19:58
know the XML dom a component is disposed
19:58
know the XML dom a component is disposed after the user navigates to another
20:00
after the user navigates to another
20:00
after the user navigates to another place. So to you know get the memory
20:02
place. So to you know get the memory
20:02
place. So to you know get the memory optimization. So whenever we are
20:04
optimization. So whenever we are
20:04
optimization. So whenever we are navigating from one component to another
20:06
navigating from one component to another
20:06
navigating from one component to another component the it will dispose that
20:09
component the it will dispose that
20:09
component the it will dispose that particular component which is being uh
20:12
particular component which is being uh
20:12
particular component which is being uh you know
20:13
you know
20:13
you know rendered. So after the UA components are
20:16
rendered. So after the UA components are
20:16
rendered. So after the UA components are interactive on the UI and you know the
20:18
interactive on the UI and you know the
20:18
interactive on the UI and you know the UI updates are triggered by the user
20:20
UI updates are triggered by the user
20:20
UI updates are triggered by the user interactions and the app events when an
20:24
interactions and the app events when an
20:24
interactions and the app events when an update occurs the component graph is
20:26
update occurs the component graph is
20:26
update occurs the component graph is rendered. you know I I already mentioned
20:28
rendered. you know I I already mentioned
20:28
rendered. you know I I already mentioned and also you know the signaler basically
20:30
and also you know the signaler basically
20:30
and also you know the signaler basically you know everybody knows about the
20:32
you know everybody knows about the
20:32
you know everybody knows about the signaler but you know to be
20:36
signaler but you know to be
20:36
signaler but you know to be uh to be on the point here you know on
20:39
uh to be on the point here you know on
20:39
uh to be on the point here you know on this context signal is an powerful
20:41
this context signal is an powerful
20:41
this context signal is an powerful library uh developed by Microsoft that
20:45
library uh developed by Microsoft that
20:45
library uh developed by Microsoft that uh know seamlessly incorporate realtime
20:47
uh know seamlessly incorporate realtime
20:47
uh know seamlessly incorporate realtime functionality into applications so it
20:51
functionality into applications so it
20:51
functionality into applications so it allows you to push content from the
20:53
allows you to push content from the
20:53
allows you to push content from the server to connected clients in the real
20:55
server to connected clients in the real
20:56
server to connected clients in the real time so That's how the signal works. So
20:58
time so That's how the signal works. So
20:58
time so That's how the signal works. So now I'm know uh going to blazer web
21:04
now I'm know uh going to blazer web
21:04
now I'm know uh going to blazer web assembly. So the blazer web assembly is
21:08
assembly. So the blazer web assembly is
21:08
assembly. So the blazer web assembly is completely a different approach from the
21:11
completely a different approach from the
21:11
completely a different approach from the blazer. So you know blazer web assembly
21:14
blazer. So you know blazer web assembly
21:14
blazer. So you know blazer web assembly is an single page application framework
21:16
is an single page application framework
21:16
is an single page application framework for building the interactive client side
21:18
for building the interactive client side
21:18
for building the interactive client side web apps withn
21:20
web apps withn
21:20
web apps withn net and uh running net code inside the
21:26
net and uh running net code inside the
21:26
net and uh running net code inside the browser is made possible by web web
21:28
browser is made possible by web web
21:28
browser is made possible by web web assembly as I mentioned. So you know
21:31
assembly as I mentioned. So you know
21:31
assembly as I mentioned. So you know whenever a web assembly project is
21:34
whenever a web assembly project is
21:34
whenever a web assembly project is application is built and run you know
21:37
application is built and run you know
21:37
application is built and run you know four things will happen. The C# code
21:39
four things will happen. The C# code
21:39
four things will happen. The C# code files and rather files are compiled into
21:42
files and rather files are compiled into
21:42
files and rather files are compiled into net assemblies and those assemblies will
21:45
net assemblies and those assemblies will
21:45
net assemblies and those assemblies will be downloaded to the
21:47
be downloaded to the
21:47
be downloaded to the browser and blazer boot you know the
21:50
browser and blazer boot you know the
21:50
browser and blazer boot you know the blazer web assembly bootstrap the net
21:53
blazer web assembly bootstrap the net
21:53
blazer web assembly bootstrap the net web assembly runtime and configures the
21:56
web assembly runtime and configures the
21:56
web assembly runtime and configures the runtime to load the assemblies for the
21:58
runtime to load the assemblies for the
21:58
runtime to load the assemblies for the application. So you know everything will
21:59
application. So you know everything will
21:59
application. So you know everything will be bootstrapped and you know downloaded
22:00
be bootstrapped and you know downloaded
22:00
be bootstrapped and you know downloaded to the browser. The runtime uses. So
22:04
to the browser. The runtime uses. So
22:04
to the browser. The runtime uses. So here it is not like blazer server app
22:08
here it is not like blazer server app
22:08
here it is not like blazer server app but here you know the way it works is
22:10
but here you know the way it works is
22:10
but here you know the way it works is the runtime uses the JavaScript interop
22:12
the runtime uses the JavaScript interop
22:12
the runtime uses the JavaScript interop to handle the DOM manipulations and
22:14
to handle the DOM manipulations and
22:14
to handle the DOM manipulations and browser API
22:16
browser API
22:16
browser API calls and blazer web assembly optimizes
22:19
calls and blazer web assembly optimizes
22:19
calls and blazer web assembly optimizes the payload size to reduce the download
22:21
the payload size to reduce the download
22:21
the payload size to reduce the download times. So if you are building an you
22:23
times. So if you are building an you
22:23
times. So if you are building an you know very big application the download
22:25
know very big application the download
22:25
know very big application the download time will be very you know will be huge.
22:28
time will be very you know will be huge.
22:28
time will be very you know will be huge. So you know to reduce that basically
22:30
So you know to reduce that basically
22:30
So you know to reduce that basically what they are doing is you know unused
22:32
what they are doing is you know unused
22:32
what they are doing is you know unused code is shipped out of the app when it
22:34
code is shipped out of the app when it
22:34
code is shipped out of the app when it is published by the IL trimmer and HTTP
22:38
is published by the IL trimmer and HTTP
22:38
is published by the IL trimmer and HTTP response are compressed the net runtime
22:41
response are compressed the net runtime
22:41
response are compressed the net runtime and assemblies are catched in the
22:42
and assemblies are catched in the
22:42
and assemblies are catched in the browser. So this is how you know uh on
22:45
browser. So this is how you know uh on
22:45
browser. So this is how you know uh on an high level it's all about the blazer
22:48
an high level it's all about the blazer
22:48
an high level it's all about the blazer web assembly. So I think I'm good. So
22:51
web assembly. So I think I'm good. So
22:51
web assembly. So I think I'm good. So any questions for me?
22:54
Uh okay
22:57
Uh okay
22:57
Uh okay fine. So now I'm going to
23:01
fine. So now I'm going to
23:01
fine. So now I'm going to uh
23:05
the blazer hybrid. So it is from net 8.
23:09
the blazer hybrid. So it is from net 8.
23:09
the blazer hybrid. So it is from net 8. Uh you know this functionality or you
23:11
Uh you know this functionality or you
23:11
Uh you know this functionality or you know this one is uh coming from the net
23:14
know this one is uh coming from the net
23:14
know this one is uh coming from the net 8. So Blazer hybrid enables using the
23:17
8. So Blazer hybrid enables using the
23:17
8. So Blazer hybrid enables using the Razer components in an native client tab
23:20
Razer components in an native client tab
23:20
Razer components in an native client tab with a blend of native and web
23:22
with a blend of native and web
23:22
with a blend of native and web technologies for the web mobile and
23:23
technologies for the web mobile and
23:23
technologies for the web mobile and desktop platform. So basically uh the
23:26
desktop platform. So basically uh the
23:26
desktop platform. So basically uh the code runs natively in the net process
23:28
code runs natively in the net process
23:28
code runs natively in the net process and renders the web UA to an embedded
23:31
and renders the web UA to an embedded
23:31
and renders the web UA to an embedded web view control. So web assembly isn't
23:35
web view control. So web assembly isn't
23:35
web view control. So web assembly isn't used in hybrid apps but it uses you know
23:38
used in hybrid apps but it uses you know
23:38
used in hybrid apps but it uses you know it the hybrid apps are built with net
23:41
it the hybrid apps are built with net
23:41
it the hybrid apps are built with net maui which is a crossplatform framework
23:44
maui which is a crossplatform framework
23:44
maui which is a crossplatform framework for creating native mobile and desktop
23:47
for creating native mobile and desktop
23:47
for creating native mobile and desktop apps with car and zaml. So blazer hybrid
23:51
apps with car and zaml. So blazer hybrid
23:51
apps with car and zaml. So blazer hybrid supports WPF and Windows forms to
23:54
supports WPF and Windows forms to
23:54
supports WPF and Windows forms to transition applications from earlier
23:57
transition applications from earlier
23:57
transition applications from earlier technology to net mode. So it
23:59
technology to net mode. So it
23:59
technology to net mode. So it particularly well suited for the
24:01
particularly well suited for the
24:01
particularly well suited for the building the applications that needed to
24:02
building the applications that needed to
24:02
building the applications that needed to run both desktop mobile platforms. So
24:05
run both desktop mobile platforms. So
24:05
run both desktop mobile platforms. So this is all about blazer app. So I'll
24:08
this is all about blazer app. So I'll
24:08
this is all about blazer app. So I'll talk about you know benefits,
24:11
talk about you know benefits,
24:11
talk about you know benefits, limitations and challenges but you know
24:13
limitations and challenges but you know
24:13
limitations and challenges but you know I'll come to this slide later point of
24:15
I'll come to this slide later point of
24:15
I'll come to this slide later point of time but I would like to cover the
24:17
time but I would like to cover the
24:17
time but I would like to cover the reasons to adopt
24:19
reasons to adopt
24:19
reasons to adopt Blazer. Okay. So uh the blazer offers
24:23
Blazer. Okay. So uh the blazer offers
24:23
Blazer. Okay. So uh the blazer offers unified development language. So Blazer
24:26
unified development language. So Blazer
24:26
unified development language. So Blazer allows you to use
24:27
allows you to use
24:27
allows you to use C# you know for both front end and
24:30
C# you know for both front end and
24:30
C# you know for both front end and backend development reducing the need to
24:33
backend development reducing the need to
24:33
backend development reducing the need to switch the switch between the languages.
24:35
switch the switch between the languages.
24:35
switch the switch between the languages. So Angular React primarily uses
24:38
So Angular React primarily uses
24:38
So Angular React primarily uses JavaScript TypeScript which might
24:39
JavaScript TypeScript which might
24:40
JavaScript TypeScript which might require additional learning for a net
24:42
require additional learning for a net
24:42
require additional learning for a net developer. But you know if you are
24:43
developer. But you know if you are
24:43
developer. But you know if you are developing the
24:44
developing the
24:44
developing the application using blazer you doesn't
24:47
application using blazer you doesn't
24:47
application using blazer you doesn't need to you can develop the web web
24:50
need to you can develop the web web
24:50
need to you can develop the web web application with the help of shar and
24:53
application with the help of shar and
24:53
application with the help of shar and also you know it it it offers seamless
24:55
also you know it it it offers seamless
24:55
also you know it it it offers seamless integration with net blazer integrates
24:59
integration with net blazer integrates
24:59
integration with net blazer integrates you know deeply with the net ecosystem
25:01
you know deeply with the net ecosystem
25:01
you know deeply with the net ecosystem making it easier to use existing
25:03
making it easier to use existing
25:03
making it easier to use existing libraries and tools. This can be
25:06
libraries and tools. This can be
25:06
libraries and tools. This can be streamlined development process for
25:08
streamlined development process for
25:08
streamlined development process for teams already using net technology. So
25:11
teams already using net technology. So
25:11
teams already using net technology. So you know it offers seamless integration
25:13
you know it offers seamless integration
25:13
you know it offers seamless integration with the net and also uh it offers
25:17
with the net and also uh it offers
25:17
with the net and also uh it offers component reusability. So blazer
25:19
component reusability. So blazer
25:19
component reusability. So blazer components can be reused across
25:21
components can be reused across
25:21
components can be reused across different different platforms including
25:23
different different platforms including
25:23
different different platforms including web mobile and desktop applications
25:26
web mobile and desktop applications
25:26
web mobile and desktop applications through net mi and also you know the
25:30
through net mi and also you know the
25:30
through net mi and also you know the angular and react when it comes to
25:31
angular and react when it comes to
25:31
angular and react when it comes to angular and react it al supports the
25:33
angular and react it al supports the
25:33
angular and react it al supports the component based architecture but may
25:35
component based architecture but may
25:35
component based architecture but may require different frameworks for mobile
25:37
require different frameworks for mobile
25:37
require different frameworks for mobile and desktop but in you know in if you're
25:41
and desktop but in you know in if you're
25:41
and desktop but in you know in if you're developing an
25:42
developing an
25:42
developing an application targeting
25:44
application targeting
25:44
application targeting crossplatforms with the help of net moi
25:47
crossplatforms with the help of net moi
25:47
crossplatforms with the help of net moi you know we
25:49
you know we
25:49
you know we develop the applications to support the
25:52
develop the applications to support the
25:52
develop the applications to support the cross
25:54
cross
25:54
cross platforms and uh when it comes to the
25:57
platforms and uh when it comes to the
25:57
platforms and uh when it comes to the performance improvements like you know
25:58
performance improvements like you know
25:58
performance improvements like you know the blazer web assembly has significant
26:01
the blazer web assembly has significant
26:01
the blazer web assembly has significant performance enhancements with net 8 I
26:04
performance enhancements with net 8 I
26:04
performance enhancements with net 8 I see uh as in you know I'm past 2 years
26:08
see uh as in you know I'm past 2 years
26:08
see uh as in you know I'm past 2 years or 3 years I'm working on blazer so with
26:10
or 3 years I'm working on blazer so with
26:10
or 3 years I'm working on blazer so with net 8 I'm seeing lot of enhancements
26:14
net 8 I'm seeing lot of enhancements
26:14
net 8 I'm seeing lot of enhancements uh so including the reduced app sizes
26:17
uh so including the reduced app sizes
26:17
uh so including the reduced app sizes and foster load times. Uh, Angular and
26:20
and foster load times. Uh, Angular and
26:20
and foster load times. Uh, Angular and React have their own performance
26:21
React have their own performance
26:21
React have their own performance optimizations but may not benefit from
26:24
optimizations but may not benefit from
26:24
optimizations but may not benefit from the same level of integration with net.
26:27
the same level of integration with net.
26:27
the same level of integration with net. So these are the you know four reasons I
26:31
So these are the you know four reasons I
26:31
So these are the you know four reasons I mentioned uh as uh you know the main
26:34
mentioned uh as uh you know the main
26:34
mentioned uh as uh you know the main reasons to adopt the blazer. So when to
26:38
reasons to adopt the blazer. So when to
26:38
reasons to adopt the blazer. So when to adopt the blazer? So you know we have
26:40
adopt the blazer? So you know we have
26:40
adopt the blazer? So you know we have angular, we have react and we have
26:42
angular, we have react and we have
26:42
angular, we have react and we have legacy application. So you know it is
26:45
legacy application. So you know it is
26:45
legacy application. So you know it is very important to know when to adopt the
26:48
very important to know when to adopt the
26:48
very important to know when to adopt the blazer. So if you are having an existing
26:51
blazer. So if you are having an existing
26:51
blazer. So if you are having an existing net
26:52
net
26:52
net infrastructure then you know it is
26:54
infrastructure then you know it is
26:54
infrastructure then you know it is better to adopt blazer to modernize your
26:58
better to adopt blazer to modernize your
26:58
better to adopt blazer to modernize your application. So if your organization has
27:00
application. So if your organization has
27:00
application. So if your organization has an uh you know uh already has a
27:02
an uh you know uh already has a
27:02
an uh you know uh already has a significant investment in net
27:04
significant investment in net
27:04
significant investment in net technologies adopting blazer can
27:06
technologies adopting blazer can
27:06
technologies adopting blazer can leverage existing skills and
27:08
leverage existing skills and
27:08
leverage existing skills and infrastructure. So and also the
27:11
infrastructure. So and also the
27:11
infrastructure. So and also the fullstack development as I mentioned uh
27:12
fullstack development as I mentioned uh
27:12
fullstack development as I mentioned uh you know through C#
27:16
you know through C#
27:16
you know through C# uh we can develop both front end as well
27:19
uh we can develop both front end as well
27:19
uh we can develop both front end as well as the backend code and also uh this is
27:24
as the backend code and also uh this is
27:24
as the backend code and also uh this is also I mentioned like you know the
27:25
also I mentioned like you know the
27:25
also I mentioned like you know the crossplatform application support with
27:27
crossplatform application support with
27:27
crossplatform application support with the net moi you know we can able
27:31
the net moi you know we can able
27:31
the net moi you know we can able to develop the crossplatform
27:34
to develop the crossplatform
27:34
to develop the crossplatform applications and also the realtime
27:36
applications and also the realtime
27:36
applications and also the realtime applications. So if you are looking into
27:38
applications. So if you are looking into
27:38
applications. So if you are looking into the blazer server uh you know it
27:41
the blazer server uh you know it
27:41
the blazer server uh you know it communicates from client to server using
27:44
communicates from client to server using
27:44
communicates from client to server using signal right so you know uh it is well
27:47
signal right so you know uh it is well
27:47
signal right so you know uh it is well suited for the realtime applications
27:49
suited for the realtime applications
27:49
suited for the realtime applications where server side rendering and the
27:51
where server side rendering and the
27:51
where server side rendering and the constant server connections are
27:54
constant server connections are
27:54
constant server connections are beneficial so and you know the long-term
27:58
beneficial so and you know the long-term
27:58
beneficial so and you know the long-term project so you know if you are going
27:59
project so you know if you are going
27:59
project so you know if you are going with angular or react or any other open
28:04
with angular or react or any other open
28:04
with angular or react or any other open sources like you know will the
28:06
sources like you know will the
28:06
sources like you know will the maintenance will be heavy because you
28:08
maintenance will be heavy because you
28:08
maintenance will be heavy because you know we may develop using few libraries
28:11
know we may develop using few libraries
28:11
know we may develop using few libraries those will be obsolated at one point of
28:14
those will be obsolated at one point of
28:14
those will be obsolated at one point of time and you
28:16
time and you
28:16
time and you know yeah so you know as it is uh net uh
28:22
know yeah so you know as it is uh net uh
28:22
know yeah so you know as it is uh net uh as it is in fully built on top of the
28:25
as it is in fully built on top of the
28:26
as it is in fully built on top of the net and we have a Microsoft community so
28:28
net and we have a Microsoft community so
28:28
net and we have a Microsoft community so you know for long-term projects you know
28:30
you know for long-term projects you know
28:30
you know for long-term projects you know it is suitable so you know these five
28:33
it is suitable so you know these five
28:33
it is suitable so you know these five factors I mentioned uh you know based on
28:36
factors I mentioned uh you know based on
28:36
factors I mentioned uh you know based on these these five factors you know we can
28:37
these these five factors you know we can
28:37
these these five factors you know we can adopt the blazer and you know the
28:41
adopt the blazer and you know the
28:41
adopt the blazer and you know the technical highlights basically you know
28:42
technical highlights basically you know
28:42
technical highlights basically you know uh I would like to highlight like you
28:44
uh I would like to highlight like you
28:44
uh I would like to highlight like you know blazer supports uh standard DOM
28:46
know blazer supports uh standard DOM
28:46
know blazer supports uh standard DOM events like you know on click on change
28:48
events like you know on click on change
28:48
events like you know on click on change and you know it also supports the custom
28:51
and you know it also supports the custom
28:51
and you know it also supports the custom events so the supported events are mouse
28:53
events so the supported events are mouse
28:54
events so the supported events are mouse events keyboard events events focus
28:56
events keyboard events events focus
28:56
events keyboard events events focus events and keyboard
28:58
events and keyboard
28:58
events and keyboard events like here I mentioned all uh the
29:02
events like here I mentioned all uh the
29:02
events like here I mentioned all uh the mouse events keyboard events so the
29:05
mouse events keyboard events so the
29:05
mouse events keyboard events so the event types you Say for example we have
29:07
event types you Say for example we have
29:07
event types you Say for example we have a button and we have an event called on
29:10
a button and we have an event called on
29:10
a button and we have an event called on click. So we'll mention at the rate on
29:13
click. So we'll mention at the rate on
29:13
click. So we'll mention at the rate on click and that particular method name
29:15
click and that particular method name
29:15
click and that particular method name and uh in the C# code we'll write the
29:17
and uh in the C# code we'll write the
29:17
and uh in the C# code we'll write the particular
29:19
particular
29:19
particular logic. So this is how we'll handle the
29:21
logic. So this is how we'll handle the
29:21
logic. So this is how we'll handle the events and uh the validations also you
29:25
events and uh the validations also you
29:25
events and uh the validations also you know it is pretty much easy. It supports
29:27
know it is pretty much easy. It supports
29:27
know it is pretty much easy. It supports the data annotations. So we'll open a
29:30
the data annotations. So we'll open a
29:30
the data annotations. So we'll open a tag edit form and we'll bind the model
29:34
tag edit form and we'll bind the model
29:34
tag edit form and we'll bind the model and we'll you know mention onv validate
29:38
and we'll you know mention onv validate
29:38
and we'll you know mention onv validate submit onv valid submit basically so
29:41
submit onv valid submit basically so
29:41
submit onv valid submit basically so where we'll call the data annotations to
29:44
where we'll call the data annotations to
29:44
where we'll call the data annotations to validate that particular model which we
29:46
validate that particular model which we
29:46
validate that particular model which we have b. So in the validation summary tag
29:49
have b. So in the validation summary tag
29:49
have b. So in the validation summary tag we'll get the validation error.
29:52
we'll get the validation error.
29:52
we'll get the validation error. So we'll have different different
29:55
So we'll have different different
29:55
So we'll have different different validations right you know the required
29:57
validations right you know the required
29:57
validations right you know the required range all other
30:00
range all other
30:01
range all other uh data annotations will be supported by
30:05
uh data annotations will be supported by
30:05
uh data annotations will be supported by blazer and we have JS interoptability.
30:08
blazer and we have JS interoptability.
30:08
blazer and we have JS interoptability. So Blazer allows calling JavaScript from
30:11
So Blazer allows calling JavaScript from
30:11
So Blazer allows calling JavaScript from C# vice versa like you know from C# also
30:14
C# vice versa like you know from C# also
30:14
C# vice versa like you know from C# also you know we can call the JavaScript from
30:15
you know we can call the JavaScript from
30:16
you know we can call the JavaScript from JavaScript also you know we can call the
30:18
JavaScript also you know we can call the
30:18
JavaScript also you know we can call the uh C# method. So we Microsoft provides
30:22
uh C# method. So we Microsoft provides
30:22
uh C# method. So we Microsoft provides IGS runtime to invoke JavaScript
30:25
IGS runtime to invoke JavaScript
30:25
IGS runtime to invoke JavaScript functions from C#. Say for example you
30:27
functions from C#. Say for example you
30:27
functions from C#. Say for example you know in the code we can write JS runtime
30:30
know in the code we can write JS runtime
30:30
know in the code we can write JS runtime invoke async and then the method name
30:34
invoke async and then the method name
30:34
invoke async and then the method name and we'll pass the attributes. If you
30:37
and we'll pass the attributes. If you
30:37
and we'll pass the attributes. If you want to call the C#
30:39
want to call the C#
30:39
want to call the C# method in JavaScript on top of the
30:42
method in JavaScript on top of the
30:42
method in JavaScript on top of the method we need to add JS invocable
30:45
method we need to add JS invocable
30:45
method we need to add JS invocable attribute. So in this way we can call
30:47
attribute. So in this way we can call
30:47
attribute. So in this way we can call the JavaScript
30:49
the JavaScript
30:49
the JavaScript interoperability. So uh when it comes to
30:52
interoperability. So uh when it comes to
30:52
interoperability. So uh when it comes to third party tools so
30:55
third party tools so
30:55
third party tools so the other advantage I am seeing is you
30:58
the other advantage I am seeing is you
30:58
the other advantage I am seeing is you know we have lot of components
31:01
know we have lot of components
31:01
know we have lot of components opensource components that are
31:04
opensource components that are
31:04
opensource components that are available in
31:07
available in
31:07
available in uh you know available for blazer. So we
31:09
uh you know available for blazer. So we
31:09
uh you know available for blazer. So we have mud blazer, raden, microsoft tools.
31:13
have mud blazer, raden, microsoft tools.
31:13
have mud blazer, raden, microsoft tools. You know these three are basically the
31:16
You know these three are basically the
31:16
You know these three are basically the key players which are
31:18
key players which are
31:18
key players which are offering you know very beautiful and use
31:23
offering you know very beautiful and use
31:23
offering you know very beautiful and use userfriendly components. So raden and
31:26
userfriendly components. So raden and
31:26
userfriendly components. So raden and mud blazer are widely used and Microsoft
31:29
mud blazer are widely used and Microsoft
31:29
mud blazer are widely used and Microsoft is started giving the uh are building
31:32
is started giving the uh are building
31:32
is started giving the uh are building the you know the components for the
31:33
the you know the components for the
31:33
the you know the components for the blazer. So I I mentioned the links. I
31:36
blazer. So I I mentioned the links. I
31:36
blazer. So I I mentioned the links. I don't want to open them. Uh but you know
31:38
don't want to open them. Uh but you know
31:38
don't want to open them. Uh but you know uh yeah let me open uh
31:41
uh yeah let me open uh
31:41
uh yeah let me open uh one. So in
31:47
Mudblazer you see we have a different
31:50
Mudblazer you see we have a different
31:50
Mudblazer you see we have a different different components
31:53
different components
31:53
different components uh that are here. So you know uh all
31:57
uh that are here. So you know uh all
31:57
uh that are here. So you know uh all these are different different components
31:59
these are different different components
31:59
these are different different components that when and that we can use them
32:01
that when and that we can use them
32:01
that when and that we can use them directly uh by using or you know by
32:05
directly uh by using or you know by
32:05
directly uh by using or you know by invoking um that particular blazer
32:08
invoking um that particular blazer
32:08
invoking um that particular blazer library or the new get package into our
32:10
library or the new get package into our
32:10
library or the new get package into our project and also
32:15
uh yeah before the conclusion so I would
32:18
uh yeah before the conclusion so I would
32:18
uh yeah before the conclusion so I would like to you know cover the benefits
32:20
like to you know cover the benefits
32:20
like to you know cover the benefits limitations and uh challenges part. to
32:23
limitations and uh challenges part. to
32:23
limitations and uh challenges part. to uh I'm comparing the blazer server app,
32:26
uh I'm comparing the blazer server app,
32:26
uh I'm comparing the blazer server app, blazer web assembly and the blazer
32:28
blazer web assembly and the blazer
32:28
blazer web assembly and the blazer hybrid. Uh so I would like to you know
32:31
hybrid. Uh so I would like to you know
32:31
hybrid. Uh so I would like to you know talk about the benefits of blazer server
32:33
talk about the benefits of blazer server
32:34
talk about the benefits of blazer server app. So
32:36
app. So
32:36
app. So uh blazer server app basically you know
32:38
uh blazer server app basically you know
32:38
uh blazer server app basically you know it it
32:39
it it
32:39
it it it is fast initial load times. So uh it
32:45
it is fast initial load times. So uh it
32:45
it is fast initial load times. So uh it is not like web assembly. So it will
32:48
is not like web assembly. So it will
32:48
is not like web assembly. So it will start you know the application very
32:50
start you know the application very
32:50
start you know the application very fastly. So the initial load times is
32:52
fastly. So the initial load times is
32:52
fastly. So the initial load times is less when compared with blazer web
32:55
less when compared with blazer web
32:55
less when compared with blazer web assembly and the download size is
32:57
assembly and the download size is
32:57
assembly and the download size is significantly small when compared with
32:59
significantly small when compared with
32:59
significantly small when compared with web assembly and uh the server side
33:00
web assembly and uh the server side
33:00
web assembly and uh the server side execution reducing the client side sorry
33:04
execution reducing the client side sorry
33:04
execution reducing the client side sorry client resource usage when it comes to
33:06
client resource usage when it comes to
33:06
client resource usage when it comes to the benefits of blazer web assembly you
33:08
the benefits of blazer web assembly you
33:08
the benefits of blazer web assembly you know runs directly in the browser
33:10
know runs directly in the browser
33:10
know runs directly in the browser offline capabilities you know whereas in
33:13
offline capabilities you know whereas in
33:13
offline capabilities you know whereas in the blazer server app we don't have the
33:15
the blazer server app we don't have the
33:15
the blazer server app we don't have the you know uh the offline capabilities
33:18
you know uh the offline capabilities
33:18
you know uh the offline capabilities every time it the signal communicates
33:20
every time it the signal communicates
33:20
every time it the signal communicates with the server it uses the C# instead
33:24
with the server it uses the C# instead
33:24
with the server it uses the C# instead of
33:25
of
33:25
of JavaScript. So these are the major
33:27
JavaScript. So these are the major
33:27
JavaScript. So these are the major benefits of u web assembly. So when it
33:31
benefits of u web assembly. So when it
33:31
benefits of u web assembly. So when it comes to blazer hybrid it offers the
33:34
comes to blazer hybrid it offers the
33:34
comes to blazer hybrid it offers the crossplatform support mobile desktop and
33:36
crossplatform support mobile desktop and
33:36
crossplatform support mobile desktop and web and also it offers full access to
33:39
web and also it offers full access to
33:39
web and also it offers full access to native device and capabilities the reuse
33:42
native device and capabilities the reuse
33:42
native device and capabilities the reuse of web UI components across the
33:45
of web UI components across the
33:45
of web UI components across the platforms. So those are the uh you know
33:48
platforms. So those are the uh you know
33:48
platforms. So those are the uh you know main benefits of blazer hybrid. When it
33:52
main benefits of blazer hybrid. When it
33:52
main benefits of blazer hybrid. When it comes to the limitations uh as it is a
33:56
comes to the limitations uh as it is a
33:56
comes to the limitations uh as it is a uh as blazer server heavily depends on
33:58
uh as blazer server heavily depends on
33:58
uh as blazer server heavily depends on the signaler we'll have a higher latency
34:01
the signaler we'll have a higher latency
34:01
the signaler we'll have a higher latency due to network
34:03
due to network
34:03
due to network ops. So for every user action uh it will
34:07
ops. So for every user action uh it will
34:07
ops. So for every user action uh it will try to communicate to the server through
34:10
try to communicate to the server through
34:10
try to communicate to the server through signal. So which causes higher latency
34:12
signal. So which causes higher latency
34:12
signal. So which causes higher latency due to you know the network costs the
34:15
due to you know the network costs the
34:15
due to you know the network costs the scalability concerns with the main you
34:17
scalability concerns with the main you
34:18
scalability concerns with the main you know many concurrent users. So if you
34:19
know many concurrent users. So if you
34:19
know many concurrent users. So if you have you know concurrent users
34:22
have you know concurrent users
34:22
have you know concurrent users definitely the network latency will be
34:25
definitely the network latency will be
34:25
definitely the network latency will be high and you know we'll have the at
34:27
high and you know we'll have the at
34:27
high and you know we'll have the at least you know I have seen these
34:28
least you know I have seen these
34:28
least you know I have seen these scalability concerns and it requires
34:30
scalability concerns and it requires
34:30
scalability concerns and it requires constant server connection. So if the
34:33
constant server connection. So if the
34:33
constant server connection. So if the server is down unlike web assembly it
34:36
server is down unlike web assembly it
34:36
server is down unlike web assembly it won't offer the offline capability.
34:39
won't offer the offline capability.
34:39
won't offer the offline capability. when it comes to the limitations of
34:40
when it comes to the limitations of
34:40
when it comes to the limitations of blazer web assembly the larger initial
34:45
blazer web assembly the larger initial
34:45
blazer web assembly the larger initial download size. So it will give an uh
34:50
download size. So it will give an uh
34:50
download size. So it will give an uh uncomfortable or you know uh the unuser
34:54
uncomfortable or you know uh the unuser
34:54
uncomfortable or you know uh the unuser friendly experience to the user. So uh
34:59
friendly experience to the user. So uh
34:59
friendly experience to the user. So uh larger initial download size is you know
35:01
larger initial download size is you know
35:01
larger initial download size is you know one limitation that we cannot avoid and
35:04
one limitation that we cannot avoid and
35:04
one limitation that we cannot avoid and also the restricted to browser
35:06
also the restricted to browser
35:06
also the restricted to browser capabilities. So as it is you know the
35:08
capabilities. So as it is you know the
35:08
capabilities. So as it is you know the web assembly advantage is offline
35:10
web assembly advantage is offline
35:10
web assembly advantage is offline capabilities but somehow you know uh it
35:13
capabilities but somehow you know uh it
35:13
capabilities but somehow you know uh it will restrict two browser capabilities.
35:15
will restrict two browser capabilities.
35:15
will restrict two browser capabilities. So if the browser is not supporting some
35:18
So if the browser is not supporting some
35:18
So if the browser is not supporting some capability the blazer is also you know
35:21
capability the blazer is also you know
35:21
capability the blazer is also you know not supporting that particular
35:23
not supporting that particular
35:23
not supporting that particular capability it's a restriction basically
35:25
capability it's a restriction basically
35:25
capability it's a restriction basically and also the performance issues with the
35:27
and also the performance issues with the
35:27
and also the performance issues with the complex C# code
35:29
complex C# code
35:29
complex C# code uh so you know your program has lot of
35:33
uh so you know your program has lot of
35:33
uh so you know your program has lot of complexity on the UI on the user
35:35
complexity on the UI on the user
35:35
complexity on the UI on the user interaction so it causes you know the
35:38
interaction so it causes you know the
35:38
interaction so it causes you know the performance issues and also uh the
35:41
performance issues and also uh the
35:41
performance issues and also uh the limitations
35:42
limitations
35:42
limitations of blazer hybrid is uh is you know the
35:46
of blazer hybrid is uh is you know the
35:46
of blazer hybrid is uh is you know the separate native client apps must be
35:48
separate native client apps must be
35:48
separate native client apps must be built and maintained per each
35:51
built and maintained per each
35:51
built and maintained per each platform. So the web so we may have uh
35:54
platform. So the web so we may have uh
35:54
platform. So the web so we may have uh the same components can be used in uh
35:57
the same components can be used in uh
35:58
the same components can be used in uh you know different different
35:59
you know different different
35:59
you know different different crossplatforms but we need to maintain
36:01
crossplatforms but we need to maintain
36:01
crossplatforms but we need to maintain them separately. platform dependent
36:04
them separately. platform dependent
36:04
them separately. platform dependent components and styles also you know
36:07
components and styles also you know
36:07
components and styles also you know giving maintainability pro problems and
36:11
giving maintainability pro problems and
36:11
giving maintainability pro problems and longer download and install times
36:13
longer download and install times
36:13
longer download and install times compared to uh web apps. So it is uh you
36:18
compared to uh web apps. So it is uh you
36:18
compared to uh web apps. So it is uh you know it offers longer download and
36:20
know it offers longer download and
36:20
know it offers longer download and install uh times. The challenges I have
36:23
install uh times. The challenges I have
36:23
install uh times. The challenges I have noticed with the bler server app is the
36:26
noticed with the bler server app is the
36:26
noticed with the bler server app is the connection stability in poor network
36:27
connection stability in poor network
36:27
connection stability in poor network conditions because it it requires uh the
36:31
conditions because it it requires uh the
36:31
conditions because it it requires uh the constant server connection right. So the
36:33
constant server connection right. So the
36:33
constant server connection right. So the connection stability in poor network
36:34
connection stability in poor network
36:34
connection stability in poor network conditions is a challenge and server
36:37
conditions is a challenge and server
36:37
conditions is a challenge and server resource management for multiple users
36:39
resource management for multiple users
36:40
resource management for multiple users and
36:40
and
36:41
and uh uh for multiple users and handling
36:44
uh uh for multiple users and handling
36:44
uh uh for multiple users and handling temporary network interruptions will be
36:46
temporary network interruptions will be
36:46
temporary network interruptions will be a challenge and blazer web assembly. So
36:49
a challenge and blazer web assembly. So
36:50
a challenge and blazer web assembly. So you know initially we'll see the slow
36:53
you know initially we'll see the slow
36:53
you know initially we'll see the slow initial load times deployment issues
36:56
initial load times deployment issues
36:56
initial load times deployment issues like file
36:57
like file
36:57
like file corruption you know um and also the
37:00
corruption you know um and also the
37:00
corruption you know um and also the compatibility issues. So when it comes
37:02
compatibility issues. So when it comes
37:02
compatibility issues. So when it comes to blazer hybrid uh the managing the
37:05
to blazer hybrid uh the managing the
37:05
to blazer hybrid uh the managing the real time and large scale data is an
37:07
real time and large scale data is an
37:07
real time and large scale data is an challenge and optimizing UI rendering
37:09
challenge and optimizing UI rendering
37:10
challenge and optimizing UI rendering for large data sets is a challenge and
37:12
for large data sets is a challenge and
37:12
for large data sets is a challenge and uh you know offline support and data
37:14
uh you know offline support and data
37:14
uh you know offline support and data synchronization is also you know a
37:16
synchronization is also you know a
37:16
synchronization is also you know a challenge when we adopted bler hybrid
37:19
challenge when we adopted bler hybrid
37:19
challenge when we adopted bler hybrid but apart of all these things you know
37:21
but apart of all these things you know
37:21
but apart of all these things you know uh it has reasons to adopt and it has
37:25
uh it has reasons to adopt and it has
37:25
uh it has reasons to adopt and it has you know uh cases when to adopt the
37:27
you know uh cases when to adopt the
37:27
you know uh cases when to adopt the blazer. So you know on conclusion s like
37:30
blazer. So you know on conclusion s like
37:30
blazer. So you know on conclusion s like you know uh blazer unifies web desktop
37:34
you know uh blazer unifies web desktop
37:34
you know uh blazer unifies web desktop and mobile development for net
37:36
and mobile development for net
37:36
and mobile development for net developers. It is mainly for net
37:38
developers. It is mainly for net
37:38
developers. It is mainly for net developers. Now it simplifies the net
37:40
developers. Now it simplifies the net
37:40
developers. Now it simplifies the net developer life uh to develop the web
37:43
developer life uh to develop the web
37:43
developer life uh to develop the web applications and growing the adoption
37:45
applications and growing the adoption
37:45
applications and growing the adoption and Microsoft backing uh its moment a
37:49
and Microsoft backing uh its moment a
37:49
and Microsoft backing uh its moment a key player in shaping the future of web
37:53
key player in shaping the future of web
37:53
key player in shaping the future of web development. So this is all about
37:56
development. So this is all about
37:56
development. So this is all about blazer. So any questions for me?
38:08
Thanks Chandu. Uh that was a very crisp
38:09
Thanks Chandu. Uh that was a very crisp
38:09
Thanks Chandu. Uh that was a very crisp session. We have a few questions in the
38:11
session. We have a few questions in the
38:11
session. We have a few questions in the in the chat. Uh let's take them because
38:13
in the chat. Uh let's take them because
38:13
in the chat. Uh let's take them because we have about 10 minutes before we move
38:15
we have about 10 minutes before we move
38:15
we have about 10 minutes before we move to the next session. Um this first one
38:17
to the next session. Um this first one
38:17
to the next session. Um this first one coming from okay ledger says hello from
38:20
coming from okay ledger says hello from
38:20
coming from okay ledger says hello from Africa. I know he's I can see up there.
38:24
Africa. I know he's I can see up there.
38:24
Africa. I know he's I can see up there. So maybe let's take first from Sharma
38:27
So maybe let's take first from Sharma
38:27
So maybe let's take first from Sharma Sakshi. She's asking well I think she's
38:31
Sakshi. She's asking well I think she's
38:31
Sakshi. She's asking well I think she's a Gen Z. She's asking what are the
38:33
a Gen Z. She's asking what are the
38:33
a Gen Z. She's asking what are the biggest advantages Blazer offer over
38:35
biggest advantages Blazer offer over
38:35
biggest advantages Blazer offer over traditional JavaScript framework like
38:36
traditional JavaScript framework like
38:36
traditional JavaScript framework like React and Angular. I I love React. I
38:39
React and Angular. I I love React. I
38:39
React and Angular. I I love React. I don't mind working with React.
38:42
don't mind working with React.
38:42
don't mind working with React. Right. So you know if you are a C#
38:44
Right. So you know if you are a C#
38:45
Right. So you know if you are a C# developer so you know you no need to
38:48
developer so you know you no need to
38:48
developer so you know you no need to learn JavaScript or you know TypeScript
38:51
learn JavaScript or you know TypeScript
38:51
learn JavaScript or you know TypeScript anything you can directly develop the
38:53
anything you can directly develop the
38:53
anything you can directly develop the web application and also you know it has
38:56
web application and also you know it has
38:56
web application and also you know it has a backup of Microsoft so the
38:59
a backup of Microsoft so the
38:59
a backup of Microsoft so the maintainability is very easy and also uh
39:03
maintainability is very easy and also uh
39:03
maintainability is very easy and also uh unlike the reactor or angler we have uh
39:08
unlike the reactor or angler we have uh
39:08
unlike the reactor or angler we have uh very standard or you know very good
39:10
very standard or you know very good
39:10
very standard or you know very good community support. So like I mentioned
39:13
community support. So like I mentioned
39:13
community support. So like I mentioned you know the mud blazer or the rad see
39:16
you know the mud blazer or the rad see
39:16
you know the mud blazer or the rad see we have multiple components that are
39:18
we have multiple components that are
39:18
we have multiple components that are available. So you know you can able to
39:21
available. So you know you can able to
39:21
available. So you know you can able to build a complex web application directly
39:23
build a complex web application directly
39:23
build a complex web application directly by you know consuming those
39:27
by you know consuming those
39:27
by you know consuming those components. So I say you know it is very
39:31
components. So I say you know it is very
39:31
components. So I say you know it is very easy for net developer to develop in web
39:33
easy for net developer to develop in web
39:33
easy for net developer to develop in web application. That is one of the biggest
39:35
application. That is one of the biggest
39:35
application. That is one of the biggest advantage. And the second advantage is
39:37
advantage. And the second advantage is
39:37
advantage. And the second advantage is you know the components that has uh you
39:39
you know the components that has uh you
39:39
you know the components that has uh you know that blazer
39:41
know that blazer
39:41
know that blazer has and you know the maintainability.
39:43
has and you know the maintainability.
39:43
has and you know the maintainability. Yeah. Yeah. That's right. I mean I'm
39:45
Yeah. Yeah. That's right. I mean I'm
39:45
Yeah. Yeah. That's right. I mean I'm with you when you say you know it's it's
39:47
with you when you say you know it's it's
39:47
with you when you say you know it's it's it's a piece of cake for folks who are
39:49
it's a piece of cake for folks who are
39:49
it's a piece of cake for folks who are already into the C and ecosystem. They
39:52
already into the C and ecosystem. They
39:52
already into the C and ecosystem. They don't have they don't have to learn
39:53
don't have they don't have to learn
39:53
don't have they don't have to learn anything new. But if you are if you are
39:55
anything new. But if you are if you are
39:55
anything new. But if you are if you are if you are not in the Microsoft
39:57
if you are not in the Microsoft
39:57
if you are not in the Microsoft ecosystem right and then you think of
39:59
ecosystem right and then you think of
39:59
ecosystem right and then you think of learning blazer that that might have a
40:01
learning blazer that that might have a
40:01
learning blazer that that might have a learning curve and you might feel like
40:03
learning curve and you might feel like
40:03
learning curve and you might feel like why are using C and that that may be a
40:06
why are using C and that that may be a
40:06
why are using C and that that may be a little obstacle right maybe that maybe
40:09
little obstacle right maybe that maybe
40:09
little obstacle right maybe that maybe is stopping you to learn blazer but yeah
40:11
is stopping you to learn blazer but yeah
40:11
is stopping you to learn blazer but yeah if if you are working on C# then why not
40:15
if if you are working on C# then why not
40:15
if if you are working on C# then why not right there's no harm in trying okay
40:18
right there's no harm in trying okay
40:18
right there's no harm in trying okay perfect uh there's another question
40:20
perfect uh there's another question
40:20
perfect uh there's another question coming in from Rohit he's asking um What
40:23
coming in from Rohit he's asking um What
40:23
coming in from Rohit he's asking um What are the biggest challenges you have seen
40:26
are the biggest challenges you have seen
40:26
are the biggest challenges you have seen teams face when adopting Blazer and how
40:28
teams face when adopting Blazer and how
40:28
teams face when adopting Blazer and how can they overcome?
40:31
can they overcome?
40:31
can they overcome? So that's a very big uh you know
40:32
So that's a very big uh you know
40:32
So that's a very big uh you know question. So you know uh the challenge
40:35
question. So you know uh the challenge
40:35
question. So you know uh the challenge yeah the challenges uh we noticed is you
40:38
yeah the challenges uh we noticed is you
40:38
yeah the challenges uh we noticed is you know
40:40
know
40:40
know um choosing you know either mud blazer
40:43
um choosing you know either mud blazer
40:43
um choosing you know either mud blazer or you know components creation
40:45
or you know components creation
40:45
or you know components creation basically and educating the team right
40:48
basically and educating the team right
40:48
basically and educating the team right so no one you know is everyone is new to
40:51
so no one you know is everyone is new to
40:51
so no one you know is everyone is new to blazer uh so educating them and you know
40:54
blazer uh so educating them and you know
40:54
blazer uh so educating them and you know we have learning but u for a net
40:58
we have learning but u for a net
40:58
we have learning but u for a net developer it is pretty much easy but uh
41:01
developer it is pretty much easy but uh
41:01
developer it is pretty much easy but uh you know while adopting the blazer
41:03
you know while adopting the blazer
41:03
you know while adopting the blazer uh you know
41:04
uh you know
41:04
uh you know the we have seen like you know whenever
41:07
the we have seen like you know whenever
41:07
the we have seen like you know whenever we have a poor network connectivity
41:10
we have a poor network connectivity
41:10
we have a poor network connectivity right so it will always pop up saying
41:12
right so it will always pop up saying
41:12
right so it will always pop up saying that you know it is
41:14
that you know it is
41:14
that you know it is disconnected when we develop the
41:16
disconnected when we develop the
41:16
disconnected when we develop the applications using you know the server
41:18
applications using you know the server
41:18
applications using you know the server because it continuously pull the server
41:21
because it continuously pull the server
41:21
because it continuously pull the server with the help of signal but you know on
41:24
with the help of signal but you know on
41:24
with the help of signal but you know on an high level you know I'm not I haven't
41:26
an high level you know I'm not I haven't
41:26
an high level you know I'm not I haven't seen any challenges you know we are
41:29
seen any challenges you know we are
41:29
seen any challenges you know we are using teric basically you know the teric
41:31
using teric basically you know the teric
41:31
using teric basically you know the teric components
41:32
components
41:32
components Okay. So as we are using the teleric
41:34
Okay. So as we are using the teleric
41:34
Okay. So as we are using the teleric components to build the enterprise
41:36
components to build the enterprise
41:36
components to build the enterprise application. So we haven't seen any you
41:38
application. So we haven't seen any you
41:38
application. So we haven't seen any you know uh uh major challenges but you know
41:42
know uh uh major challenges but you know
41:42
know uh uh major challenges but you know we are enjoying developing the
41:43
we are enjoying developing the
41:43
we are enjoying developing the application with blazer because it is
41:45
application with blazer because it is
41:45
application with blazer because it is pretty much easy when compared with you
41:48
pretty much easy when compared with you
41:48
pretty much easy when compared with you know the react or you know the other
41:50
know the react or you know the other
41:50
know the react or you know the other things.
41:52
things.
41:52
things. Yeah. Yeah that is right. Uh that is
41:54
Yeah. Yeah that is right. Uh that is
41:54
Yeah. Yeah that is right. Uh that is definitely right. And one thing you know
41:56
definitely right. And one thing you know
41:56
definitely right. And one thing you know that that always confuses me with baser
41:58
that that always confuses me with baser
41:58
that that always confuses me with baser you know I don't know why it is with
41:59
you know I don't know why it is with
41:59
you know I don't know why it is with baser I know people like to compare you
42:01
baser I know people like to compare you
42:01
baser I know people like to compare you know baser with react angular you know
42:04
know baser with react angular you know
42:04
know baser with react angular you know view when you work with these you know
42:06
view when you work with these you know
42:06
view when you work with these you know javascript you know libraries or frame
42:08
javascript you know libraries or frame
42:08
javascript you know libraries or frame what you want to call it um there's only
42:11
what you want to call it um there's only
42:11
what you want to call it um there's only one uh framework is there for react it's
42:14
one uh framework is there for react it's
42:14
one uh framework is there for react it's only react for angular it's only react
42:15
only react for angular it's only react
42:15
only react for angular it's only react but for blazer you got to decide is it a
42:18
but for blazer you got to decide is it a
42:18
but for blazer you got to decide is it a client side one or is it a server side
42:20
client side one or is it a server side
42:20
client side one or is it a server side one
42:22
one
42:22
one so why why do why do Microsoft has two
42:26
so why why do why do Microsoft has two
42:26
so why why do why do Microsoft has two flavors of Blazer. I don't get it.
42:30
flavors of Blazer. I don't get it.
42:30
flavors of Blazer. I don't get it. That is true. But uh yeah, that is true.
42:33
That is true. But uh yeah, that is true.
42:33
That is true. But uh yeah, that is true. But you know if you are trying to
42:36
But you know if you are trying to
42:36
But you know if you are trying to achieve or you know developing single
42:38
achieve or you know developing single
42:38
achieve or you know developing single page application you know the Microsoft
42:40
page application you know the Microsoft
42:40
page application you know the Microsoft document clearly says that you know we
42:42
document clearly says that you know we
42:42
document clearly says that you know we need to go with web assembly. If you are
42:45
need to go with web assembly. If you are
42:45
need to go with web assembly. If you are targeting you know multiple platforms
42:47
targeting you know multiple platforms
42:47
targeting you know multiple platforms you know the Microsoft documentation
42:49
you know the Microsoft documentation
42:49
you know the Microsoft documentation says go with net maui with blazer
42:51
says go with net maui with blazer
42:52
says go with net maui with blazer hybrid. Okay. So you know if your
42:54
hybrid. Okay. So you know if your
42:54
hybrid. Okay. So you know if your application requires you know multiple
42:56
application requires you know multiple
42:56
application requires you know multiple interaction support then you know go
42:59
interaction support then you know go
42:59
interaction support then you know go with blazer server app. I see you know
43:02
with blazer server app. I see you know
43:02
with blazer server app. I see you know pe lot of people adopting web assembly
43:05
pe lot of people adopting web assembly
43:05
pe lot of people adopting web assembly and net model rather than server app.
43:09
and net model rather than server app.
43:09
and net model rather than server app. Yeah. Yeah that's right. Web assembly is
43:11
Yeah. Yeah that's right. Web assembly is
43:11
Yeah. Yeah that's right. Web assembly is is more popular right than this. That
43:14
is more popular right than this. That
43:14
is more popular right than this. That that's that's very right. Okay we have a
43:16
that's that's very right. Okay we have a
43:16
that's that's very right. Okay we have a few more questions. Um there's another
43:18
few more questions. Um there's another
43:18
few more questions. Um there's another one coming from uh let's say Prolad Cha
43:21
one coming from uh let's say Prolad Cha
43:21
one coming from uh let's say Prolad Cha is asking do you see blazer eventually
43:23
is asking do you see blazer eventually
43:23
is asking do you see blazer eventually replacing JavaScript framework? I don't
43:25
replacing JavaScript framework? I don't
43:25
replacing JavaScript framework? I don't think that's going to happen in
43:26
think that's going to happen in
43:26
think that's going to happen in enterprise environment. What do you
43:28
enterprise environment. What do you
43:28
enterprise environment. What do you think it will complement them?
43:31
think it will complement them?
43:31
think it will complement them? I don't think so is going to take place.
43:33
I don't think so is going to take place.
43:33
I don't think so is going to take place. No, you know JavaScript won't be
43:36
No, you know JavaScript won't be
43:36
No, you know JavaScript won't be replaced by any other technology. Yeah.
43:39
replaced by any other technology. Yeah.
43:39
replaced by any other technology. Yeah. Right. So end of the day
43:42
Right. So end of the day
43:42
Right. So end of the day right? So end of the day the browser
43:44
right? So end of the day the browser
43:44
right? So end of the day the browser understands JavaScript. So if you
43:46
understands JavaScript. So if you
43:46
understands JavaScript. So if you develop your application you know in any
43:48
develop your application you know in any
43:48
develop your application you know in any other language you know whether it's in
43:50
other language you know whether it's in
43:50
other language you know whether it's in Python, Java whatever you know end of
43:53
Python, Java whatever you know end of
43:53
Python, Java whatever you know end of the day the browser understands HTML,
43:55
the day the browser understands HTML,
43:56
the day the browser understands HTML, CSS and JavaScript.
43:58
CSS and JavaScript.
43:58
CSS and JavaScript. That is 100% right. Right. Yeah. So and
44:02
That is 100% right. Right. Yeah. So and
44:02
That is 100% right. Right. Yeah. So and and if I'm not wrong right correct me if
44:04
and if I'm not wrong right correct me if
44:04
and if I'm not wrong right correct me if I'm wrong but the C# code that you're
44:06
I'm wrong but the C# code that you're
44:06
I'm wrong but the C# code that you're writing that is at the end of the day is
44:07
writing that is at the end of the day is
44:07
writing that is at the end of the day is getting it's getting converted
44:09
getting it's getting converted
44:09
getting it's getting converted translated into JavaScript anyway.
44:11
translated into JavaScript anyway.
44:11
translated into JavaScript anyway. Right. Correct.
44:13
Right. Correct.
44:13
Right. Correct. So yeah, no, nobody's getting replaced.
44:15
So yeah, no, nobody's getting replaced.
44:15
So yeah, no, nobody's getting replaced. JavaScript is not getting replaced.
44:16
JavaScript is not getting replaced.
44:16
JavaScript is not getting replaced. Don't worry about it. Y there's a one
44:18
Don't worry about it. Y there's a one
44:18
Don't worry about it. Y there's a one from Nikita. She's asking, "What are
44:20
from Nikita. She's asking, "What are
44:20
from Nikita. She's asking, "What are some common architectural mistake
44:21
some common architectural mistake
44:21
some common architectural mistake developers make when starting with
44:22
developers make when starting with
44:22
developers make when starting with Paser? Oo, is there any architecture,
44:25
Paser? Oo, is there any architecture,
44:25
Paser? Oo, is there any architecture, you know, framework or something that's
44:26
you know, framework or something that's
44:26
you know, framework or something that's there up there that people like to
44:28
there up there that people like to
44:28
there up there that people like to follow?" I know there's a project
44:30
follow?" I know there's a project
44:30
follow?" I know there's a project structure some people really like to
44:32
structure some people really like to
44:32
structure some people really like to follow,
44:37
right? Right. So you know as an industry
44:40
right? Right. So you know as an industry
44:40
right? Right. So you know as an industry standard we'll follow the clean
44:41
standard we'll follow the clean
44:41
standard we'll follow the clean architecture framework. Mhm. So uh you
44:45
architecture framework. Mhm. So uh you
44:45
architecture framework. Mhm. So uh you know I haven't documented that but uh
44:47
know I haven't documented that but uh
44:47
know I haven't documented that but uh but you know as a practice we'll follow
44:49
but you know as a practice we'll follow
44:49
but you know as a practice we'll follow the clean architecture.
44:51
the clean architecture.
44:51
the clean architecture. Yeah. Simple and straight. Let's just
44:53
Yeah. Simple and straight. Let's just
44:53
Yeah. Simple and straight. Let's just stick to that.
44:55
stick to that.
44:55
stick to that. All right. I think there there's a few
44:57
All right. I think there there's a few
44:57
All right. I think there there's a few more. There's Jose is asking um would
45:00
more. There's Jose is asking um would
45:00
more. There's Jose is asking um would you
45:02
you
45:02
you recommend obcasting the blazer code that
45:05
recommend obcasting the blazer code that
45:05
recommend obcasting the blazer code that will run in browser for security
45:07
will run in browser for security
45:07
will run in browser for security reason I can't I can't spell that I can
45:10
reason I can't I can't spell that I can
45:10
reason I can't I can't spell that I can pronounce that word so right so you know
45:13
pronounce that word so right so you know
45:14
pronounce that word so right so you know for security reasons right so uh I'll
45:17
for security reasons right so uh I'll
45:17
for security reasons right so uh I'll tell you
45:19
tell you
45:19
tell you uh we integrated multiple security
45:23
uh we integrated multiple security
45:23
uh we integrated multiple security scraps within the CI/CD pipeline
45:28
scraps within the CI/CD pipeline
45:28
scraps within the CI/CD pipeline Uh okay. uh so you know like the
45:31
Uh okay. uh so you know like the
45:31
Uh okay. uh so you know like the industry standards like you know the
45:33
industry standards like you know the
45:33
industry standards like you know the black deck scan the vera code scan you
45:35
black deck scan the vera code scan you
45:35
black deck scan the vera code scan you know sneak we we integrated all of them
45:38
know sneak we we integrated all of them
45:38
know sneak we we integrated all of them when we develop the applications in uh
45:42
when we develop the applications in uh
45:42
when we develop the applications in uh blazer but we haven't seen any you know
45:46
blazer but we haven't seen any you know
45:46
blazer but we haven't seen any you know security vulnerabilities when we develop
45:48
security vulnerabilities when we develop
45:48
security vulnerabilities when we develop the application with
45:49
the application with
45:49
the application with blazer right so you know we'll have a
45:52
blazer right so you know we'll have a
45:52
blazer right so you know we'll have a feeling that you know it is uh as it is
45:54
feeling that you know it is uh as it is
45:54
feeling that you know it is uh as it is you know uh downloaded to browser side
45:57
you know uh downloaded to browser side
45:57
you know uh downloaded to browser side you know it may cause security reasons
45:59
you know it may cause security reasons
45:59
you know it may cause security reasons It won't.
46:02
Perfect. Okay. Makes sense. Makes sense.
46:04
Perfect. Okay. Makes sense. Makes sense.
46:04
Perfect. Okay. Makes sense. Makes sense. We'll take one final question and then
46:06
We'll take one final question and then
46:06
We'll take one final question and then then I'll let you go. I know it's
46:07
then I'll let you go. I know it's
46:07
then I'll let you go. I know it's already maybe dinner time. There's a
46:09
already maybe dinner time. There's a
46:10
already maybe dinner time. There's a question coming from Abuji. He's asking
46:12
question coming from Abuji. He's asking
46:12
question coming from Abuji. He's asking it's interesting question. He's asking
46:13
it's interesting question. He's asking
46:13
it's interesting question. He's asking is Blazer only dedicated to Microsoft
46:15
is Blazer only dedicated to Microsoft
46:15
is Blazer only dedicated to Microsoft technologies or it is used in several
46:18
technologies or it is used in several
46:18
technologies or it is used in several website because I don't really see it in
46:20
website because I don't really see it in
46:20
website because I don't really see it in demand. Well, if you're in the Microsoft
46:22
demand. Well, if you're in the Microsoft
46:22
demand. Well, if you're in the Microsoft ecosystem, you'll hear about Blazer
46:24
ecosystem, you'll hear about Blazer
46:24
ecosystem, you'll hear about Blazer often, right? But not right outside.
46:27
often, right? But not right outside.
46:27
often, right? But not right outside. Yeah, you answered that.
46:31
Yeah, you answered that.
46:31
Yeah, you answered that. Yeah.
46:32
Yeah.
46:32
Yeah. Well, that that's one thing. Okay, I
46:34
Well, that that's one thing. Okay, I
46:34
Well, that that's one thing. Okay, I think u maybe we have a few more, but I
46:36
think u maybe we have a few more, but I
46:36
think u maybe we have a few more, but I think we'll have to skip it because
46:37
think we'll have to skip it because
46:37
think we'll have to skip it because we're running uh out of time, but thank
46:41
we're running uh out of time, but thank
46:41
we're running uh out of time, but thank you so much, Chandu, right? Thank you so
46:42
you so much, Chandu, right? Thank you so
46:42
you so much, Chandu, right? Thank you so much for joining us. You know, I think
46:44
much for joining us. You know, I think
46:44
much for joining us. You know, I think we're hosting it you for the very first
46:45
we're hosting it you for the very first
46:45
we're hosting it you for the very first time. I'm so glad you gave us your time.
46:48
time. I'm so glad you gave us your time.
46:48
time. I'm so glad you gave us your time. Any f final thing want you want to add
46:50
Any f final thing want you want to add
46:50
Any f final thing want you want to add before we move to the next session?
46:53
before we move to the next session?
46:53
before we move to the next session? Uh no. Uh thank you so much uh Simon and
46:56
Uh no. Uh thank you so much uh Simon and
46:56
Uh no. Uh thank you so much uh Simon and thanks uh you know for giving me this
46:59
thanks uh you know for giving me this
46:59
thanks uh you know for giving me this opportunity. Right. Thank you so much.
47:01
opportunity. Right. Thank you so much.
47:01
opportunity. Right. Thank you so much. Well thank thanks to you for giving your
47:03
Well thank thanks to you for giving your
47:03
Well thank thanks to you for giving your time. I know it's very it's evening here
47:05
time. I know it's very it's evening here
47:05
time. I know it's very it's evening here in India. So have a nice evening and
47:07
in India. So have a nice evening and
47:07
in India. So have a nice evening and have a good dinner and let's stay in
47:09
have a good dinner and let's stay in
47:09
have a good dinner and let's stay in touch and maybe I'll see you in some
47:11
touch and maybe I'll see you in some
47:11
touch and maybe I'll see you in some other events. Thank you. Thank you. Y
47:14
other events. Thank you. Thank you. Y
47:14
other events. Thank you. Thank you. Y thank you. Bye-bye. All right ladies and
47:16
thank you. Bye-bye. All right ladies and
47:16
thank you. Bye-bye. All right ladies and gentlemen that was Chandu for you
47:17
gentlemen that was Chandu for you
47:18
gentlemen that was Chandu for you talking about the blazer. It's so always
47:19
talking about the blazer. It's so always
47:19
talking about the blazer. It's so always good to start a day talking about
47:21
good to start a day talking about
47:21
good to start a day talking about blazer. We started by Paso the other day
47:23
blazer. We started by Paso the other day
47:23
blazer. We started by Paso the other day and so did we today. And with that said,
47:25
and so did we today. And with that said,
47:25
and so did we today. And with that said, we now move to our next session which is
47:27
we now move to our next session which is
47:27
we now move to our next session which is a lightning session by Anur Raj. Anur
47:29
a lightning session by Anur Raj. Anur
47:29
a lightning session by Anur Raj. Anur Raj is going to talk about if I just
47:31
Raj is going to talk about if I just
47:31
Raj is going to talk about if I just pull up my um um um the agenda day two.
47:35
pull up my um um um the agenda day two.
47:35
pull up my um um um the agenda day two. An Raj is talking about efficient
47:37
An Raj is talking about efficient
47:37
An Raj is talking about efficient containerization of net application
47:39
containerization of net application
47:39
containerization of net application using net publish. We have two minutes
47:42
using net publish. We have two minutes
47:42
using net publish. We have two minutes before his session starts. So I'm going
47:43
before his session starts. So I'm going
47:43
before his session starts. So I'm going to quickly play a minute video and after
47:46
to quickly play a minute video and after
47:46
to quickly play a minute video and after that video ends it will be me and Anuraj
47:49
that video ends it will be me and Anuraj
47:49
that video ends it will be me and Anuraj up on the stage. See you soon.
47:52
up on the stage. See you soon.
47:52
up on the stage. See you soon. [Music]
48:14
[Music]
48:17
[Music]
48:17
[Music] Heat. Heat.
48:27
[Music]
48:35
[Music]
48:35
[Music] Heat. Heat.
48:48
[Music]
48:54
[Music]
49:02
Well, well, well. Hi, Anurraj. So good
49:04
Well, well, well. Hi, Anurraj. So good
49:04
Well, well, well. Hi, Anurraj. So good to see you once again. Yeah, see.
49:08
to see you once again. Yeah, see.
49:08
to see you once again. Yeah, see. So, before we talk about anything else,
49:10
So, before we talk about anything else,
49:10
So, before we talk about anything else, I know we have we have just about 30
49:12
I know we have we have just about 30
49:12
I know we have we have just about 30 seconds. I want to talk about how was
49:14
seconds. I want to talk about how was
49:14
seconds. I want to talk about how was your US trip to the MEP summit? I saw
49:17
your US trip to the MEP summit? I saw
49:17
your US trip to the MEP summit? I saw some great pictures. It was awesome. It
49:20
some great pictures. It was awesome. It
49:20
some great pictures. It was awesome. It was awesome. It was great.
49:23
was awesome. It was great.
49:24
was awesome. It was great. Like I was able to meet like legends
49:26
Like I was able to meet like legends
49:26
Like I was able to meet like legends like Dave Power, Scott Hansel, man.
49:31
like Dave Power, Scott Hansel, man.
49:31
like Dave Power, Scott Hansel, man. Wow. Wow. Wow. Did you get a selfie with
49:34
Wow. Wow. Wow. Did you get a selfie with
49:34
Wow. Wow. Wow. Did you get a selfie with Scott Hansselman, the the most popular
49:35
Scott Hansselman, the the most popular
49:36
Scott Hansselman, the the most popular guy?
49:39
Okay. Okay. All right. And Raj, you have
49:41
Okay. Okay. All right. And Raj, you have
49:41
Okay. Okay. All right. And Raj, you have a 15 minutes crisp session coming up.
49:43
a 15 minutes crisp session coming up.
49:44
a 15 minutes crisp session coming up. So, please feel free to share your
49:45
So, please feel free to share your
49:45
So, please feel free to share your screen and I'll add it to the stream.
49:47
screen and I'll add it to the stream.
49:47
screen and I'll add it to the stream. Yeah.
49:59
Yeah, it's loading on my end.
50:02
Yeah, it's loading on my end.
50:02
Yeah, it's loading on my end. Yeah, I see your slides. I have added it
50:05
Yeah, I see your slides. I have added it
50:05
Yeah, I see your slides. I have added it to the stream and
50:07
to the stream and
50:07
to the stream and next next 15 to 17 minutes is all yours.
50:11
next next 15 to 17 minutes is all yours.
50:11
next next 15 to 17 minutes is all yours. Yeah. So hello all. So this session is
50:16
Yeah. So hello all. So this session is
50:16
Yeah. So hello all. So this session is about u efficient containerization of
50:19
about u efficient containerization of
50:20
about u efficient containerization of net application using net publish. So my
50:23
net application using net publish. So my
50:23
net application using net publish. So my name is I'm a Microsoft
50:26
name is I'm a Microsoft
50:26
name is I'm a Microsoft MVP. So uh first of all why we need to
50:32
MVP. So uh first of all why we need to
50:32
MVP. So uh first of all why we need to contain the deter application. So
50:34
contain the deter application. So
50:34
contain the deter application. So basically when we are
50:37
basically when we are
50:37
basically when we are um uh like developing and deploying
50:40
um uh like developing and deploying
50:40
um uh like developing and deploying application uh earier we used to mind
50:45
application uh earier we used to mind
50:45
application uh earier we used to mind okay if I'm building a net application
50:48
okay if I'm building a net application
50:48
okay if I'm building a net application is my host also contains the same
50:52
is my host also contains the same
50:52
is my host also contains the same version of the net installed on that
50:54
version of the net installed on that
50:54
version of the net installed on that machine or some if you are using some
50:57
machine or some if you are using some
50:57
machine or some if you are using some other dependencies we have to make sure
51:00
other dependencies we have to make sure
51:00
other dependencies we have to make sure that dependencies are already installed
51:02
that dependencies are already installed
51:02
that dependencies are already installed on that machine. So all those problems
51:06
on that machine. So all those problems
51:06
on that machine. So all those problems we were able to fix with docker
51:09
we were able to fix with docker
51:09
we were able to fix with docker container. So when docker introduced or
51:13
container. So when docker introduced or
51:14
container. So when docker introduced or containerization introduced in the net
51:16
containerization introduced in the net
51:16
containerization introduced in the net code we were uh we can just build the
51:20
code we were uh we can just build the
51:20
code we were uh we can just build the application and container and we will be
51:24
application and container and we will be
51:24
application and container and we will be able to deploy it to the source.
51:27
able to deploy it to the source.
51:27
able to deploy it to the source. So uh basically uh when I started my
51:31
So uh basically uh when I started my
51:31
So uh basically uh when I started my career I used to like say okay it's
51:34
career I used to like say okay it's
51:34
career I used to like say okay it's what's on my machine and my manager and
51:37
what's on my machine and my manager and
51:37
what's on my machine and my manager and lead used to say okay we are not
51:39
lead used to say okay we are not
51:39
lead used to say okay we are not shipping your machine to the client. So
51:42
shipping your machine to the client. So
51:42
shipping your machine to the client. So uh docker actually solves that problem
51:44
uh docker actually solves that problem
51:44
uh docker actually solves that problem by pulling everything abstracting
51:47
by pulling everything abstracting
51:47
by pulling everything abstracting everything into one or encapsulating
51:50
everything into one or encapsulating
51:50
everything into one or encapsulating every dependencies everything into a
51:52
every dependencies everything into a
51:52
every dependencies everything into a single unit and you can deploy that
51:55
single unit and you can deploy that
51:55
single unit and you can deploy that unit. So these are the various uh things
51:59
unit. So these are the various uh things
51:59
unit. So these are the various uh things why we need to conduct it. We'll be able
52:02
why we need to conduct it. We'll be able
52:02
why we need to conduct it. We'll be able to port the applications very easily
52:05
to port the applications very easily
52:05
to port the applications very easily between various environments. Uh we'll
52:08
between various environments. Uh we'll
52:08
between various environments. Uh we'll be able to scale. So for example, if I'm
52:11
be able to scale. So for example, if I'm
52:11
be able to scale. So for example, if I'm running an application in uh container,
52:14
running an application in uh container,
52:14
running an application in uh container, I'll be able to scale like say I want to
52:17
I'll be able to scale like say I want to
52:18
I'll be able to scale like say I want to run a pi instance of that
52:20
run a pi instance of that
52:20
run a pi instance of that application. I can just say okay my tail
52:24
application. I can just say okay my tail
52:24
application. I can just say okay my tail value is five. then I'll be able to run
52:27
value is five. then I'll be able to run
52:27
value is five. then I'll be able to run it in five
52:30
it in five
52:30
it in five different different instances and uh
52:34
different different instances and uh
52:34
different different instances and uh it's same line. So as a developer I can
52:38
it's same line. So as a developer I can
52:38
it's same line. So as a developer I can focus on okay building the application
52:41
focus on okay building the application
52:41
focus on okay building the application and I don't need to worry about okay in
52:43
and I don't need to worry about okay in
52:43
and I don't need to worry about okay in my server that dependency is there or
52:46
my server that dependency is there or
52:46
my server that dependency is there or the same version of net is installed on
52:48
the same version of net is installed on
52:48
the same version of net is installed on that I don't need to
52:51
that I don't need to
52:51
that I don't need to worry so uh when in when we starting uh
52:56
worry so uh when in when we starting uh
52:56
worry so uh when in when we starting uh like container we need to understand
53:00
like container we need to understand
53:00
like container we need to understand okay what all things we need to so we
53:03
okay what all things we need to so we
53:03
okay what all things we need to so we need in the traditional container
53:05
need in the traditional container
53:05
need in the traditional container session These are the challenge. So when
53:07
session These are the challenge. So when
53:07
session These are the challenge. So when we are developing a container, you need
53:10
we are developing a container, you need
53:10
we are developing a container, you need a specific file called docker docker
53:13
a specific file called docker docker
53:13
a specific file called docker docker file. So it is a set of instructions
53:17
file. So it is a set of instructions
53:17
file. So it is a set of instructions what all things you need to be part of
53:19
what all things you need to be part of
53:19
what all things you need to be part of that container
53:21
that container
53:21
that container image. So it is manual process like if
53:26
image. So it is manual process like if
53:26
image. So it is manual process like if you code you will be able to generate
53:29
you code you will be able to generate
53:30
you code you will be able to generate it. But still there are some challenges.
53:32
it. But still there are some challenges.
53:32
it. But still there are some challenges. For example, I'm building a web AP
53:34
For example, I'm building a web AP
53:34
For example, I'm building a web AP application file. I am adding a I
53:38
application file. I am adding a I
53:38
application file. I am adding a I created a docker file. Then I am adding
53:40
created a docker file. Then I am adding
53:40
created a docker file. Then I am adding a library as a dependency. Then I have
53:43
a library as a dependency. Then I have
53:43
a library as a dependency. Then I have to modify my docker file to adjust that
53:48
to modify my docker file to adjust that
53:48
to modify my docker file to adjust that also. I need to copy that. I need to
53:51
also. I need to copy that. I need to
53:51
also. I need to copy that. I need to update the build step to build that
53:54
update the build step to build that
53:54
update the build step to build that assembly. All those things it should be
53:56
assembly. All those things it should be
53:56
assembly. All those things it should be again
53:57
again
53:57
again updated. That is one issue. Second is uh
54:02
updated. That is one issue. Second is uh
54:02
updated. That is one issue. Second is uh we want you will be like we have to make
54:06
we want you will be like we have to make
54:06
we want you will be like we have to make sure that container runtime is installed
54:09
sure that container runtime is installed
54:09
sure that container runtime is installed on my machine. So if you're using docker
54:12
on my machine. So if you're using docker
54:12
on my machine. So if you're using docker or man or any other container runtime we
54:16
or man or any other container runtime we
54:16
or man or any other container runtime we have to make sure it is installed and uh
54:20
have to make sure it is installed and uh
54:20
have to make sure it is installed and uh since this is a virtualization
54:21
since this is a virtualization
54:21
since this is a virtualization technology uh either you have to
54:24
technology uh either you have to
54:24
technology uh either you have to install like uh this one WSL or
54:30
install like uh this one WSL or
54:30
install like uh this one WSL or virtualization hyperV so all those
54:32
virtualization hyperV so all those
54:32
virtualization hyperV so all those things matter so that we have to enable
54:36
things matter so that we have to enable
54:36
things matter so that we have to enable virtualization in your machine if it is
54:39
virtualization in your machine if it is
54:39
virtualization in your machine if it is notable.
54:41
notable.
54:41
notable. you won't be able to do that. You have
54:43
you won't be able to do that. You have
54:43
you won't be able to do that. You have to enable WSL all those things and in
54:47
to enable WSL all those things and in
54:47
to enable WSL all those things and in PCD we have conte more step for
54:51
PCD we have conte more step for
54:51
PCD we have conte more step for addressing the uh again docker has to be
54:54
addressing the uh again docker has to be
54:54
addressing the uh again docker has to be installed on the pip pipeline all those
54:58
installed on the pip pipeline all those
54:58
installed on the pip pipeline all those things and cheaper learning curve for
55:01
things and cheaper learning curve for
55:01
things and cheaper learning curve for vin so if you're a net developer and you
55:05
vin so if you're a net developer and you
55:05
vin so if you're a net developer and you have to learn one more thing like you
55:08
have to learn one more thing like you
55:08
have to learn one more thing like you need to understand uh yl you need to
55:12
need to understand uh yl you need to
55:12
need to understand uh yl you need to create docker files. uh you need to
55:15
create docker files. uh you need to
55:15
create docker files. uh you need to understand some uh like basics of Linux
55:20
understand some uh like basics of Linux
55:20
understand some uh like basics of Linux um and what are base images how layering
55:24
um and what are base images how layering
55:24
um and what are base images how layering works all those things it may be a
55:27
works all those things it may be a
55:27
works all those things it may be a little all working for a newcomer but it
55:31
little all working for a newcomer but it
55:31
little all working for a newcomer but it is there so
55:36
how team or Microsoft
55:40
how team or Microsoft
55:40
how team or Microsoft team resolve all these issues In from 6
55:44
team resolve all these issues In from 6
55:44
team resolve all these issues In from 6 onwards uh they introduce a new
55:47
onwards uh they introduce a new
55:47
onwards uh they introduce a new capability uh we can publish
55:51
capability uh we can publish
55:51
capability uh we can publish docker images or we can create docker
55:55
docker images or we can create docker
55:55
docker images or we can create docker images without any container uh
55:58
images without any container uh
55:58
images without any container uh container run. We can use the publish
56:03
container run. We can use the publish
56:03
container run. We can use the publish command to create
56:06
command to create
56:06
command to create a docker image without any
56:10
a docker image without any
56:10
a docker image without any uh no docker file container runtime if
56:14
uh no docker file container runtime if
56:14
uh no docker file container runtime if needed and it's very simple you just
56:17
needed and it's very simple you just
56:17
needed and it's very simple you just need to say
56:18
need to say
56:18
need to say docker you can create a project as a
56:22
docker you can create a project as a
56:22
docker you can create a project as a docker publish with a uh default profile
56:28
command and If you want to customize the
56:32
command and If you want to customize the
56:32
command and If you want to customize the uh docker image settings, you can modify
56:35
uh docker image settings, you can modify
56:35
uh docker image settings, you can modify the project file and
56:39
the project file and
56:39
the project file and update. So these are the
56:41
update. So these are the
56:41
update. So these are the prerequisites. Uh you need net SDK and
56:46
prerequisites. Uh you need net SDK and
56:46
prerequisites. Uh you need net SDK and container contain again it's optional.
56:49
container contain again it's optional.
56:49
container contain again it's optional. Uh if you already installed it, good. If
56:53
Uh if you already installed it, good. If
56:54
Uh if you already installed it, good. If you want to play around and you want to
56:57
you want to play around and you want to
56:57
you want to play around and you want to test it or u like
57:01
test it or u like
57:01
test it or u like uh run in locally all those things you
57:04
uh run in locally all those things you
57:04
uh run in locally all those things you need docker or man or any other
57:08
need docker or man or any other
57:08
need docker or man or any other container. Let's jump into the demo. I
57:12
container. Let's jump into the demo. I
57:12
container. Let's jump into the demo. I already created a
57:14
already created a
57:14
already created a uh web AP
57:17
uh web AP
57:17
uh web AP application. So it's nothing just plain
57:21
application. So it's nothing just plain
57:21
application. So it's nothing just plain old net web AP application enable
57:27
API
57:31
and then uh I am already running docker
57:35
and then uh I am already running docker
57:35
and then uh I am already running docker in my
57:38
machine but I don't have any images I
57:41
machine but I don't have any images I
57:41
machine but I don't have any images I don't have any
57:42
don't have any
57:42
don't have any containers so I'm just going to export
57:47
containers so I'm just going to export
57:47
containers so I'm just going to export this command
57:59
Uh this is uh everything is net 8. Uh it
58:03
Uh this is uh everything is net 8. Uh it
58:03
Uh this is uh everything is net 8. Uh it was uh from 6
58:06
was uh from 6
58:06
was uh from 6 onward. So it is building a image hello
58:10
onward. So it is building a image hello
58:10
onward. So it is building a image hello world that is the project name with a
58:13
world that is the project name with a
58:13
world that is the project name with a tag. Tag is basically version kind of
58:17
tag. Tag is basically version kind of
58:17
tag. Tag is basically version kind of thing. So tag latest on base image
58:22
thing. So tag latest on base image
58:22
thing. So tag latest on base image Microsoft D that is the like base image
58:28
Microsoft D that is the like base image
58:28
Microsoft D that is the like base image from that it it is actually the kind of
58:32
from that it it is actually the kind of
58:32
from that it it is actually the kind of for that. Okay. Now if I say
58:37
for that. Okay. Now if I say
58:37
for that. Okay. Now if I say docker go here and images you'll be able
58:41
docker go here and images you'll be able
58:41
docker go here and images you'll be able to see it created an
58:44
to see it created an
58:44
to see it created an image. Let's run it. Docker
58:48
image. Let's run it. Docker
58:48
image. Let's run it. Docker run let's
59:01
see. So it started as uh web server uh
59:06
see. So it started as uh web server uh
59:06
see. So it started as uh web server uh listening on port 80. I don't have any
59:09
listening on port 80. I don't have any
59:09
listening on port 80. I don't have any uh like
59:11
uh like
59:11
uh like uh or any other thing working on my
59:14
uh or any other thing working on my
59:14
uh or any other thing working on my machine. So this person will talk
59:18
machine. So this person will talk
59:18
machine. So this person will talk about and
59:24
say now you'll be able to see okay this
59:28
say now you'll be able to see okay this
59:28
say now you'll be able to see okay this is warning I'm getting but this is
59:31
is warning I'm getting but this is
59:31
is warning I'm getting but this is actually working let me modify that
59:42
login I'm typing a log
59:47
and cutting
59:49
and cutting
59:49
and cutting [Music]
59:51
[Music]
59:51
[Music] down public again.
1:00:05
Now if I run this
1:00:08
Now if I run this
1:00:09
Now if I run this again and browse
1:00:11
again and browse
1:00:11
again and browse again, you'll be able to see that
1:00:15
again, you'll be able to see that
1:00:15
again, you'll be able to see that log. So uh this is the way we'll be able
1:00:19
log. So uh this is the way we'll be able
1:00:19
log. So uh this is the way we'll be able to publish the uh content or create
1:00:24
to publish the uh content or create
1:00:24
to publish the uh content or create document.
1:00:26
document.
1:00:26
document. Now uh there are certain things all
1:00:29
Now uh there are certain things all
1:00:29
Now uh there are certain things all these things are running on time
1:00:33
these things are running on time
1:00:33
these things are running on time machine but sometime if I'm publishing
1:00:37
machine but sometime if I'm publishing
1:00:37
machine but sometime if I'm publishing to a uh hub or docker hub or any
1:00:43
to a uh hub or docker hub or any
1:00:43
to a uh hub or docker hub or any container registry. So uh docker or
1:00:46
container registry. So uh docker or
1:00:46
container registry. So uh docker or container workflow is basically you
1:00:48
container workflow is basically you
1:00:48
container workflow is basically you create a container you publish it to a
1:00:52
create a container you publish it to a
1:00:52
create a container you publish it to a container registry and your op team or
1:00:56
container registry and your op team or
1:00:56
container registry and your op team or de deployment team takes that image or
1:01:00
de deployment team takes that image or
1:01:00
de deployment team takes that image or your whatever pipeline takes that image
1:01:04
your whatever pipeline takes that image
1:01:04
your whatever pipeline takes that image and deploys to the web of in natural uh
1:01:09
and deploys to the web of in natural uh
1:01:09
and deploys to the web of in natural uh it is after container and like contain
1:01:14
it is after container and like contain
1:01:14
it is after container and like contain that is
1:01:15
that is
1:01:15
that is offer.
1:01:16
offer.
1:01:16
offer. So if I want to publish to docker hub,
1:01:20
So if I want to publish to docker hub,
1:01:20
So if I want to publish to docker hub, I'm not using a container say I'm using
1:01:23
I'm not using a container say I'm using
1:01:23
I'm not using a container say I'm using docker hub. So in that scenario, I have
1:01:27
docker hub. So in that scenario, I have
1:01:27
docker hub. So in that scenario, I have to make sure that my container name
1:01:31
to make sure that my container name
1:01:31
to make sure that my container name instead of hello world it should be in
1:01:33
instead of hello world it should be in
1:01:34
instead of hello world it should be in the format of uh hub username that the
1:01:38
the format of uh hub username that the
1:01:38
the format of uh hub username that the image name application name. So if I
1:01:42
image name application name. So if I
1:01:42
image name application name. So if I want to customize that I just need to
1:01:45
want to customize that I just need to
1:01:45
want to customize that I just need to add a property like this container
1:01:48
add a property like this container
1:01:48
add a property like this container repository. This is my docker hub
1:01:50
repository. This is my docker hub
1:01:50
repository. This is my docker hub username and this is the
1:01:53
username and this is the
1:01:53
username and this is the application. And now if I do uh
1:02:08
this Oh, sorry. I didn't save
1:02:18
the Now it build a different image. So
1:02:23
the Now it build a different image. So
1:02:23
the Now it build a different image. So Android with the
1:02:25
Android with the
1:02:25
Android with the latest. Okay. Now if I come
1:02:29
latest. Okay. Now if I come
1:02:29
latest. Okay. Now if I come here, you'll be able to see
1:02:31
here, you'll be able to see
1:02:31
here, you'll be able to see Android. The same thing no other
1:02:35
Android. The same thing no other
1:02:35
Android. The same thing no other differences. And
1:02:37
differences. And
1:02:37
differences. And uh keeping uh the latest as version is
1:02:42
uh keeping uh the latest as version is
1:02:42
uh keeping uh the latest as version is not the recommended packing. So if I
1:02:46
not the recommended packing. So if I
1:02:46
not the recommended packing. So if I want to customize the tag, I can do it
1:02:49
want to customize the tag, I can do it
1:02:49
want to customize the tag, I can do it with contain tag.
1:02:53
with contain tag.
1:02:53
with contain tag. uh tag containment tag
1:02:56
uh tag containment tag
1:02:56
uh tag containment tag elements.
1:03:01
So
1:03:03
So
1:03:03
So here these are the various customization
1:03:06
here these are the various customization
1:03:06
here these are the various customization options. So I'm changing I added a
1:03:09
options. So I'm changing I added a
1:03:09
options. So I'm changing I added a version as V1. I'm keeping
1:03:13
version as V1. I'm keeping
1:03:13
version as V1. I'm keeping these things
1:03:16
up. Then I'm updating
1:03:29
again. Now it came as V1 tag. Earlier it
1:03:34
again. Now it came as V1 tag. Earlier it
1:03:34
again. Now it came as V1 tag. Earlier it was now it is
1:03:37
was now it is
1:03:37
was now it is V1. And
1:03:39
V1. And
1:03:39
V1. And uh so okay. So if you look into
1:03:43
uh so okay. So if you look into
1:03:43
uh so okay. So if you look into this you'll be able to see Debian and if
1:03:48
this you'll be able to see Debian and if
1:03:48
this you'll be able to see Debian and if I want to and it's almost 220 MB 220 MB.
1:03:54
I want to and it's almost 220 MB 220 MB.
1:03:54
I want to and it's almost 220 MB 220 MB. So if I want to reduce the size of that
1:03:59
So if I want to reduce the size of that
1:03:59
So if I want to reduce the size of that image I can use alpine image. So I am
1:04:06
image I can use alpine image. So I am
1:04:06
image I can use alpine image. So I am just changing it to alpine and I'm
1:04:09
just changing it to alpine and I'm
1:04:09
just changing it to alpine and I'm updating the tag as
1:04:11
updating the tag as
1:04:11
updating the tag as well. Now if I run this
1:04:28
again and if I go here that alane
1:04:32
again and if I go here that alane
1:04:32
again and if I go here that alane version got a smaller footprint. also
1:04:37
version got a smaller footprint. also
1:04:37
version got a smaller footprint. also 110 MB and it's
1:04:51
also uh registry. If I want to publish
1:04:54
also uh registry. If I want to publish
1:04:54
also uh registry. If I want to publish it to a different one, what I can do? I
1:04:59
it to a different one, what I can do? I
1:04:59
it to a different one, what I can do? I can uh like add a container registry
1:05:03
can uh like add a container registry
1:05:03
can uh like add a container registry which is the container you want. You can
1:05:05
which is the container you want. You can
1:05:06
which is the container you want. You can set
1:05:08
it. Yeah. Okay. This is the way you can
1:05:11
it. Yeah. Okay. This is the way you can
1:05:11
it. Yeah. Okay. This is the way you can run the
1:05:13
run the
1:05:13
run the container. And for deploying to docker
1:05:16
container. And for deploying to docker
1:05:16
container. And for deploying to docker hub you need to uh set these two
1:05:20
hub you need to uh set these two
1:05:20
hub you need to uh set these two environment container with the username
1:05:22
environment container with the username
1:05:22
environment container with the username and password.
1:05:28
[Music]
1:05:29
[Music]
1:05:29
[Music] Let's go
1:05:38
[Music]
1:05:51
to that.
1:05:55
[Music]
1:06:13
That's fine.
1:06:28
I don't have any word or
1:06:31
I don't have any word or
1:06:31
I don't have any word or anything.
1:06:33
anything.
1:06:33
anything. So here I'm uncommenting this
1:07:12
Um I am publishing again.
1:07:17
Now hopefully it will get published
1:07:21
Now hopefully it will get published
1:07:21
Now hopefully it will get published to Yeah, it is actually getting
1:07:23
to Yeah, it is actually getting
1:07:23
to Yeah, it is actually getting published to
1:07:25
published to
1:07:25
published to the you'll be able to see it here.
1:07:58
Yeah, these are some
1:08:24
No. So these are some best practices you
1:08:28
No. So these are some best practices you
1:08:28
No. So these are some best practices you can follow. Use physical or tags always
1:08:32
can follow. Use physical or tags always
1:08:32
can follow. Use physical or tags always don't use status
1:08:34
don't use status
1:08:34
don't use status uh monitor the image size. So you can
1:08:37
uh monitor the image size. So you can
1:08:37
uh monitor the image size. So you can optimize the alpha or any other images.
1:08:40
optimize the alpha or any other images.
1:08:40
optimize the alpha or any other images. You can do security scanning regularly
1:08:43
You can do security scanning regularly
1:08:43
You can do security scanning regularly scan images for all. So uh there are
1:08:46
scan images for all. So uh there are
1:08:46
scan images for all. So uh there are yeah this tab refers to the website. Uh
1:08:51
yeah this tab refers to the website. Uh
1:08:51
yeah this tab refers to the website. Uh so there are some uh tools available for
1:08:56
so there are some uh tools available for
1:08:56
so there are some uh tools available for security. Yeah these are some resources
1:08:59
security. Yeah these are some resources
1:08:59
security. Yeah these are some resources uh which helps you to learn more about
1:09:02
uh which helps you to learn more about
1:09:02
uh which helps you to learn more about it and thank
1:09:04
it and thank
1:09:04
it and thank you Simon.
1:09:08
you Simon.
1:09:08
you Simon. Bang on you're on time. It's 7:59. Just
1:09:11
Bang on you're on time. It's 7:59. Just
1:09:11
Bang on you're on time. It's 7:59. Just a minute before we move to the next
1:09:12
a minute before we move to the next
1:09:12
a minute before we move to the next session.
1:09:14
session.
1:09:14
session. I know I know we were saying that we're
1:09:16
I know I know we were saying that we're
1:09:16
I know I know we were saying that we're not going to take any questions but let
1:09:18
not going to take any questions but let
1:09:18
not going to take any questions but let let's take at least one question
1:09:20
let's take at least one question
1:09:20
let's take at least one question by you can come back to the live YouTube
1:09:22
by you can come back to the live YouTube
1:09:22
by you can come back to the live YouTube live chat and then we can reply to some
1:09:25
live chat and then we can reply to some
1:09:25
live chat and then we can reply to some of the questions right so maybe let's
1:09:27
of the questions right so maybe let's
1:09:27
of the questions right so maybe let's take um uh did it do there was one from
1:09:32
take um uh did it do there was one from
1:09:32
take um uh did it do there was one from one of the MVPs or where did it go yeah
1:09:34
one of the MVPs or where did it go yeah
1:09:34
one of the MVPs or where did it go yeah Sarak is asking is net containerized app
1:09:38
Sarak is asking is net containerized app
1:09:38
Sarak is asking is net containerized app in net containerized app what's the best
1:09:41
in net containerized app what's the best
1:09:41
in net containerized app what's the best practice to simplify CI/CD pipeline
1:09:43
practice to simplify CI/CD pipeline
1:09:43
practice to simplify CI/CD pipeline setup when docker dependencies
1:09:45
setup when docker dependencies
1:09:45
setup when docker dependencies complicate cloud native builds as a
1:09:47
complicate cloud native builds as a
1:09:48
complicate cloud native builds as a comp. Yeah. Uh this one uh this is
1:09:52
comp. Yeah. Uh this one uh this is
1:09:52
comp. Yeah. Uh this one uh this is actually a deployment. So I'm just
1:09:55
actually a deployment. So I'm just
1:09:55
actually a deployment. So I'm just deploying my application to again docker
1:09:59
deploying my application to again docker
1:09:59
deploying my application to again docker hub. Uh so it's nothing. I'm just uh
1:10:03
hub. Uh so it's nothing. I'm just uh
1:10:03
hub. Uh so it's nothing. I'm just uh setting up net sdk and build deploy
1:10:06
setting up net sdk and build deploy
1:10:06
setting up net sdk and build deploy everything to docker hub. Nothing. I
1:10:10
everything to docker hub. Nothing. I
1:10:10
everything to docker hub. Nothing. I just need to uh run this.
1:10:19
Uh I counted
1:10:22
Uh I counted
1:10:22
Uh I counted uh I can manage. Yeah. So we don't see
1:10:26
uh I can manage. Yeah. So we don't see
1:10:26
uh I can manage. Yeah. So we don't see your screen. Just in case you were
1:10:27
your screen. Just in case you were
1:10:27
your screen. Just in case you were showing your screen.
1:10:38
Yeah. Uh so I just uh there is a uh like
1:10:42
Yeah. Uh so I just uh there is a uh like
1:10:42
Yeah. Uh so I just uh there is a uh like hello net in my GitHub repo. So I
1:10:48
hello net in my GitHub repo. So I
1:10:48
hello net in my GitHub repo. So I confab
1:10:52
action. So basically uh in this thing
1:10:55
action. So basically uh in this thing
1:10:55
action. So basically uh in this thing I'm just setting up net
1:10:58
I'm just setting up net
1:10:58
I'm just setting up net SDK and I'm just publishing that's
1:11:02
SDK and I'm just publishing that's
1:11:03
SDK and I'm just publishing that's it. Now no other configuration on it. uh
1:11:07
it. Now no other configuration on it. uh
1:11:07
it. Now no other configuration on it. uh it is not uh suitable for all but uh
1:11:11
it is not uh suitable for all but uh
1:11:12
it is not uh suitable for all but uh most of the uh like
1:11:17
creatation container session work and
1:11:21
creatation container session work and
1:11:21
creatation container session work and u aspair is using this technique to uh
1:11:27
u aspair is using this technique to uh
1:11:27
u aspair is using this technique to uh build and run all this uh like whatever
1:11:31
build and run all this uh like whatever
1:11:31
build and run all this uh like whatever container uh like unless you are saying
1:11:35
container uh like unless you are saying
1:11:35
container uh like unless you are saying as docker file and Do file to publish
1:11:39
as docker file and Do file to publish
1:11:39
as docker file and Do file to publish that as a part of your
1:11:42
that as a part of your
1:11:42
that as a part of your application. Uh by default net aster is
1:11:46
application. Uh by default net aster is
1:11:46
application. Uh by default net aster is using this technique for building uh
1:11:49
using this technique for building uh
1:11:49
using this technique for building uh images container set.
1:11:53
images container set.
1:11:53
images container set. Per perfect. Thank thanks thanks for
1:11:55
Per perfect. Thank thanks thanks for
1:11:55
Per perfect. Thank thanks thanks for answering that questions and I think
1:11:57
answering that questions and I think
1:11:58
answering that questions and I think that that allows us to now move to our
1:12:00
that that allows us to now move to our
1:12:00
that that allows us to now move to our next session and Raj any final thing you
1:12:02
next session and Raj any final thing you
1:12:02
next session and Raj any final thing you want to add before we move to the next
1:12:03
want to add before we move to the next
1:12:04
want to add before we move to the next session?
1:12:05
session?
1:12:05
session? No, thank you. Thank you for the time.
1:12:08
No, thank you. Thank you for the time.
1:12:08
No, thank you. Thank you for the time. Thank you for like attending
1:12:11
Thank you for like attending
1:12:11
Thank you for like attending my next session. Thank you. Please uh or
1:12:17
my next session. Thank you. Please uh or
1:12:17
my next session. Thank you. Please uh or connect offline on it. Thank Yeah,
1:12:20
connect offline on it. Thank Yeah,
1:12:20
connect offline on it. Thank Yeah, please feel free to go and connect with
1:12:21
please feel free to go and connect with
1:12:21
please feel free to go and connect with Andra. He's pretty active. I also have
1:12:23
Andra. He's pretty active. I also have
1:12:23
Andra. He's pretty active. I also have one of his book here somewhere. He's
1:12:25
one of his book here somewhere. He's
1:12:25
one of his book here somewhere. He's it's up there. That's how I got
1:12:26
it's up there. That's how I got
1:12:26
it's up there. That's how I got connected to Andra. His book is there
1:12:28
connected to Andra. His book is there
1:12:28
connected to Andra. His book is there with me. Uh so, thank you so much Andraj
1:12:31
with me. Uh so, thank you so much Andraj
1:12:31
with me. Uh so, thank you so much Andraj for your time. Have a nice evening and
1:12:33
for your time. Have a nice evening and
1:12:33
for your time. Have a nice evening and yeah hope to see you soon some some in
1:12:35
yeah hope to see you soon some some in
1:12:35
yeah hope to see you soon some some in some other inerson events in India. Bye.
1:12:37
some other inerson events in India. Bye.
1:12:37
some other inerson events in India. Bye. See you. Bye-bye. Bye-bye.
1:12:39
See you. Bye-bye. Bye-bye.
1:12:39
See you. Bye-bye. Bye-bye. All right ladies and gentlemen uh that
1:12:41
All right ladies and gentlemen uh that
1:12:41
All right ladies and gentlemen uh that was Anur Raj giving you a very crisp and
1:12:44
was Anur Raj giving you a very crisp and
1:12:44
was Anur Raj giving you a very crisp and short session just about 15 minutes and
1:12:45
short session just about 15 minutes and
1:12:46
short session just about 15 minutes and now we move to our next session and
1:12:47
now we move to our next session and
1:12:47
now we move to our next session and that's by Kaman. Kaman is actually going
1:12:50
that's by Kaman. Kaman is actually going
1:12:50
that's by Kaman. Kaman is actually going to talk about um
1:12:52
to talk about um
1:12:52
to talk about um uh Aspire getting getting started and
1:12:55
uh Aspire getting getting started and
1:12:55
uh Aspire getting getting started and Kaman is a senior C# and net developer.
1:12:58
Kaman is a senior C# and net developer.
1:12:58
Kaman is a senior C# and net developer. He's a CTO. He's a C# mentor and a
1:13:00
He's a CTO. He's a C# mentor and a
1:13:00
He's a CTO. He's a C# mentor and a software engineer. So without any
1:13:02
software engineer. So without any
1:13:02
software engineer. So without any further ado, uh uh Kaman, welcome to the
1:13:05
further ado, uh uh Kaman, welcome to the
1:13:05
further ado, uh uh Kaman, welcome to the .NET conference. I cannot add you
1:13:07
.NET conference. I cannot add you
1:13:07
.NET conference. I cannot add you because your device is disconnected.
1:13:09
because your device is disconnected.
1:13:09
because your device is disconnected. Perhaps you need to switch on your
1:13:10
Perhaps you need to switch on your
1:13:10
Perhaps you need to switch on your camera. That's how I can add
1:13:15
you. Come on. If you can hear me, you'll
1:13:17
you. Come on. If you can hear me, you'll
1:13:17
you. Come on. If you can hear me, you'll have to switch on your camera. I think
1:13:20
have to switch on your camera. I think
1:13:20
have to switch on your camera. I think that's only I can add
1:13:23
that's only I can add
1:13:23
that's only I can add you. Your camera was working fine moment
1:13:27
you. Your camera was working fine moment
1:13:27
you. Your camera was working fine moment back.
1:13:28
back.
1:13:28
back. Suk says thank
1:13:35
you. Come on. Don't don't don't do
1:13:38
you. Come on. Don't don't don't do
1:13:38
you. Come on. Don't don't don't do this. Don't ghost us. If your device is
1:13:42
this. Don't ghost us. If your device is
1:13:42
this. Don't ghost us. If your device is not working, maybe you can just uh
1:13:44
not working, maybe you can just uh
1:13:44
not working, maybe you can just uh refresh your page and maybe just come
1:13:46
refresh your page and maybe just come
1:13:46
refresh your page and maybe just come join this meeting once again. And until
1:13:49
join this meeting once again. And until
1:13:49
join this meeting once again. And until then, I'll we'll take a minute break,
1:13:51
then, I'll we'll take a minute break,
1:13:51
then, I'll we'll take a minute break, ladies and gentlemen. And we'll see you
1:13:53
ladies and gentlemen. And we'll see you
1:13:53
ladies and gentlemen. And we'll see you in about a
1:13:54
in about a
1:13:54
in about a minute.
1:13:57
minute.
1:13:57
minute. [Music]
1:14:13
[Music]
1:14:18
[Music]
1:14:18
[Music] Heat. Heat.
1:14:32
[Music]
1:14:51
[Music]
1:15:05
There you go. Now I can add camera.
1:15:08
There you go. Now I can add camera.
1:15:08
There you go. Now I can add camera. Let's see if the magic
1:15:11
Let's see if the magic
1:15:11
Let's see if the magic works. Loading. Loading. Loading. Come
1:15:13
works. Loading. Loading. Loading. Come
1:15:13
works. Loading. Loading. Loading. Come on. Can you hear us by any chance?
1:15:18
H that's interesting at half an well
1:15:22
H that's interesting at half an well
1:15:22
H that's interesting at half an well some technical glitch is so much needed
1:15:25
some technical glitch is so much needed
1:15:25
some technical glitch is so much needed in a virtual
1:15:27
in a virtual
1:15:27
in a virtual conference. Well, it did work very
1:15:30
conference. Well, it did work very
1:15:30
conference. Well, it did work very nicely. Okay. Re says uh thank you Simon
1:15:34
nicely. Okay. Re says uh thank you Simon
1:15:34
nicely. Okay. Re says uh thank you Simon and Raj and for those you know for those
1:15:36
and Raj and for those you know for those
1:15:36
and Raj and for those you know for those uh while while we figure out how while
1:15:40
uh while while we figure out how while
1:15:40
uh while while we figure out how while we figure out how you know Cameron joins
1:15:42
we figure out how you know Cameron joins
1:15:42
we figure out how you know Cameron joins us for the uh for for the next session
1:15:45
us for the uh for for the next session
1:15:45
us for the uh for for the next session you know I want to I want to quickly
1:15:46
you know I want to I want to quickly
1:15:46
you know I want to I want to quickly share my screen go to entire screen and
1:15:50
share my screen go to entire screen and
1:15:50
share my screen go to entire screen and uh yeah hide it and add this one. Yeah,
1:15:54
uh yeah hide it and add this one. Yeah,
1:15:54
uh yeah hide it and add this one. Yeah, I want to talk about the upcoming
1:15:56
I want to talk about the upcoming
1:15:56
I want to talk about the upcoming conference that we have ladies and
1:15:57
conference that we have ladies and
1:15:57
conference that we have ladies and gentlemen. The next conference that we
1:15:58
gentlemen. The next conference that we
1:15:58
gentlemen. The next conference that we have coming up is in August, right? The
1:16:02
have coming up is in August, right? The
1:16:02
have coming up is in August, right? The dates are actually August 5th and 6th.
1:16:04
dates are actually August 5th and 6th.
1:16:04
dates are actually August 5th and 6th. This is I believe this is going to be
1:16:06
This is I believe this is going to be
1:16:06
This is I believe this is going to be maybe yeah this is going to be the fifth
1:16:08
maybe yeah this is going to be the fifth
1:16:08
maybe yeah this is going to be the fifth edition of soft architecture conference.
1:16:10
edition of soft architecture conference.
1:16:10
edition of soft architecture conference. Last year I think we had incredible
1:16:12
Last year I think we had incredible
1:16:12
Last year I think we had incredible three days. Uh and we have about 30 40
1:16:15
three days. Uh and we have about 30 40
1:16:15
three days. Uh and we have about 30 40 speakers. It was a very very very good
1:16:17
speakers. It was a very very very good
1:16:18
speakers. It was a very very very good conference. We do this every year. Ooh,
1:16:20
conference. We do this every year. Ooh,
1:16:20
conference. We do this every year. Ooh, some CSS
1:16:22
some CSS
1:16:22
some CSS issue. And uh yeah, we had uh last year
1:16:27
issue. And uh yeah, we had uh last year
1:16:27
issue. And uh yeah, we had uh last year we did it on August 14th, 15th and 16th.
1:16:30
we did it on August 14th, 15th and 16th.
1:16:30
we did it on August 14th, 15th and 16th. And this year we're going to do
1:16:32
And this year we're going to do
1:16:32
And this year we're going to do it on August 5th and 6th. And if you get
1:16:35
it on August 5th and 6th. And if you get
1:16:35
it on August 5th and 6th. And if you get good good submissions, then we'll move
1:16:37
good good submissions, then we'll move
1:16:37
good good submissions, then we'll move it to maybe 3 days of conference. Let's
1:16:40
it to maybe 3 days of conference. Let's
1:16:40
it to maybe 3 days of conference. Let's let's try to add Camran. Camas is still
1:16:43
let's try to add Camran. Camas is still
1:16:43
let's try to add Camran. Camas is still not working, but never mind. And if you
1:16:45
not working, but never mind. And if you
1:16:45
not working, but never mind. And if you go to if you go to, you know, uh the new
1:16:48
go to if you go to, you know, uh the new
1:16:48
go to if you go to, you know, uh the new C# platform that we have.
1:16:51
C# platform that we have.
1:16:51
C# platform that we have. Okay. Oh, there you go. That's that's my
1:16:54
Okay. Oh, there you go. That's that's my
1:16:54
Okay. Oh, there you go. That's that's my man. There he is. Hello, gentlemen. How
1:16:56
man. There he is. Hello, gentlemen. How
1:16:56
man. There he is. Hello, gentlemen. How are you?
1:16:58
are you?
1:16:58
are you? Great. Great. Great. Thank you. How are
1:17:01
Great. Great. Great. Thank you. How are
1:17:02
Great. Great. Great. Thank you. How are you? Sorry. Sorry. You know, it's okay.
1:17:04
you? Sorry. Sorry. You know, it's okay.
1:17:04
you? Sorry. Sorry. You know, it's okay. There's always there's always something
1:17:06
There's always there's always something
1:17:06
There's always there's always something that happens, right? So, where are you
1:17:07
that happens, right? So, where are you
1:17:07
that happens, right? So, where are you joining us today, Cam from?
1:17:10
joining us today, Cam from?
1:17:10
joining us today, Cam from? Uh, I'm from Iran. And wow. Yeah, as you
1:17:14
Uh, I'm from Iran. And wow. Yeah, as you
1:17:14
Uh, I'm from Iran. And wow. Yeah, as you mentioned in Iran, it's really uh usual.
1:17:19
mentioned in Iran, it's really uh usual.
1:17:20
mentioned in Iran, it's really uh usual. I mean, are you on VPN by by any chance?
1:17:23
I mean, are you on VPN by by any chance?
1:17:23
I mean, are you on VPN by by any chance? Are you using VPN?
1:17:25
Are you using VPN?
1:17:25
Are you using VPN? But now I connected my VPN and it's uh
1:17:29
But now I connected my VPN and it's uh
1:17:29
But now I connected my VPN and it's uh okay. Yeah, I think we have we had a
1:17:32
okay. Yeah, I think we have we had a
1:17:32
okay. Yeah, I think we have we had a couple of speakers I think maybe from
1:17:33
couple of speakers I think maybe from
1:17:33
couple of speakers I think maybe from Wahid was there. I think he also had the
1:17:35
Wahid was there. I think he also had the
1:17:35
Wahid was there. I think he also had the same issues. So some speakers try to
1:17:36
same issues. So some speakers try to
1:17:36
same issues. So some speakers try to connect on VPN then it works. Kaman,
1:17:39
connect on VPN then it works. Kaman,
1:17:39
connect on VPN then it works. Kaman, thank you so much Kam once again uh for
1:17:41
thank you so much Kam once again uh for
1:17:41
thank you so much Kam once again uh for you know joining us in this conference.
1:17:43
you know joining us in this conference.
1:17:43
you know joining us in this conference. We really appreciate your time. Please
1:17:45
We really appreciate your time. Please
1:17:45
We really appreciate your time. Please feel free to go ahead and share your
1:17:46
feel free to go ahead and share your
1:17:46
feel free to go ahead and share your screen. I know we already some minutes
1:17:48
screen. I know we already some minutes
1:17:48
screen. I know we already some minutes in your session. So please feel free to
1:17:50
in your session. So please feel free to
1:17:50
in your session. So please feel free to go ahead and share your screen and then
1:17:51
go ahead and share your screen and then
1:17:51
go ahead and share your screen and then we can get started.
1:17:53
we can get started.
1:17:53
we can get started. Okay, great. Yeah. Yes.
1:17:57
Okay, great. Yeah. Yes.
1:17:57
Okay, great. Yeah. Yes. Um so I have added your Oh wow. Are you
1:18:01
Um so I have added your Oh wow. Are you
1:18:01
Um so I have added your Oh wow. Are you going to present through through your
1:18:03
going to present through through your
1:18:03
going to present through through your website?
1:18:05
website?
1:18:05
website? Uh yes starting from here. Pretty cool.
1:18:08
Uh yes starting from here. Pretty cool.
1:18:08
Uh yes starting from here. Pretty cool. All right then. Next 30 the floor is all
1:18:11
All right then. Next 30 the floor is all
1:18:11
All right then. Next 30 the floor is all yours and next 30 35 minutes is all you.
1:18:15
yours and next 30 35 minutes is all you.
1:18:15
yours and next 30 35 minutes is all you. Great. Thank you. Thank you so much.
1:18:18
Great. Thank you. Thank you so much.
1:18:18
Great. Thank you. Thank you so much. Great. So uh as you know my name is
1:18:21
Great. So uh as you know my name is
1:18:21
Great. So uh as you know my name is Coman. Uh I'm a software engineer. Uh
1:18:25
Coman. Uh I'm a software engineer. Uh
1:18:25
Coman. Uh I'm a software engineer. Uh but before that let me uh tell you that
1:18:29
but before that let me uh tell you that
1:18:29
but before that let me uh tell you that uh this monitor is the Streamyard and
1:18:33
uh this monitor is the Streamyard and
1:18:34
uh this monitor is the Streamyard and this is my laptop which I'm going to
1:18:35
this is my laptop which I'm going to
1:18:35
this is my laptop which I'm going to present on my laptop. and Visual Studio
1:18:38
present on my laptop. and Visual Studio
1:18:38
present on my laptop. and Visual Studio and other stuffs and uh my notes are
1:18:42
and other stuffs and uh my notes are
1:18:42
and other stuffs and uh my notes are here. So uh if I'm looking at this
1:18:46
here. So uh if I'm looking at this
1:18:47
here. So uh if I'm looking at this um monitor, please excuse me uh because
1:18:50
um monitor, please excuse me uh because
1:18:50
um monitor, please excuse me uh because I should check the chat and comments. So
1:18:55
I should check the chat and comments. So
1:18:55
I should check the chat and comments. So let's get started. My name is uh Tomron
1:18:59
let's get started. My name is uh Tomron
1:18:59
let's get started. My name is uh Tomron and I'm really happy to be here uh as an
1:19:03
and I'm really happy to be here uh as an
1:19:03
and I'm really happy to be here uh as an speaker for the uh net aspire new
1:19:10
speaker for the uh net aspire new
1:19:10
speaker for the uh net aspire new feature of Microsoft which that's really
1:19:13
feature of Microsoft which that's really
1:19:13
feature of Microsoft which that's really exciting feature.
1:19:15
exciting feature.
1:19:15
exciting feature. So uh in this s uh in this session uh
1:19:21
So uh in this s uh in this session uh
1:19:21
So uh in this s uh in this session uh I'm going to dive into how to enhance an
1:19:25
I'm going to dive into how to enhance an
1:19:25
I'm going to dive into how to enhance an existing net project by adding uh the
1:19:29
existing net project by adding uh the
1:19:29
existing net project by adding uh the net aspire. So why I'm not going to
1:19:34
net aspire. So why I'm not going to
1:19:34
net aspire. So why I'm not going to introduce net aspire or getting started
1:19:37
introduce net aspire or getting started
1:19:37
introduce net aspire or getting started by um net aspire because if you do a
1:19:42
by um net aspire because if you do a
1:19:42
by um net aspire because if you do a little search on the internet YouTube or
1:19:45
little search on the internet YouTube or
1:19:45
little search on the internet YouTube or anywhere you will find many resources
1:19:49
anywhere you will find many resources
1:19:49
anywhere you will find many resources which all of them are talking about how
1:19:53
which all of them are talking about how
1:19:53
which all of them are talking about how to get started I mean how to create a
1:19:56
to get started I mean how to create a
1:19:56
to get started I mean how to create a new project
1:19:58
new project
1:19:58
new project uh in uh with Aspire
1:20:01
uh in uh with Aspire
1:20:01
uh in uh with Aspire Okay. But uh in a real world uh they're
1:20:05
Okay. But uh in a real world uh they're
1:20:05
Okay. But uh in a real world uh they're not going to start from scratch. Uh all
1:20:09
not going to start from scratch. Uh all
1:20:09
not going to start from scratch. Uh all companies they have their own uh
1:20:12
companies they have their own uh
1:20:12
companies they have their own uh projects right and they are working with
1:20:15
projects right and they are working with
1:20:15
projects right and they are working with clean architecture
1:20:17
clean architecture
1:20:17
clean architecture microservices and layer or or even
1:20:21
microservices and layer or or even
1:20:21
microservices and layer or or even simple uh web API MVC blazer or or any
1:20:26
simple uh web API MVC blazer or or any
1:20:26
simple uh web API MVC blazer or or any other uh applications. they're not going
1:20:29
other uh applications. they're not going
1:20:29
other uh applications. they're not going to delete their projects and stop from
1:20:33
to delete their projects and stop from
1:20:33
to delete their projects and stop from scratch. So the big deal is how can I
1:20:38
scratch. So the big deal is how can I
1:20:38
scratch. So the big deal is how can I integrate or
1:20:40
integrate or
1:20:40
integrate or uh add this new feature net aspire to my
1:20:46
uh add this new feature net aspire to my
1:20:46
uh add this new feature net aspire to my existing project. This is better than
1:20:49
existing project. This is better than
1:20:49
existing project. This is better than starting from scratch.
1:20:52
starting from scratch.
1:20:52
starting from scratch. So uh
1:20:55
So uh
1:20:55
So uh uh for example for u a sample I I have
1:21:00
uh for example for u a sample I I have
1:21:00
uh for example for u a sample I I have created a project and uh as you can see
1:21:04
created a project and uh as you can see
1:21:04
created a project and uh as you can see this is my blog on github.io and this is
1:21:07
this is my blog on github.io and this is
1:21:07
this is my blog on github.io and this is my website which uh most of the time I'm
1:21:12
my website which uh most of the time I'm
1:21:12
my website which uh most of the time I'm working as a mentor um for uh finding a
1:21:17
working as a mentor um for uh finding a
1:21:17
working as a mentor um for uh finding a job offer. It has uh
1:21:21
job offer. It has uh
1:21:21
job offer. It has uh many steps. It's not really easy. Uh
1:21:25
many steps. It's not really easy. Uh
1:21:25
many steps. It's not really easy. Uh which you can take a look at my website
1:21:28
which you can take a look at my website
1:21:28
which you can take a look at my website and see uh what we do. I'm not alone. We
1:21:32
and see uh what we do. I'm not alone. We
1:21:32
and see uh what we do. I'm not alone. We have uh we we are a team. So, but if you
1:21:36
have uh we we are a team. So, but if you
1:21:36
have uh we we are a team. So, but if you want uh
1:21:38
want uh
1:21:38
want uh technical
1:21:40
technical
1:21:40
technical u blog, this is my blog and you can see
1:21:45
u blog, this is my blog and you can see
1:21:45
u blog, this is my blog and you can see uh my articles also. I have a YouTube
1:21:48
uh my articles also. I have a YouTube
1:21:48
uh my articles also. I have a YouTube channel which you can uh see my YouTube
1:21:54
channel which you can uh see my YouTube
1:21:54
channel which you can uh see my YouTube channel
1:21:55
channel
1:21:55
channel uh at this address which I uh
1:22:00
uh at this address which I uh
1:22:00
uh at this address which I uh teach whatever I learn I'm same as
1:22:05
teach whatever I learn I'm same as
1:22:05
teach whatever I learn I'm same as everybody else. So uh as you can see
1:22:09
everybody else. So uh as you can see
1:22:09
everybody else. So uh as you can see here I have a project a web API project
1:22:14
here I have a project a web API project
1:22:14
here I have a project a web API project which is
1:22:16
which is
1:22:16
which is uh implementing a cro operation for a
1:22:22
uh implementing a cro operation for a
1:22:22
uh implementing a cro operation for a really simple entity called person which
1:22:26
really simple entity called person which
1:22:26
really simple entity called person which has an ID first name and last name. It
1:22:30
has an ID first name and last name. It
1:22:30
has an ID first name and last name. It doesn't matter. You can add more
1:22:32
doesn't matter. You can add more
1:22:32
doesn't matter. You can add more properties, more fields to uh entity or
1:22:37
properties, more fields to uh entity or
1:22:37
properties, more fields to uh entity or uh you you can have many other
1:22:40
uh you you can have many other
1:22:40
uh you you can have many other entities. It doesn't affect on what we
1:22:43
entities. It doesn't affect on what we
1:22:43
entities. It doesn't affect on what we are going to
1:22:44
are going to
1:22:44
are going to do. And I have my database context
1:22:50
do. And I have my database context
1:22:50
do. And I have my database context here. I have the controller which uh
1:22:55
here. I have the controller which uh
1:22:55
here. I have the controller which uh implements the uh showing the list of
1:22:59
implements the uh showing the list of
1:22:59
implements the uh showing the list of people
1:23:01
people
1:23:01
people uh showing one person by ID uh
1:23:06
uh showing one person by ID uh
1:23:07
uh showing one person by ID uh updating creating delete and other uh
1:23:11
updating creating delete and other uh
1:23:11
updating creating delete and other uh operations. So and one more thing that
1:23:14
operations. So and one more thing that
1:23:14
operations. So and one more thing that I'm going to show here here is the
1:23:17
I'm going to show here here is the
1:23:17
I'm going to show here here is the connection stream. It's my connection
1:23:20
connection stream. It's my connection
1:23:20
connection stream. It's my connection string. And let's see what do we have in
1:23:24
string. And let's see what do we have in
1:23:24
string. And let's see what do we have in the program. CS the regular things that
1:23:29
the program. CS the regular things that
1:23:29
the program. CS the regular things that we usually use in our projects.
1:23:32
we usually use in our projects.
1:23:32
we usually use in our projects. Controllers, API
1:23:34
Controllers, API
1:23:34
Controllers, API versioning and uh using swagger and
1:23:39
versioning and uh using swagger and
1:23:39
versioning and uh using swagger and registering the database and the other
1:23:42
registering the database and the other
1:23:42
registering the database and the other stuffs routing mapping controllers and
1:23:45
stuffs routing mapping controllers and
1:23:46
stuffs routing mapping controllers and others. And the another project that I
1:23:48
others. And the another project that I
1:23:48
others. And the another project that I have is an MVC client project. That's an
1:23:52
have is an MVC client project. That's an
1:23:52
have is an MVC client project. That's an MVC which acts as uh client uh and uh
1:23:58
MVC which acts as uh client uh and uh
1:23:58
MVC which acts as uh client uh and uh its responsibility is uh showing or or
1:24:03
its responsibility is uh showing or or
1:24:03
its responsibility is uh showing or or uh interacting with my API project to uh
1:24:08
uh interacting with my API project to uh
1:24:08
uh interacting with my API project to uh make an interface for
1:24:13
make an interface for
1:24:13
make an interface for uh let's say our application. So if I
1:24:17
uh let's say our application. So if I
1:24:17
uh let's say our application. So if I need to run the application
1:24:21
need to run the application
1:24:21
need to run the application uh I need to
1:24:24
uh I need to
1:24:24
uh I need to uh run multiple projects because uh I
1:24:28
uh run multiple projects because uh I
1:24:28
uh run multiple projects because uh I need to run both projects at the same
1:24:32
need to run both projects at the same
1:24:32
need to run both projects at the same time and then when I press the run
1:24:36
time and then when I press the run
1:24:36
time and then when I press the run button let
1:24:38
button let
1:24:38
button let me
1:24:39
me
1:24:39
me see where it's going to
1:24:46
Um
1:24:58
yes. Okay. Great. So you can see that I
1:25:04
yes. Okay. Great. So you can see that I
1:25:04
yes. Okay. Great. So you can see that I have two projects starting. One is for
1:25:07
have two projects starting. One is for
1:25:07
have two projects starting. One is for my uh API project which is loading on
1:25:14
my uh API project which is loading on
1:25:14
my uh API project which is loading on 5,01
1:25:15
5,01
1:25:15
5,01 [Music]
1:25:17
[Music]
1:25:17
[Music] uh it's my API project and another one
1:25:20
uh it's my API project and another one
1:25:20
uh it's my API project and another one is my client application which uh in
1:25:23
is my client application which uh in
1:25:23
is my client application which uh in this case it's an MVC application.
1:25:28
this case it's an MVC application.
1:25:28
this case it's an MVC application. So uh of course you know that
1:25:32
So uh of course you know that
1:25:32
So uh of course you know that uh there are other solutions like using
1:25:36
uh there are other solutions like using
1:25:36
uh there are other solutions like using docker compose for
1:25:40
docker compose for
1:25:40
docker compose for uh converting my application to docker
1:25:43
uh converting my application to docker
1:25:43
uh converting my application to docker image and running them uh through
1:25:47
image and running them uh through
1:25:47
image and running them uh through docker. But uh here we now we have
1:25:53
docker. But uh here we now we have
1:25:53
docker. But uh here we now we have something like the despire
1:25:56
something like the despire
1:25:56
something like the despire which it helps to uh manage run uh log
1:26:04
which it helps to uh manage run uh log
1:26:04
which it helps to uh manage run uh log monitor and many other
1:26:06
monitor and many other
1:26:06
monitor and many other features to uh make it easy our lives.
1:26:12
features to uh make it easy our lives.
1:26:13
features to uh make it easy our lives. So
1:26:14
So
1:26:14
So uh in my project I'm using API uh MVC EF
1:26:20
uh in my project I'm using API uh MVC EF
1:26:20
uh in my project I'm using API uh MVC EF core as my OM
1:26:22
core as my OM
1:26:22
core as my OM uh but uh we are going to convert this
1:26:28
uh but uh we are going to convert this
1:26:28
uh but uh we are going to convert this project to an Aspire project or let me
1:26:32
project to an Aspire project or let me
1:26:32
project to an Aspire project or let me say uh add Aspire to the current
1:26:36
say uh add Aspire to the current
1:26:36
say uh add Aspire to the current project.
1:26:39
project.
1:26:39
project. So okay
1:26:42
So okay
1:26:42
So okay uh we're going to talk about what is
1:26:44
uh we're going to talk about what is
1:26:44
uh we're going to talk about what is Aspire and how it helps to developers.
1:26:48
Aspire and how it helps to developers.
1:26:48
Aspire and how it helps to developers. We are going to add uh net aspire to an
1:26:52
We are going to add uh net aspire to an
1:26:52
We are going to add uh net aspire to an existing project using visual studio of
1:26:55
existing project using visual studio of
1:26:55
existing project using visual studio of course and uh we we will see how to use
1:27:00
course and uh we we will see how to use
1:27:00
course and uh we we will see how to use pre-built packages in net aspire of
1:27:03
pre-built packages in net aspire of
1:27:03
pre-built packages in net aspire of course uh Microsoft provides uh some
1:27:07
course uh Microsoft provides uh some
1:27:07
course uh Microsoft provides uh some packages but uh they're
1:27:09
packages but uh they're
1:27:09
packages but uh they're not complete yet I mean uh we need more
1:27:14
not complete yet I mean uh we need more
1:27:14
not complete yet I mean uh we need more packages but of course is new and uh we
1:27:18
packages but of course is new and uh we
1:27:18
packages but of course is new and uh we need to wait for other tools to
1:27:23
need to wait for other tools to
1:27:23
need to wait for other tools to integrate with
1:27:26
integrate with
1:27:26
integrate with blaspire and we will see how we can use
1:27:32
blaspire and we will see how we can use
1:27:32
blaspire and we will see how we can use uh other tools and technologies that are
1:27:35
uh other tools and technologies that are
1:27:35
uh other tools and technologies that are not integrated with Aspire using uh
1:27:40
not integrated with Aspire using uh
1:27:40
not integrated with Aspire using uh container
1:27:42
container
1:27:42
container uh for unsupported tools and then uh I
1:27:46
uh for unsupported tools and then uh I
1:27:46
uh for unsupported tools and then uh I will just mention how to use Postgress
1:27:49
will just mention how to use Postgress
1:27:49
will just mention how to use Postgress instead of SQL server. I'm I'm using SQL
1:27:51
instead of SQL server. I'm I'm using SQL
1:27:51
instead of SQL server. I'm I'm using SQL server as a database but at the end I
1:27:55
server as a database but at the end I
1:27:55
server as a database but at the end I will add the uh
1:27:59
will add the uh
1:27:59
will add the uh Postgress uh as a database to uh to see
1:28:03
Postgress uh as a database to uh to see
1:28:03
Postgress uh as a database to uh to see how it
1:28:05
how it
1:28:05
how it works. So let's
1:28:08
works. So let's
1:28:08
works. So let's see what do we have here. Let me stop
1:28:13
see what do we have here. Let me stop
1:28:13
see what do we have here. Let me stop the projects and uh let me show one more
1:28:17
the projects and uh let me show one more
1:28:17
the projects and uh let me show one more thing.
1:28:19
thing.
1:28:19
thing. uh from my MVC
1:28:23
uh from my MVC
1:28:23
uh from my MVC client. Uh of course I have my
1:28:28
client. Uh of course I have my
1:28:28
client. Uh of course I have my controller which as you can see it
1:28:32
controller which as you can see it
1:28:32
controller which as you can see it represents or returns views for listing
1:28:37
represents or returns views for listing
1:28:38
represents or returns views for listing people for showing the detail of a
1:28:40
people for showing the detail of a
1:28:40
people for showing the detail of a people
1:28:42
people
1:28:42
people creating and update delete and other
1:28:45
creating and update delete and other
1:28:45
creating and update delete and other stuffs.
1:28:47
stuffs.
1:28:47
stuffs. So and one more thing is service. I
1:28:52
So and one more thing is service. I
1:28:52
So and one more thing is service. I wrote a helper generic HTTP service to
1:28:57
wrote a helper generic HTTP service to
1:28:57
wrote a helper generic HTTP service to communicate with my API
1:29:00
communicate with my API
1:29:00
communicate with my API uh with uh HTTP calls and as you can see
1:29:05
uh with uh HTTP calls and as you can see
1:29:05
uh with uh HTTP calls and as you can see I'm using HTTP client factory. Here I
1:29:08
I'm using HTTP client factory. Here I
1:29:08
I'm using HTTP client factory. Here I have methods like post
1:29:13
have methods like post
1:29:13
have methods like post async, get async,
1:29:16
async, get async,
1:29:16
async, get async, delete, update
1:29:18
delete, update
1:29:18
delete, update and send for general
1:29:22
and send for general
1:29:22
and send for general purpose. And if you take a look at my
1:29:27
purpose. And if you take a look at my
1:29:27
purpose. And if you take a look at my program.cs,
1:29:29
program.cs,
1:29:29
program.cs, uh I'm configuring the HTTP client here.
1:29:34
uh I'm configuring the HTTP client here.
1:29:34
uh I'm configuring the HTTP client here. uh I named it API and I am setting the
1:29:39
uh I named it API and I am setting the
1:29:39
uh I named it API and I am setting the base URL. Why I'm mentioning these
1:29:42
base URL. Why I'm mentioning these
1:29:42
base URL. Why I'm mentioning these details because we're going to uh see
1:29:46
details because we're going to uh see
1:29:46
details because we're going to uh see some magic stuff or really fantastic uh
1:29:51
some magic stuff or really fantastic uh
1:29:51
some magic stuff or really fantastic uh features that Aspire uh gives us.
1:29:56
features that Aspire uh gives us.
1:29:56
features that Aspire uh gives us. As you can see, I'm setting the base URL
1:29:59
As you can see, I'm setting the base URL
1:29:59
As you can see, I'm setting the base URL from my uh app settings which is local
1:30:03
from my uh app settings which is local
1:30:03
from my uh app settings which is local host with port
1:30:07
host with port
1:30:07
host with port 50001 right so I need to define exact
1:30:12
50001 right so I need to define exact
1:30:12
50001 right so I need to define exact port exact address and if I try to
1:30:16
port exact address and if I try to
1:30:16
port exact address and if I try to change something like the port or the
1:30:19
change something like the port or the
1:30:19
change something like the port or the address I need to change everywhere that
1:30:23
address I need to change everywhere that
1:30:23
address I need to change everywhere that I am using Right. So keep in mind this
1:30:27
I am using Right. So keep in mind this
1:30:27
I am using Right. So keep in mind this one because we will get back to this and
1:30:31
one because we will get back to this and
1:30:31
one because we will get back to this and the others
1:30:32
the others
1:30:33
the others are the usual
1:30:35
are the usual
1:30:35
are the usual books. Right.
1:30:37
books. Right.
1:30:37
books. Right. So now I'm going to decide to add net
1:30:43
So now I'm going to decide to add net
1:30:43
So now I'm going to decide to add net aspire to this existing project.
1:30:47
aspire to this existing project.
1:30:47
aspire to this existing project. uh for this simply I can right click on
1:30:53
uh for this simply I can right click on
1:30:53
uh for this simply I can right click on the API project or the other one I start
1:30:56
the API project or the other one I start
1:30:56
the API project or the other one I start from API project and from the add
1:31:02
menu select
1:31:04
menu select
1:31:04
menu select the net aspire orchestrate support when
1:31:09
the net aspire orchestrate support when
1:31:09
the net aspire orchestrate support when I click on this button or on this menu
1:31:13
I click on this button or on this menu
1:31:13
I click on this button or on this menu uh a pop-up shows up which this This is
1:31:17
uh a pop-up shows up which this This is
1:31:17
uh a pop-up shows up which this This is telling that I'm going to add two more
1:31:20
telling that I'm going to add two more
1:31:20
telling that I'm going to add two more projects to your project to your
1:31:25
projects to your project to your
1:31:25
projects to your project to your solution. And let
1:31:28
solution. And let
1:31:28
solution. And let me add this
1:31:31
me add this
1:31:31
me add this in another directory. Let's call it
1:31:35
in another directory. Let's call it
1:31:35
in another directory. Let's call it [Music]
1:31:39
Aspire. And also to make
1:31:43
Aspire. And also to make
1:31:43
Aspire. And also to make it
1:31:44
it
1:31:45
it more
1:31:46
more
1:31:46
more [Music]
1:31:49
beautiful creating a solution directory
1:31:52
beautiful creating a solution directory
1:31:52
beautiful creating a solution directory or folder and put it in here. Okay. So
1:31:57
or folder and put it in here. Okay. So
1:31:57
or folder and put it in here. Okay. So as you can see this project app host
1:32:00
as you can see this project app host
1:32:00
as you can see this project app host project is bold and of course you know
1:32:05
project is bold and of course you know
1:32:05
project is bold and of course you know that when this is bold it means that my
1:32:08
that when this is bold it means that my
1:32:08
that when this is bold it means that my entry point or running project is this
1:32:11
entry point or running project is this
1:32:11
entry point or running project is this project.
1:32:15
uh after adding the uh aspire project to
1:32:21
uh after adding the uh aspire project to
1:32:21
uh after adding the uh aspire project to my project I I I I'm
1:32:25
my project I I I I'm
1:32:25
my project I I I I'm having two more projects. One is app
1:32:28
having two more projects. One is app
1:32:28
having two more projects. One is app host and another one is service default.
1:32:32
host and another one is service default.
1:32:32
host and another one is service default. App host project acts like an
1:32:36
App host project acts like an
1:32:36
App host project acts like an orchestrator. It means that if you have
1:32:40
orchestrator. It means that if you have
1:32:40
orchestrator. It means that if you have a database, if you have uh an API
1:32:44
a database, if you have uh an API
1:32:44
a database, if you have uh an API service, if you have a client, if you
1:32:47
service, if you have a client, if you
1:32:47
service, if you have a client, if you have a radius for caching, if you have
1:32:50
have a radius for caching, if you have
1:32:50
have a radius for caching, if you have any other services, this project is
1:32:55
any other services, this project is
1:32:55
any other services, this project is responsible for
1:32:58
responsible for
1:32:58
responsible for uh
1:32:59
uh
1:32:59
uh managing all other services. And if you
1:33:03
managing all other services. And if you
1:33:03
managing all other services. And if you take a look at the program.cs of appost
1:33:08
take a look at the program.cs of appost
1:33:08
take a look at the program.cs of appost project, that's truly simple. It's
1:33:11
project, that's truly simple. It's
1:33:11
project, that's truly simple. It's really simple. And you can see that uh
1:33:16
really simple. And you can see that uh
1:33:16
really simple. And you can see that uh by using add project extension method,
1:33:19
by using add project extension method,
1:33:19
by using add project extension method, I'm adding or it added
1:33:23
I'm adding or it added
1:33:23
I'm adding or it added alphabetically to the project my API
1:33:27
alphabetically to the project my API
1:33:27
alphabetically to the project my API project.
1:33:29
project.
1:33:29
project. And you might ask question how it
1:33:35
And you might ask question how it
1:33:35
And you might ask question how it uh recognize that I have a project
1:33:40
uh recognize that I have a project
1:33:40
uh recognize that I have a project called
1:33:41
called
1:33:41
called project
1:33:42
project
1:33:43
project API. It doesn't matter. It's
1:33:47
API. It doesn't matter. It's
1:33:47
API. It doesn't matter. It's uhnet behind the scenes. It
1:33:53
uh recognize your applications, your
1:33:58
uh recognize your applications, your
1:33:58
uh recognize your applications, your projects that uh the app host is
1:34:02
projects that uh the app host is
1:34:02
projects that uh the app host is referencing to them. And currently, as
1:34:06
referencing to them. And currently, as
1:34:06
referencing to them. And currently, as you can see, I'm just referencing to the
1:34:10
you can see, I'm just referencing to the
1:34:10
you can see, I'm just referencing to the API project. And if
1:34:13
API project. And if
1:34:13
API project. And if I add more
1:34:16
I add more
1:34:16
I add more reference like adding reference to the
1:34:19
reference like adding reference to the
1:34:19
reference like adding reference to the MVC client
1:34:22
MVC client
1:34:22
MVC client uh it will recognize it here and let's
1:34:27
uh it will recognize it here and let's
1:34:27
uh it will recognize it here and let's see just
1:34:32
for check that currently it's not
1:34:37
for check that currently it's not
1:34:37
for check that currently it's not recognizing my MVC client as you can See
1:34:42
recognizing my MVC client as you can See
1:34:42
recognizing my MVC client as you can See the here I just have project API the
1:34:47
the here I just have project API the
1:34:47
the here I just have project API the project that I uh reference to that one.
1:34:52
project that I uh reference to that one.
1:34:52
project that I uh reference to that one. Okay. So let's just comment this one and
1:34:57
Okay. So let's just comment this one and
1:34:58
Okay. So let's just comment this one and reference
1:34:59
reference
1:34:59
reference to MVC client. Uh there are multiple
1:35:03
to MVC client. Uh there are multiple
1:35:03
to MVC client. Uh there are multiple ways. uh one is right clicking on the
1:35:07
ways. uh one is right clicking on the
1:35:07
ways. uh one is right clicking on the MVC project and do the same process like
1:35:13
MVC project and do the same process like
1:35:13
MVC project and do the same process like this add Aspire orchestrator support.
1:35:17
this add Aspire orchestrator support.
1:35:17
this add Aspire orchestrator support. Another one is drag and drop to the uh
1:35:21
Another one is drag and drop to the uh
1:35:21
Another one is drag and drop to the uh to to the app host project and another
1:35:25
to to the app host project and another
1:35:25
to to the app host project and another one is simply writing
1:35:29
one is simply writing
1:35:29
one is simply writing uh the reference here. uh it doesn't
1:35:33
uh the reference here. uh it doesn't
1:35:33
uh the reference here. uh it doesn't matter which way you are doing but I'm
1:35:36
matter which way you are doing but I'm
1:35:36
matter which way you are doing but I'm using
1:35:38
using
1:35:38
using uh the menu that
1:35:41
uh the menu that
1:35:41
uh the menu that uh visual studio provides and as you can
1:35:45
uh visual studio provides and as you can
1:35:45
uh visual studio provides and as you can see it's added to my app host project.
1:35:51
see it's added to my app host project.
1:35:51
see it's added to my app host project. So let's get back to the program.cs
1:35:55
So let's get back to the program.cs
1:35:55
So let's get back to the program.cs project and
1:35:56
project and
1:35:56
project and uncomment
1:35:59
this and Here you go. You can see that
1:36:04
this and Here you go. You can see that
1:36:04
this and Here you go. You can see that MVPC client is added to projects list.
1:36:10
MVPC client is added to projects list.
1:36:10
MVPC client is added to projects list. Right?
1:36:19
So this is the definition of the
1:36:22
So this is the definition of the
1:36:22
So this is the definition of the projects that
1:36:24
projects that
1:36:24
projects that uh we see here.
1:36:27
uh we see here.
1:36:27
uh we see here. And you can see that the
1:36:33
uh yeah project
1:36:36
uh yeah project
1:36:36
uh yeah project pass it's changed. Okay, no problem. So
1:36:41
pass it's changed. Okay, no problem. So
1:36:41
pass it's changed. Okay, no problem. So and let me call this one
1:36:47
client and for simplicity let me remove
1:36:52
client and for simplicity let me remove
1:36:52
client and for simplicity let me remove the project from the beginning of that.
1:36:56
the project from the beginning of that.
1:36:56
the project from the beginning of that. Okay. So I have two projects. One API
1:37:00
Okay. So I have two projects. One API
1:37:00
Okay. So I have two projects. One API and another one is the client
1:37:03
and another one is the client
1:37:03
and another one is the client application. Okay. So
1:37:07
application. Okay. So
1:37:07
application. Okay. So uh I can do some more things. For
1:37:13
uh I can do some more things. For
1:37:13
uh I can do some more things. For example, for example,
1:37:15
example, for example,
1:37:15
example, for example, uh I want to not start the client
1:37:22
uh I want to not start the client
1:37:22
uh I want to not start the client application before starting a API.
1:37:27
application before starting a API.
1:37:27
application before starting a API. Right? For example, uh I need to wait I
1:37:31
Right? For example, uh I need to wait I
1:37:31
Right? For example, uh I need to wait I need to wait to run the API project.
1:37:36
need to wait to run the API project.
1:37:36
need to wait to run the API project. Simply I can use wait for and here I
1:37:42
Simply I can use wait for and here I
1:37:42
Simply I can use wait for and here I can give a name like API to this one and
1:37:47
can give a name like API to this one and
1:37:47
can give a name like API to this one and let's call
1:37:49
let's call
1:37:49
let's call this
1:37:54
client by providing or using this
1:37:57
client by providing or using this
1:37:57
client by providing or using this extension method I'm telling to my
1:38:01
extension method I'm telling to my
1:38:01
extension method I'm telling to my application or the data pier that hey
1:38:05
application or the data pier that hey
1:38:05
application or the data pier that hey wait and do not run the client
1:38:08
wait and do not run the client
1:38:08
wait and do not run the client application until the API application is
1:38:13
application until the API application is
1:38:13
application until the API application is run. And also I can do a
1:38:21
reference to my uh web API project. And
1:38:27
reference to my uh web API project. And
1:38:27
reference to my uh web API project. And if I need to use another things like the
1:38:31
if I need to use another things like the
1:38:31
if I need to use another things like the databases, the containers or anything
1:38:34
databases, the containers or anything
1:38:34
databases, the containers or anything else simply I can use builder
1:38:38
else simply I can use builder
1:38:38
else simply I can use builder dot add for example
1:38:41
dot add for example
1:38:41
dot add for example container which we will see
1:38:46
container which we will see
1:38:46
container which we will see uh next minutes how to use uh
1:38:50
uh next minutes how to use uh
1:38:50
uh next minutes how to use uh unsupported tools like or for example
1:38:55
unsupported tools like or for example
1:38:55
unsupported tools like or for example your client application is not a net
1:38:58
your client application is not a net
1:38:58
your client application is not a net application like Blazer or MVC. It's a
1:39:01
application like Blazer or MVC. It's a
1:39:01
application like Blazer or MVC. It's a react application. So what what should I
1:39:04
react application. So what what should I
1:39:04
react application. So what what should I do at that case? In that case, you can
1:39:08
do at that case? In that case, you can
1:39:08
do at that case? In that case, you can turn your
1:39:10
turn your
1:39:10
turn your uh react application to a docker image
1:39:14
uh react application to a docker image
1:39:14
uh react application to a docker image and simply use add container to run that
1:39:18
and simply use add container to run that
1:39:18
and simply use add container to run that one.
1:39:21
So
1:39:23
So
1:39:23
So uh the net aspire is a new feature from
1:39:27
uh the net aspire is a new feature from
1:39:27
uh the net aspire is a new feature from Microsoft designed to simplify building
1:39:31
Microsoft designed to simplify building
1:39:31
Microsoft designed to simplify building cloud native distributed applications.
1:39:35
cloud native distributed applications.
1:39:35
cloud native distributed applications. So it's going to uh make us uh make the
1:39:41
So it's going to uh make us uh make the
1:39:41
So it's going to uh make us uh make the working with cloud
1:39:45
working with cloud
1:39:45
working with cloud um easy. Right? So uh and and and
1:39:51
um easy. Right? So uh and and and
1:39:51
um easy. Right? So uh and and and the good part or important part is that
1:39:56
the good part or important part is that
1:39:56
the good part or important part is that it sits top of the net. This is the net
1:40:01
it sits top of the net. This is the net
1:40:01
it sits top of the net. This is the net and the net aspire is going to uh sit on
1:40:05
and the net aspire is going to uh sit on
1:40:05
and the net aspire is going to uh sit on top of the net because it's going to
1:40:08
top of the net because it's going to
1:40:08
top of the net because it's going to wrap up all my application my old
1:40:12
wrap up all my application my old
1:40:12
wrap up all my application my old application and
1:40:14
application and
1:40:14
application and uh and then I can use everything that I
1:40:19
uh and then I can use everything that I
1:40:19
uh and then I can use everything that I was using uh I was using like the
1:40:23
was using uh I was using like the
1:40:23
was using uh I was using like the database the API service the Postgress
1:40:27
database the API service the Postgress
1:40:27
database the API service the Postgress uh caching mechanism
1:40:29
uh caching mechanism
1:40:30
uh caching mechanism or messaging system or anything that I
1:40:33
or messaging system or anything that I
1:40:33
or messaging system or anything that I was using.
1:40:38
uh and also as I mentioned uh at the
1:40:42
uh and also as I mentioned uh at the
1:40:42
uh and also as I mentioned uh at the beginning it provides some uh packages
1:40:46
beginning it provides some uh packages
1:40:46
beginning it provides some uh packages some uh built-in packages like uh
1:40:51
some uh built-in packages like uh
1:40:51
some uh built-in packages like uh postress like radies like EF core but
1:40:55
postress like radies like EF core but
1:40:56
postress like radies like EF core but still it needs to be
1:41:00
still it needs to be
1:41:00
still it needs to be uh create more packages because still we
1:41:04
uh create more packages because still we
1:41:04
uh create more packages because still we have uh some tools and technologies that
1:41:08
have uh some tools and technologies that
1:41:08
have uh some tools and technologies that are not supported by uh net aspire and
1:41:12
are not supported by uh net aspire and
1:41:12
are not supported by uh net aspire and we need to run them these
1:41:16
we need to run them these
1:41:16
we need to run them these containers. Okay. uh the as the net
1:41:20
containers. Okay. uh the as the net
1:41:20
containers. Okay. uh the as the net aspire pillars are uh I mean the
1:41:24
aspire pillars are uh I mean the
1:41:24
aspire pillars are uh I mean the important parts of a net aspire project
1:41:28
important parts of a net aspire project
1:41:28
important parts of a net aspire project is uh the
1:41:30
is uh the
1:41:30
is uh the orchestration uh net aspire it manage
1:41:33
orchestration uh net aspire it manage
1:41:33
orchestration uh net aspire it manage multiple services containers and
1:41:36
multiple services containers and
1:41:36
multiple services containers and resources in the development uh
1:41:41
resources in the development uh
1:41:41
resources in the development uh environment and not just development
1:41:44
environment and not just development
1:41:44
environment and not just development environment it's uh
1:41:48
environment it's uh
1:41:48
environment it's uh uh personally in our company we are
1:41:51
uh personally in our company we are
1:41:51
uh personally in our company we are using net aspire in our production
1:41:56
using net aspire in our production
1:41:56
using net aspire in our production too. Another one is service
1:41:59
too. Another one is service
1:41:59
too. Another one is service integrations. It offers pre-builtin
1:42:01
integrations. It offers pre-builtin
1:42:02
integrations. It offers pre-builtin packages for connecting to database to
1:42:06
packages for connecting to database to
1:42:06
packages for connecting to database to using cache system and cloud services.
1:42:10
using cache system and cloud services.
1:42:10
using cache system and cloud services. For example, if you are using Azure
1:42:12
For example, if you are using Azure
1:42:12
For example, if you are using Azure monitor, you can simply by writing two
1:42:16
monitor, you can simply by writing two
1:42:16
monitor, you can simply by writing two or three lines of code uh you can
1:42:20
or three lines of code uh you can
1:42:20
or three lines of code uh you can connect to
1:42:21
connect to
1:42:21
connect to Azure monitor service to monitoring your
1:42:25
Azure monitor service to monitoring your
1:42:25
Azure monitor service to monitoring your uh old services. Another one is
1:42:30
uh old services. Another one is
1:42:30
uh old services. Another one is observability. Uh the dotaspire built-in
1:42:35
observability. Uh the dotaspire built-in
1:42:35
observability. Uh the dotaspire built-in supports for logging, tracing and
1:42:39
supports for logging, tracing and
1:42:39
supports for logging, tracing and metrics to monitor your apps uh
1:42:42
metrics to monitor your apps uh
1:42:42
metrics to monitor your apps uh health by providing your uh health check
1:42:48
health by providing your uh health check
1:42:48
health by providing your uh health check URL and uh providing the logging system
1:42:53
URL and uh providing the logging system
1:42:53
URL and uh providing the logging system and monitoring system and also it has
1:42:56
and monitoring system and also it has
1:42:56
and monitoring system and also it has some metrics.
1:42:59
some metrics.
1:42:59
some metrics. So
1:43:04
uh
1:43:06
uh
1:43:06
uh imagine we're working on a project with
1:43:08
imagine we're working on a project with
1:43:08
imagine we're working on a project with an API, a front end and a database.
1:43:13
an API, a front end and a database.
1:43:13
an API, a front end and a database. Normally we spend time configuring each
1:43:17
Normally we spend time configuring each
1:43:17
Normally we spend time configuring each pieces like connection strings, ports,
1:43:21
pieces like connection strings, ports,
1:43:21
pieces like connection strings, ports, else checks and other stuffs.
1:43:24
else checks and other stuffs.
1:43:24
else checks and other stuffs. that
1:43:25
that
1:43:25
that Aspire automates this.
1:43:29
Aspire automates this.
1:43:29
Aspire automates this. Remember
1:43:30
Remember
1:43:30
Remember I showed that I'm using this URL, right?
1:43:37
I showed that I'm using this URL, right?
1:43:37
I showed that I'm using this URL, right? I showed that I am
1:43:42
I showed that I am
1:43:42
I showed that I am using this connection string,
1:43:46
using this connection string,
1:43:46
using this connection string, right? But by using spire all of these
1:43:50
right? But by using spire all of these
1:43:50
right? But by using spire all of these are going to be automated. I mean I'm
1:43:54
are going to be automated. I mean I'm
1:43:54
are going to be automated. I mean I'm going to configure to be configured
1:43:58
going to configure to be configured
1:43:58
going to configure to be configured automated. So this is really nice. It's
1:44:02
automated. So this is really nice. It's
1:44:02
automated. So this is really nice. It's like having a development time system
1:44:05
like having a development time system
1:44:05
like having a development time system that sets up your
1:44:07
that sets up your
1:44:07
that sets up your environment and enforces best practices
1:44:11
environment and enforces best practices
1:44:11
environment and enforces best practices because I'm not going to write code. It
1:44:14
because I'm not going to write code. It
1:44:14
because I'm not going to write code. It is implementing all uh codes,
1:44:18
is implementing all uh codes,
1:44:18
is implementing all uh codes, configurations and other stuffs by
1:44:21
configurations and other stuffs by
1:44:21
configurations and other stuffs by itself. And of course it's using the
1:44:23
itself. And of course it's using the
1:44:23
itself. And of course it's using the best practice and let's uh it it led me
1:44:28
best practice and let's uh it it led me
1:44:28
best practice and let's uh it it led me to focus on coding not not
1:44:33
to focus on coding not not
1:44:33
to focus on coding not not configuring radius not configuring
1:44:36
configuring radius not configuring
1:44:36
configuring radius not configuring rabbit and cube configuring the
1:44:38
rabbit and cube configuring the
1:44:38
rabbit and cube configuring the postgress and other uh tools that I'm
1:44:43
postgress and other uh tools that I'm
1:44:43
postgress and other uh tools that I'm using for our API and MVC project that
1:44:47
using for our API and MVC project that
1:44:47
using for our API and MVC project that you can see it can simply uh simplify my
1:44:51
you can see it can simply uh simplify my
1:44:51
you can see it can simply uh simplify my service discovery. It means that uh if
1:44:55
service discovery. It means that uh if
1:44:56
service discovery. It means that uh if you pay attention I didn't do anything I
1:44:58
you pay attention I didn't do anything I
1:44:58
you pay attention I didn't do anything I just added my project or reference my
1:45:03
just added my project or reference my
1:45:03
just added my project or reference my project to app that's enough and this is
1:45:08
project to app that's enough and this is
1:45:08
project to app that's enough and this is acting like a service discovery I don't
1:45:12
acting like a service discovery I don't
1:45:12
acting like a service discovery I don't need to use any other package or other
1:45:15
need to use any other package or other
1:45:15
need to use any other package or other tools as a service discovery by writing
1:45:19
tools as a service discovery by writing
1:45:19
tools as a service discovery by writing these lines of code it's
1:45:22
these lines of code it's
1:45:22
these lines of code it's on. It's
1:45:25
on. It's
1:45:25
on. It's on. And of course, it's uh it enhance
1:45:32
on. And of course, it's uh it enhance
1:45:32
on. And of course, it's uh it enhance debugging and prepare us for cloud
1:45:35
debugging and prepare us for cloud
1:45:35
debugging and prepare us for cloud deployment.
1:45:37
deployment.
1:45:37
deployment. uh because
1:45:39
uh because
1:45:39
uh because uh if you remember I when I ran the
1:45:45
uh if you remember I when I ran the
1:45:45
uh if you remember I when I ran the project
1:45:46
project
1:45:46
project uh I had two
1:45:48
uh I had two
1:45:48
uh I had two terminals which I could see the logs of
1:45:52
terminals which I could see the logs of
1:45:52
terminals which I could see the logs of my both applications separated in two
1:45:56
my both applications separated in two
1:45:56
my both applications separated in two terminals right but uh and and imagine
1:46:00
terminals right but uh and and imagine
1:46:00
terminals right but uh and and imagine if you have for example 10 API services
1:46:04
if you have for example 10 API services
1:46:04
if you have for example 10 API services and two other services, one database,
1:46:09
and two other services, one database,
1:46:09
and two other services, one database, another one for uh radius, another one
1:46:13
another one for uh radius, another one
1:46:13
another one for uh radius, another one for postgress and other stuffs, right?
1:46:17
for postgress and other stuffs, right?
1:46:17
for postgress and other stuffs, right? So, how many terminals or logging
1:46:22
So, how many terminals or logging
1:46:22
So, how many terminals or logging uh output you should check for checking
1:46:26
uh output you should check for checking
1:46:26
uh output you should check for checking the logs.
1:46:28
the logs.
1:46:28
the logs. But inn net aspire I'm going to have uh
1:46:33
But inn net aspire I'm going to have uh
1:46:33
But inn net aspire I'm going to have uh very simple uh or one place to see the
1:46:38
very simple uh or one place to see the
1:46:38
very simple uh or one place to see the logs of all
1:46:41
logs of all
1:46:41
logs of all uh services. So
1:46:50
uh yeah that's it. Uh okay so uh I
1:46:55
uh yeah that's it. Uh okay so uh I
1:46:55
uh yeah that's it. Uh okay so uh I talked about the app host and uh let's
1:46:59
talked about the app host and uh let's
1:46:59
talked about the app host and uh let's see what is service default. service
1:47:01
see what is service default. service
1:47:01
see what is service default. service fault is shared
1:47:03
fault is shared
1:47:03
fault is shared configurations for logging
1:47:06
configurations for logging
1:47:06
configurations for logging um and telery and uh the other stuffs
1:47:10
um and telery and uh the other stuffs
1:47:10
um and telery and uh the other stuffs that uh is shared between all
1:47:13
that uh is shared between all
1:47:13
that uh is shared between all applications as you can see I have a uh
1:47:17
applications as you can see I have a uh
1:47:17
applications as you can see I have a uh add service defaults here which is uh
1:47:20
add service defaults here which is uh
1:47:20
add service defaults here which is uh configuring my services like the service
1:47:23
configuring my services like the service
1:47:23
configuring my services like the service discovery like the uh health check like
1:47:28
discovery like the uh health check like
1:47:28
discovery like the uh health check like the open telementry and the others Okay.
1:47:30
the open telementry and the others Okay.
1:47:30
the open telementry and the others Okay. So, and uh because I'm out of time, I'm
1:47:35
So, and uh because I'm out of time, I'm
1:47:35
So, and uh because I'm out of time, I'm going to make it
1:47:37
going to make it
1:47:37
going to make it faster. So, uh yes, this is for health
1:47:42
faster. So, uh yes, this is for health
1:47:42
faster. So, uh yes, this is for health check and this one is for live and
1:47:46
check and this one is for live and
1:47:46
check and this one is for live and health URL. And for monitoring, if
1:47:50
health URL. And for monitoring, if
1:47:50
health URL. And for monitoring, if you're using
1:47:52
you're using
1:47:52
you're using uh Azure monitor, you can simply use
1:47:55
uh Azure monitor, you can simply use
1:47:55
uh Azure monitor, you can simply use this one.
1:47:59
And okay great. So
1:48:03
And okay great. So
1:48:03
And okay great. So uh just let
1:48:05
uh just let
1:48:05
uh just let me add one or two more things and I will
1:48:11
me add one or two more things and I will
1:48:11
me add one or two more things and I will uh uh finish my presentation. Okay.
1:48:17
uh uh finish my presentation. Okay.
1:48:17
uh uh finish my presentation. Okay. uh if you are using uh you know we are
1:48:22
uh if you are using uh you know we are
1:48:22
uh if you are using uh you know we are not using uhn net all the time we might
1:48:27
not using uhn net all the time we might
1:48:27
not using uhn net all the time we might use other services like radius like
1:48:31
use other services like radius like
1:48:31
use other services like radius like react like postgress like other services
1:48:35
react like postgress like other services
1:48:35
react like postgress like other services that are not uh the the netbased
1:48:40
that are not uh the the netbased
1:48:40
that are not uh the the netbased uh tools so what should I do uh for
1:48:45
uh tools so what should I do uh for
1:48:45
uh tools so what should I do uh for those situations
1:48:48
those situations
1:48:48
those situations uh we can use uh as I mentioned the the
1:48:53
uh we can use uh as I mentioned the the
1:48:53
uh we can use uh as I mentioned the the the dot add
1:48:57
the dot add
1:48:57
the dot add container and uh use the container right
1:49:01
container and uh use the container right
1:49:01
container and uh use the container right so
1:49:03
so
1:49:03
so uh or if I'm going to use the radius
1:49:07
uh or if I'm going to use the radius
1:49:07
uh or if I'm going to use the radius which is supported currently supported
1:49:10
which is supported currently supported
1:49:10
which is supported currently supported by
1:49:11
by
1:49:11
by uh Microsoft I can simply just add
1:49:20
uh Aspire
1:49:23
uh Aspire
1:49:23
uh Aspire package. It's nothing but just uh it's
1:49:27
package. It's nothing but just uh it's
1:49:27
package. It's nothing but just uh it's filtering uh the Aspire uh packages
1:49:31
filtering uh the Aspire uh packages
1:49:31
filtering uh the Aspire uh packages which you can see that I have the
1:49:34
which you can see that I have the
1:49:34
which you can see that I have the radies, I have the Postgress and the
1:49:38
radies, I have the Postgress and the
1:49:38
radies, I have the Postgress and the other stuffs. If you want to use this,
1:49:41
other stuffs. If you want to use this,
1:49:41
other stuffs. If you want to use this, it's really simple. You can just you
1:49:43
it's really simple. You can just you
1:49:43
it's really simple. You can just you need just add the
1:49:47
need just add the
1:49:47
need just add the postgress. Let me change the version
1:49:49
postgress. Let me change the version
1:49:49
postgress. Let me change the version because I'm using the version
1:49:55
9. And here we go. Builder add
1:50:00
9. And here we go. Builder add
1:50:00
9. And here we go. Builder add postgress. See that's
1:50:04
postgress. See that's
1:50:04
postgress. See that's simple. And also I can add the
1:50:08
simple. And also I can add the
1:50:08
simple. And also I can add the database for example
1:50:11
database for example
1:50:11
database for example people and of course because I'm using
1:50:14
people and of course because I'm using
1:50:14
people and of course because I'm using SQL server I need to change some
1:50:17
SQL server I need to change some
1:50:17
SQL server I need to change some configurations in my API project instead
1:50:21
configurations in my API project instead
1:50:21
configurations in my API project instead of using SQL server I need to use
1:50:24
of using SQL server I need to use
1:50:24
of using SQL server I need to use Postgress but I'm not going to uh go
1:50:27
Postgress but I'm not going to uh go
1:50:27
Postgress but I'm not going to uh go through into this because I'm
1:50:30
through into this because I'm
1:50:30
through into this because I'm pro time
1:50:35
And yeah, I think that's it. Oh, okay.
1:50:39
And yeah, I think that's it. Oh, okay.
1:50:40
And yeah, I think that's it. Oh, okay. So, for the last part, let's run the
1:50:44
So, for the last part, let's run the
1:50:44
So, for the last part, let's run the application to see what
1:50:46
application to see what
1:50:46
application to see what happens when we
1:50:51
use net Aspire or we add Aspire to the
1:50:57
use net Aspire or we add Aspire to the
1:50:57
use net Aspire or we add Aspire to the project.
1:51:14
previous. Okay, finally.
1:51:30
Great. So this is the dashboard of the
1:51:34
Great. So this is the dashboard of the
1:51:34
Great. So this is the dashboard of the net aspire. It doesn't matter how many
1:51:37
net aspire. It doesn't matter how many
1:51:37
net aspire. It doesn't matter how many services you have. Uh you have uh 10 API
1:51:42
services you have. Uh you have uh 10 API
1:51:42
services you have. Uh you have uh 10 API services. You have two databases or
1:51:45
services. You have two databases or
1:51:45
services. You have two databases or more. You have three clients. One in
1:51:51
more. You have three clients. One in
1:51:51
more. You have three clients. One in React, one is Blazer, one is MVC. It
1:51:56
React, one is Blazer, one is MVC. It
1:51:56
React, one is Blazer, one is MVC. It doesn't matter. All of them are here. We
1:51:58
doesn't matter. All of them are here. We
1:51:58
doesn't matter. All of them are here. We list here and there is a console tab
1:52:02
list here and there is a console tab
1:52:02
list here and there is a console tab here which you can see the lots of your
1:52:07
here which you can see the lots of your
1:52:07
here which you can see the lots of your uh services here and the other ones like
1:52:12
uh services here and the other ones like
1:52:12
uh services here and the other ones like the
1:52:14
the
1:52:14
the structure the
1:52:17
structure the
1:52:17
structure the uh traces the metrics and I'm not going
1:52:21
uh traces the metrics and I'm not going
1:52:21
uh traces the metrics and I'm not going through these um you can uh do a
1:52:26
through these um you can uh do a
1:52:26
through these um you can uh do a research about And but just for make
1:52:29
research about And but just for make
1:52:29
research about And but just for make sure everything works fine, which is not
1:52:32
sure everything works fine, which is not
1:52:32
sure everything works fine, which is not going to work fine because I didn't
1:52:34
going to work fine because I didn't
1:52:34
going to work fine because I didn't change the
1:52:36
change the
1:52:36
change the address. Oh, it's working. But uh it's
1:52:40
address. Oh, it's working. But uh it's
1:52:40
address. Oh, it's working. But uh it's because uh it works with both of them.
1:52:44
because uh it works with both of them.
1:52:44
because uh it works with both of them. Uh as I
1:52:48
mentioned in here, I don't need to
1:52:52
mentioned in here, I don't need to
1:52:52
mentioned in here, I don't need to specify the port and the address.
1:52:56
specify the port and the address.
1:52:56
specify the port and the address. Uh, I just need to use the name of my
1:53:02
Uh, I just need to use the name of my
1:53:02
Uh, I just need to use the name of my service. That's enough. That's enough.
1:53:05
service. That's enough. That's enough.
1:53:05
service. That's enough. That's enough. And it will uh find out that uh what is
1:53:10
And it will uh find out that uh what is
1:53:10
And it will uh find out that uh what is my service? This is the service
1:53:12
my service? This is the service
1:53:12
my service? This is the service discovery. This is the great feature
1:53:15
discovery. This is the great feature
1:53:15
discovery. This is the great feature that
1:53:19
uh net Aspire provides. And I'm going to
1:53:22
uh net Aspire provides. And I'm going to
1:53:22
uh net Aspire provides. And I'm going to rerun the project to make sure
1:53:25
rerun the project to make sure
1:53:25
rerun the project to make sure everything works
1:53:26
everything works
1:53:26
everything works [Music]
1:53:36
fine. I just hate to bug you,
1:53:39
fine. I just hate to bug you,
1:53:39
fine. I just hate to bug you, Kaman, because we're running out of I
1:53:41
Kaman, because we're running out of I
1:53:41
Kaman, because we're running out of I know we start a little late, but I just
1:53:43
know we start a little late, but I just
1:53:43
know we start a little late, but I just hate to bug you. I know you hate me
1:53:45
hate to bug you. I know you hate me
1:53:45
hate to bug you. I know you hate me already.
1:53:47
already.
1:53:47
already. Yeah, of course.
1:53:49
Yeah, of course.
1:53:49
Yeah, of course. Yeah. Yeah. Done. Perfect. Right. So I
1:53:51
Yeah. Yeah. Done. Perfect. Right. So I
1:53:51
Yeah. Yeah. Done. Perfect. Right. So I think that that was very nice. I know I
1:53:53
think that that was very nice. I know I
1:53:53
think that that was very nice. I know I know we're running out of time. I think
1:53:54
know we're running out of time. I think
1:53:54
know we're running out of time. I think we're only four minutes into the next
1:53:56
we're only four minutes into the next
1:53:56
we're only four minutes into the next session but and there quite a few
1:53:57
session but and there quite a few
1:53:57
session but and there quite a few questions in the chats. I think there
1:53:59
questions in the chats. I think there
1:53:59
questions in the chats. I think there quite a few questions. So let's just
1:54:00
quite a few questions. So let's just
1:54:00
quite a few questions. So let's just take maybe one at least, right? So that
1:54:02
take maybe one at least, right? So that
1:54:02
take maybe one at least, right? So that people people don't yell at both of us.
1:54:04
people people don't yell at both of us.
1:54:04
people people don't yell at both of us. It's coming from Oleg. He's saying can
1:54:07
It's coming from Oleg. He's saying can
1:54:07
It's coming from Oleg. He's saying can Aspire replace an existing uh net apps
1:54:10
Aspire replace an existing uh net apps
1:54:10
Aspire replace an existing uh net apps plus Kubernetes plus Docker ecosystem?
1:54:12
plus Kubernetes plus Docker ecosystem?
1:54:12
plus Kubernetes plus Docker ecosystem? That that's a pretty strong ecosystem to
1:54:14
That that's a pretty strong ecosystem to
1:54:14
That that's a pretty strong ecosystem to have. But can Aspire do it?
1:54:17
have. But can Aspire do it?
1:54:18
have. But can Aspire do it? uh in my opinion yes of course it can
1:54:23
uh in my opinion yes of course it can
1:54:23
uh in my opinion yes of course it can not today you know not today because as
1:54:27
not today you know not today because as
1:54:27
not today you know not today because as I mentioned in my presentation
1:54:30
I mentioned in my presentation
1:54:30
I mentioned in my presentation uh it's really
1:54:33
uh it's really
1:54:33
uh it's really uh young feature let's say young feature
1:54:37
uh young feature let's say young feature
1:54:37
uh young feature let's say young feature because you know the kubernetes the
1:54:38
because you know the kubernetes the
1:54:38
because you know the kubernetes the docker they're working many years of
1:54:43
docker they're working many years of
1:54:43
docker they're working many years of course and as uh I showed up in the
1:54:48
course and as uh I showed up in the
1:54:48
course and as uh I showed up in the aspire uh nougat packages. We had maybe
1:54:52
aspire uh nougat packages. We had maybe
1:54:52
aspire uh nougat packages. We had maybe 20 packages. Yeah. Yet, but in the
1:54:56
20 packages. Yeah. Yet, but in the
1:54:56
20 packages. Yeah. Yet, but in the future it will uh grow up and of course
1:55:00
future it will uh grow up and of course
1:55:00
future it will uh grow up and of course it can uh take the place of Kubernetes
1:55:05
it can uh take the place of Kubernetes
1:55:05
it can uh take the place of Kubernetes and Docker.
1:55:07
and Docker.
1:55:07
and Docker. Perfect. Thanks for that answer. I know
1:55:09
Perfect. Thanks for that answer. I know
1:55:09
Perfect. Thanks for that answer. I know a strong belief that Aspire can take it.
1:55:11
a strong belief that Aspire can take it.
1:55:11
a strong belief that Aspire can take it. Yeah. But not now but but maybe in in
1:55:13
Yeah. But not now but but maybe in in
1:55:13
Yeah. But not now but but maybe in in the the upcoming future. Thank you so
1:55:15
the the upcoming future. Thank you so
1:55:15
the the upcoming future. Thank you so much Cam. I know it's getting evening at
1:55:17
much Cam. I know it's getting evening at
1:55:17
much Cam. I know it's getting evening at your place, right? Uh thank you so much
1:55:19
your place, right? Uh thank you so much
1:55:19
your place, right? Uh thank you so much for for sharing your pearls of wisdom
1:55:21
for for sharing your pearls of wisdom
1:55:21
for for sharing your pearls of wisdom with this community. Thanks for
1:55:23
with this community. Thanks for
1:55:23
with this community. Thanks for everything that you do for the community
1:55:24
everything that you do for the community
1:55:24
everything that you do for the community and you know I can't wait to host you
1:55:26
and you know I can't wait to host you
1:55:26
and you know I can't wait to host you back once again and yeah thank you and
1:55:28
back once again and yeah thank you and
1:55:28
back once again and yeah thank you and have a nice evening.
1:55:30
have a nice evening.
1:55:30
have a nice evening. Thank you. Thank you so much for letting
1:55:33
Thank you. Thank you so much for letting
1:55:33
Thank you. Thank you so much for letting me to be a speaker
1:55:36
me to be a speaker
1:55:36
me to be a speaker this. Thank you. Thank you so much.
1:55:38
this. Thank you. Thank you so much.
1:55:38
this. Thank you. Thank you so much. Yeah. Thank you so much
1:55:40
Yeah. Thank you so much
1:55:40
Yeah. Thank you so much Cameron. Okay ladies and gentlemen, we
1:55:42
Cameron. Okay ladies and gentlemen, we
1:55:42
Cameron. Okay ladies and gentlemen, we now need to get right. We got to sprint
1:55:44
now need to get right. We got to sprint
1:55:44
now need to get right. We got to sprint to the next session because our next
1:55:45
to the next session because our next
1:55:45
to the next session because our next speaker is waiting behind the scene very
1:55:47
speaker is waiting behind the scene very
1:55:47
speaker is waiting behind the scene very very patiently. She is um Punima Na.
1:55:51
very patiently. She is um Punima Na.
1:55:51
very patiently. She is um Punima Na. I've been following her for so many
1:55:52
I've been following her for so many
1:55:52
I've been following her for so many years. You know wonder why am I hosting
1:55:54
years. You know wonder why am I hosting
1:55:54
years. You know wonder why am I hosting after all this time. She's super active
1:55:57
after all this time. She's super active
1:55:57
after all this time. She's super active in the community. She's a Microsoft MVP.
1:55:58
in the community. She's a Microsoft MVP.
1:55:58
in the community. She's a Microsoft MVP. She's a Numba MVP net developer net
1:56:01
She's a Numba MVP net developer net
1:56:01
She's a Numba MVP net developer net foundation outreach team committee
1:56:03
foundation outreach team committee
1:56:03
foundation outreach team committee member and today in the net conference
1:56:05
member and today in the net conference
1:56:05
member and today in the net conference she's going to talk about uh
1:56:06
she's going to talk about uh
1:56:06
she's going to talk about uh transforming synchronous web apps with
1:56:08
transforming synchronous web apps with
1:56:08
transforming synchronous web apps with asynchronous messaging. So without any
1:56:11
asynchronous messaging. So without any
1:56:11
asynchronous messaging. So without any further ado, let's bring Punima in. Hi
1:56:13
further ado, let's bring Punima in. Hi
1:56:13
further ado, let's bring Punima in. Hi Punima, how are you doing today? Hey
1:56:16
Punima, how are you doing today? Hey
1:56:16
Punima, how are you doing today? Hey friend, great to meet you. Yes, we have
1:56:19
friend, great to meet you. Yes, we have
1:56:19
friend, great to meet you. Yes, we have been following each other for a while I
1:56:20
been following each other for a while I
1:56:20
been following each other for a while I guess but uh you know uh some things has
1:56:24
guess but uh you know uh some things has
1:56:24
guess but uh you know uh some things has to wait. So it's my pleasure and
1:56:26
to wait. So it's my pleasure and
1:56:26
to wait. So it's my pleasure and privilege to be here and thank you CV
1:56:28
privilege to be here and thank you CV
1:56:28
privilege to be here and thank you CV and net conference for having me on this
1:56:32
and net conference for having me on this
1:56:32
and net conference for having me on this conference. It's it's great to be a part
1:56:34
conference. It's it's great to be a part
1:56:34
conference. It's it's great to be a part of such a privileged speaker lineup.
1:56:36
of such a privileged speaker lineup.
1:56:36
of such a privileged speaker lineup. Wow. Thank you. Thank you so much. I
1:56:38
Wow. Thank you. Thank you so much. I
1:56:38
Wow. Thank you. Thank you so much. I love your energy already. You know, I
1:56:40
love your energy already. You know, I
1:56:40
love your energy already. You know, I know you're the moment I saw the Embraco
1:56:43
know you're the moment I saw the Embraco
1:56:44
know you're the moment I saw the Embraco MVP, I was like, whoa, I know Hank,
1:56:45
MVP, I was like, whoa, I know Hank,
1:56:45
MVP, I was like, whoa, I know Hank, right? So, me and Hank, we we often we
1:56:48
right? So, me and Hank, we we often we
1:56:48
right? So, me and Hank, we we often we often hang out sometime in Europe,
1:56:50
often hang out sometime in Europe,
1:56:50
often hang out sometime in Europe, sometime in India. So, I was very
1:56:51
sometime in India. So, I was very
1:56:51
sometime in India. So, I was very excited to see it. In fact, I was going
1:56:53
excited to see it. In fact, I was going
1:56:53
excited to see it. In fact, I was going to be there at Azure Lowlands, but you
1:56:55
to be there at Azure Lowlands, but you
1:56:55
to be there at Azure Lowlands, but you know, visas are always You missed out.
1:56:57
know, visas are always You missed out.
1:56:57
know, visas are always You missed out. You missed out, my friend. That's all
1:56:59
You missed out, my friend. That's all
1:56:59
You missed out, my friend. That's all what I can say. Hanks conferences are
1:57:01
what I can say. Hanks conferences are
1:57:01
what I can say. Hanks conferences are just amazing. Yeah. So if uh the next
1:57:05
just amazing. Yeah. So if uh the next
1:57:05
just amazing. Yeah. So if uh the next version of Azelins come around, have a
1:57:07
version of Azelins come around, have a
1:57:08
version of Azelins come around, have a look at the lineup and
1:57:11
look at the lineup and
1:57:11
look at the lineup and the conference is pretty fun. That's all
1:57:14
the conference is pretty fun. That's all
1:57:14
the conference is pretty fun. That's all I can say. Yeah, I know at this instance
1:57:17
I can say. Yeah, I know at this instance
1:57:17
I can say. Yeah, I know at this instance he's doing uh the agent con somewhere,
1:57:19
he's doing uh the agent con somewhere,
1:57:20
he's doing uh the agent con somewhere, right?
1:57:23
Utima, please feel free to go ahead and
1:57:25
Utima, please feel free to go ahead and
1:57:25
Utima, please feel free to go ahead and share your screen and then I'll get you
1:57:27
share your screen and then I'll get you
1:57:27
share your screen and then I'll get you add it and then you can start the
1:57:28
add it and then you can start the
1:57:28
add it and then you can start the session. Share my screen. So let me see
1:57:31
session. Share my screen. So let me see
1:57:31
session. Share my screen. So let me see which screen uh screen number two. Okay.
1:57:36
which screen uh screen number two. Okay.
1:57:36
which screen uh screen number two. Okay. Um I hope I'm sharing the correct
1:57:39
Um I hope I'm sharing the correct
1:57:39
Um I hope I'm sharing the correct screen. So if I change this, do you see
1:57:41
screen. So if I change this, do you see
1:57:41
screen. So if I change this, do you see writer? Yes. So I am sharing the correct
1:57:44
writer? Yes. So I am sharing the correct
1:57:44
writer? Yes. So I am sharing the correct screen. Ready? Perfect. All right,
1:57:46
screen. Ready? Perfect. All right,
1:57:46
screen. Ready? Perfect. All right, Punima. Next 35 minutes is all yours.
1:57:49
Punima. Next 35 minutes is all yours.
1:57:49
Punima. Next 35 minutes is all yours. Okay, I'll try to stick to the next 35
1:57:51
Okay, I'll try to stick to the next 35
1:57:51
Okay, I'll try to stick to the next 35 minutes as much as I can because in my
1:57:53
minutes as much as I can because in my
1:57:53
minutes as much as I can because in my last practice run, I went up to 37. So
1:57:58
last practice run, I went up to 37. So
1:57:58
last practice run, I went up to 37. So let's see. So thank you again for having
1:58:00
let's see. So thank you again for having
1:58:00
let's see. So thank you again for having me here uh to the entire conference
1:58:03
me here uh to the entire conference
1:58:03
me here uh to the entire conference organizers and today I'll be speaking
1:58:05
organizers and today I'll be speaking
1:58:05
organizers and today I'll be speaking about synchronous web apps and how we
1:58:07
about synchronous web apps and how we
1:58:07
about synchronous web apps and how we can approach web apps from a messaging
1:58:10
can approach web apps from a messaging
1:58:10
can approach web apps from a messaging architecture point of view. You know as
1:58:13
architecture point of view. You know as
1:58:13
architecture point of view. You know as developers one of one of our greatest
1:58:16
developers one of one of our greatest
1:58:16
developers one of one of our greatest and perfect dreams is to get our hands
1:58:18
and perfect dreams is to get our hands
1:58:18
and perfect dreams is to get our hands dirty with code. I mean it mean what I
1:58:21
dirty with code. I mean it mean what I
1:58:21
dirty with code. I mean it mean what I mean by saying is that as developers
1:58:23
mean by saying is that as developers
1:58:23
mean by saying is that as developers nothing excites us than getting to work
1:58:25
nothing excites us than getting to work
1:58:25
nothing excites us than getting to work on a project with tons of integration
1:58:27
on a project with tons of integration
1:58:27
on a project with tons of integration patterns right creating databases
1:58:30
patterns right creating databases
1:58:30
patterns right creating databases entities defining workflows and if you
1:58:33
entities defining workflows and if you
1:58:33
entities defining workflows and if you have a ton of external APIs you know
1:58:36
have a ton of external APIs you know
1:58:36
have a ton of external APIs you know what let us just get through it you know
1:58:38
what let us just get through it you know
1:58:38
what let us just get through it you know you can't just wait to work on such a
1:58:40
you can't just wait to work on such a
1:58:40
you can't just wait to work on such a project sounds perfect right and I think
1:58:42
project sounds perfect right and I think
1:58:42
project sounds perfect right and I think that's a very relatable situation for
1:58:44
that's a very relatable situation for
1:58:44
that's a very relatable situation for all of us who are developers and it's a
1:58:47
all of us who are developers and it's a
1:58:47
all of us who are developers and it's a dream come true as well so We work on
1:58:49
dream come true as well so We work on
1:58:49
dream come true as well so We work on such projects and then we put our
1:58:52
such projects and then we put our
1:58:52
such projects and then we put our projects live. Fantastic. It's a moment
1:58:55
projects live. Fantastic. It's a moment
1:58:55
projects live. Fantastic. It's a moment of pride and joy when your project hits
1:58:58
of pride and joy when your project hits
1:58:58
of pride and joy when your project hits production and starts making money for
1:58:59
production and starts making money for
1:59:00
production and starts making money for the business. And there's no other joy
1:59:02
the business. And there's no other joy
1:59:02
the business. And there's no other joy like sh showcasing your own work. Again,
1:59:04
like sh showcasing your own work. Again,
1:59:04
like sh showcasing your own work. Again, something relatable. And then comes that
1:59:07
something relatable. And then comes that
1:59:07
something relatable. And then comes that first campaign that goes out as a mass
1:59:09
first campaign that goes out as a mass
1:59:09
first campaign that goes out as a mass email to how many people just about a
1:59:12
email to how many people just about a
1:59:12
email to how many people just about a few hundred,000 people that the business
1:59:14
few hundred,000 people that the business
1:59:14
few hundred,000 people that the business has gained as the customer base. And
1:59:17
has gained as the customer base. And
1:59:17
has gained as the customer base. And then starts your rainy day. How? Because
1:59:20
then starts your rainy day. How? Because
1:59:20
then starts your rainy day. How? Because you notice sluggish front ends or you
1:59:22
you notice sluggish front ends or you
1:59:22
you notice sluggish front ends or you you get phone calls saying you have
1:59:24
you get phone calls saying you have
1:59:24
you get phone calls saying you have sluggish front ends. You notice that the
1:59:27
sluggish front ends. You notice that the
1:59:27
sluggish front ends. You notice that the backend services are not scaling quite
1:59:29
backend services are not scaling quite
1:59:29
backend services are not scaling quite well or they are struggling to put up
1:59:32
well or they are struggling to put up
1:59:32
well or they are struggling to put up with the load. You might be taking
1:59:34
with the load. You might be taking
1:59:34
with the load. You might be taking payments on the site and that doesn't
1:59:36
payments on the site and that doesn't
1:59:36
payments on the site and that doesn't seem to work or your payment processing
1:59:38
seem to work or your payment processing
1:59:38
seem to work or your payment processing gateway is hitting rate limiting
1:59:40
gateway is hitting rate limiting
1:59:40
gateway is hitting rate limiting territories and at some point you know
1:59:43
territories and at some point you know
1:59:43
territories and at some point you know what the site just gives up make saying
1:59:45
what the site just gives up make saying
1:59:45
what the site just gives up make saying that oh can't deal with this I cannot
1:59:47
that oh can't deal with this I cannot
1:59:48
that oh can't deal with this I cannot deal with the spikes just do whatever
1:59:50
deal with the spikes just do whatever
1:59:50
deal with the spikes just do whatever you can now this is something that we
1:59:53
you can now this is something that we
1:59:53
you can now this is something that we all have been there done in the past I
1:59:55
all have been there done in the past I
1:59:55
all have been there done in the past I have been there done that myself but
1:59:57
have been there done that myself but
1:59:57
have been there done that myself but there are other ways to face this
2:00:00
there are other ways to face this
2:00:00
there are other ways to face this reality more confidently upfront And
2:00:03
reality more confidently upfront And
2:00:03
reality more confidently upfront And messaging is one such
2:00:06
messaging is one such
2:00:06
messaging is one such technology. And sorry my slides are
2:00:09
technology. And sorry my slides are
2:00:09
technology. And sorry my slides are frozen. Why? What happened there? Okay.
2:00:11
frozen. Why? What happened there? Okay.
2:00:11
frozen. Why? What happened there? Okay. No, I am Pimaan. I'm a software engineer
2:00:15
No, I am Pimaan. I'm a software engineer
2:00:15
No, I am Pimaan. I'm a software engineer and solutions architect at particular
2:00:17
and solutions architect at particular
2:00:17
and solutions architect at particular software where we build N service bus
2:00:19
software where we build N service bus
2:00:19
software where we build N service bus and the entire service platform around N
2:00:21
and the entire service platform around N
2:00:22
and the entire service platform around N service bus. I'm speaking to you from
2:00:24
service bus. I'm speaking to you from
2:00:24
service bus. I'm speaking to you from Bakshay in United Kingdom. And if you
2:00:26
Bakshay in United Kingdom. And if you
2:00:26
Bakshay in United Kingdom. And if you have any questions, reach out to me, DM
2:00:29
have any questions, reach out to me, DM
2:00:29
have any questions, reach out to me, DM me at punima nayer. I am Asiman on
2:00:33
me at punima nayer. I am Asiman on
2:00:33
me at punima nayer. I am Asiman on LinkedIn X and Blue Sky. So any
2:00:35
LinkedIn X and Blue Sky. So any
2:00:35
LinkedIn X and Blue Sky. So any questions feel free to DM me and I'll
2:00:37
questions feel free to DM me and I'll
2:00:37
questions feel free to DM me and I'll try to answer you with um as many
2:00:40
try to answer you with um as many
2:00:40
try to answer you with um as many answers the best answers that I can. So
2:00:41
answers the best answers that I can. So
2:00:41
answers the best answers that I can. So in the next 35 minutes we'll pick up
2:00:43
in the next 35 minutes we'll pick up
2:00:43
in the next 35 minutes we'll pick up some basics on asynchronous messaging
2:00:46
some basics on asynchronous messaging
2:00:46
some basics on asynchronous messaging and how we can use messaging as an
2:00:48
and how we can use messaging as an
2:00:48
and how we can use messaging as an architecture to have really high high
2:00:51
architecture to have really high high
2:00:51
architecture to have really high high throughput high performant mission
2:00:53
throughput high performant mission
2:00:53
throughput high performant mission critical systems and we'll see some code
2:00:56
critical systems and we'll see some code
2:00:56
critical systems and we'll see some code as well. When it comes to mission
2:00:58
as well. When it comes to mission
2:00:58
as well. When it comes to mission critical or high performance system, the
2:01:00
critical or high performance system, the
2:01:00
critical or high performance system, the the first thing I like to talk about is
2:01:02
the first thing I like to talk about is
2:01:02
the first thing I like to talk about is the order processing system. Why?
2:01:04
the order processing system. Why?
2:01:04
the order processing system. Why? Because it's a very relatable workflow
2:01:07
Because it's a very relatable workflow
2:01:07
Because it's a very relatable workflow for everyone. It is the holy grail when
2:01:09
for everyone. It is the holy grail when
2:01:09
for everyone. It is the holy grail when it comes to building distributed systems
2:01:11
it comes to building distributed systems
2:01:11
it comes to building distributed systems and talking about distributed systems.
2:01:13
and talking about distributed systems.
2:01:13
and talking about distributed systems. And what is a typical workflow? We go to
2:01:16
And what is a typical workflow? We go to
2:01:16
And what is a typical workflow? We go to the website, put a few products into the
2:01:18
the website, put a few products into the
2:01:18
the website, put a few products into the basket, click check out, put our details
2:01:21
basket, click check out, put our details
2:01:21
basket, click check out, put our details in, then fill in the credit card
2:01:23
in, then fill in the credit card
2:01:23
in, then fill in the credit card details, and then say place order. Boom.
2:01:26
details, and then say place order. Boom.
2:01:26
details, and then say place order. Boom. And that order goes into the backend
2:01:27
And that order goes into the backend
2:01:28
And that order goes into the backend system of the online shop. And then it
2:01:30
system of the online shop. And then it
2:01:30
system of the online shop. And then it gets processed. That's the happy day.
2:01:32
gets processed. That's the happy day.
2:01:32
gets processed. That's the happy day. That's not the rainy day. That's the
2:01:33
That's not the rainy day. That's the
2:01:33
That's not the rainy day. That's the sunny day that you can see just like the
2:01:36
sunny day that you can see just like the
2:01:36
sunny day that you can see just like the day I have out here in UK. That's a
2:01:38
day I have out here in UK. That's a
2:01:38
day I have out here in UK. That's a perfect case scenario. Now go back and
2:01:41
perfect case scenario. Now go back and
2:01:41
perfect case scenario. Now go back and rewind to that campaign scenario. Where
2:01:43
rewind to that campaign scenario. Where
2:01:43
rewind to that campaign scenario. Where were you at that point when you had that
2:01:45
were you at that point when you had that
2:01:45
were you at that point when you had that rainy day? So we had a sluggish day. Uh
2:01:50
rainy day? So we had a sluggish day. Uh
2:01:50
rainy day? So we had a sluggish day. Uh we had we started off with sluggish
2:01:52
we had we started off with sluggish
2:01:52
we had we started off with sluggish front ends. Sales are reported to be
2:01:54
front ends. Sales are reported to be
2:01:54
front ends. Sales are reported to be very low. Fine. You know what? We are on
2:01:57
very low. Fine. You know what? We are on
2:01:57
very low. Fine. You know what? We are on Azure. Let's just scale the front end.
2:01:59
Azure. Let's just scale the front end.
2:01:59
Azure. Let's just scale the front end. Autoscaling is what 10 minutes max.
2:02:02
Autoscaling is what 10 minutes max.
2:02:02
Autoscaling is what 10 minutes max. Fine, we do that. Have we solved the
2:02:04
Fine, we do that. Have we solved the
2:02:04
Fine, we do that. Have we solved the problem? Not yet. Because our backend
2:02:07
problem? Not yet. Because our backend
2:02:07
problem? Not yet. Because our backend services are struggling to cope up. It's
2:02:09
services are struggling to cope up. It's
2:02:09
services are struggling to cope up. It's still slow. Fine. We are going to
2:02:12
still slow. Fine. We are going to
2:02:12
still slow. Fine. We are going to autoscale our backend services. Now,
2:02:14
autoscale our backend services. Now,
2:02:14
autoscale our backend services. Now, there's a catch there. Legacy backends.
2:02:17
there's a catch there. Legacy backends.
2:02:17
there's a catch there. Legacy backends. Who has dealt with a backend system or
2:02:20
Who has dealt with a backend system or
2:02:20
Who has dealt with a backend system or API server hosted in a old server
2:02:23
API server hosted in a old server
2:02:23
API server hosted in a old server somewhere in the basement of a building
2:02:25
somewhere in the basement of a building
2:02:25
somewhere in the basement of a building been there done that there's an API
2:02:27
been there done that there's an API
2:02:27
been there done that there's an API which just couldn't be scaled that's a
2:02:29
which just couldn't be scaled that's a
2:02:29
which just couldn't be scaled that's a catch in itself let's just not talk
2:02:31
catch in itself let's just not talk
2:02:31
catch in itself let's just not talk about it but let us say that we have
2:02:33
about it but let us say that we have
2:02:33
about it but let us say that we have started scaling our backend services as
2:02:35
started scaling our backend services as
2:02:35
started scaling our backend services as well and then at one point we hit the
2:02:38
well and then at one point we hit the
2:02:38
well and then at one point we hit the wall the database so we have been moving
2:02:41
wall the database so we have been moving
2:02:41
wall the database so we have been moving the bottleneck from the front end to the
2:02:43
the bottleneck from the front end to the
2:02:43
the bottleneck from the front end to the backend services to the database then it
2:02:46
backend services to the database then it
2:02:46
backend services to the database then it just goes boom
2:02:47
just goes boom
2:02:47
just goes boom You know what? I cannot cope up with the
2:02:49
You know what? I cannot cope up with the
2:02:49
You know what? I cannot cope up with the amount of traffic that is hitting me,
2:02:51
amount of traffic that is hitting me,
2:02:51
amount of traffic that is hitting me, says the database. There's so much
2:02:53
says the database. There's so much
2:02:53
says the database. There's so much resources that you can throw at it. But
2:02:55
resources that you can throw at it. But
2:02:55
resources that you can throw at it. But what really happens is cascading
2:02:57
what really happens is cascading
2:02:57
what really happens is cascading failures. The database fails, it then
2:03:01
failures. The database fails, it then
2:03:01
failures. The database fails, it then goes and fails the backend services that
2:03:03
goes and fails the backend services that
2:03:03
goes and fails the backend services that we have scaled out and that goes and
2:03:05
we have scaled out and that goes and
2:03:05
we have scaled out and that goes and fails the sluggish front end which has
2:03:07
fails the sluggish front end which has
2:03:07
fails the sluggish front end which has also been scaled out horizontally,
2:03:09
also been scaled out horizontally,
2:03:09
also been scaled out horizontally, vertically, all way, but it then just
2:03:12
vertically, all way, but it then just
2:03:12
vertically, all way, but it then just blows up on the face of the user. we are
2:03:14
blows up on the face of the user. we are
2:03:14
blows up on the face of the user. we are not making money as a business and that
2:03:16
not making money as a business and that
2:03:16
not making money as a business and that is the rainy day that I've been talking
2:03:18
is the rainy day that I've been talking
2:03:18
is the rainy day that I've been talking about. Yeah. So I've been there done
2:03:20
about. Yeah. So I've been there done
2:03:20
about. Yeah. So I've been there done that myself years ago. So I was working
2:03:22
that myself years ago. So I was working
2:03:22
that myself years ago. So I was working on a system and when the mass email
2:03:25
on a system and when the mass email
2:03:25
on a system and when the mass email campaign went out to their very loyal
2:03:27
campaign went out to their very loyal
2:03:27
campaign went out to their very loyal customer base, we had like tons of
2:03:29
customer base, we had like tons of
2:03:29
customer base, we had like tons of people hitting the website and we had a
2:03:32
people hitting the website and we had a
2:03:32
people hitting the website and we had a legacy API and there was a point where I
2:03:35
legacy API and there was a point where I
2:03:35
legacy API and there was a point where I live monitored a system with my
2:03:37
live monitored a system with my
2:03:37
live monitored a system with my colleague over a phone call with a
2:03:39
colleague over a phone call with a
2:03:39
colleague over a phone call with a customer and that went on for a couple
2:03:41
customer and that went on for a couple
2:03:41
customer and that went on for a couple of rounds and that is where we start
2:03:43
of rounds and that is where we start
2:03:43
of rounds and that is where we start thinking about did I use the right tool
2:03:46
thinking about did I use the right tool
2:03:46
thinking about did I use the right tool for the project? You know could I have
2:03:49
for the project? You know could I have
2:03:49
for the project? You know could I have done this better? So what did I miss
2:03:52
done this better? So what did I miss
2:03:52
done this better? So what did I miss out? Did I miss a memo? And the memo
2:03:54
out? Did I miss a memo? And the memo
2:03:54
out? Did I miss a memo? And the memo that I missed out happens to be the
2:03:56
that I missed out happens to be the
2:03:56
that I missed out happens to be the policies of distributed computing. So
2:03:58
policies of distributed computing. So
2:03:58
policies of distributed computing. So what we have been speaking about so far
2:04:00
what we have been speaking about so far
2:04:00
what we have been speaking about so far is a distributed system where two or
2:04:03
is a distributed system where two or
2:04:03
is a distributed system where two or more computers speak to each other. So
2:04:05
more computers speak to each other. So
2:04:06
more computers speak to each other. So as developers when we develop
2:04:07
as developers when we develop
2:04:07
as developers when we develop distributed systems we take many many
2:04:10
distributed systems we take many many
2:04:10
distributed systems we take many many things for granted and those false
2:04:13
things for granted and those false
2:04:13
things for granted and those false assumptions have been coined together as
2:04:15
assumptions have been coined together as
2:04:15
assumptions have been coined together as the policies of distributed computing.
2:04:17
the policies of distributed computing.
2:04:17
the policies of distributed computing. the things which we failed to see up
2:04:19
the things which we failed to see up
2:04:19
the things which we failed to see up front. This was the this was this is a
2:04:22
front. This was the this was this is a
2:04:22
front. This was the this was this is a list of policies that was put together
2:04:24
list of policies that was put together
2:04:24
list of policies that was put together originally by Peter Deutsch. I will be
2:04:27
originally by Peter Deutsch. I will be
2:04:27
originally by Peter Deutsch. I will be leaving a link to all of this in my
2:04:28
leaving a link to all of this in my
2:04:28
leaving a link to all of this in my resources at the end. So keep on
2:04:30
resources at the end. So keep on
2:04:30
resources at the end. So keep on watching. But let us talk about these
2:04:33
watching. But let us talk about these
2:04:33
watching. But let us talk about these policies for a minute. We assume that
2:04:35
policies for a minute. We assume that
2:04:35
policies for a minute. We assume that the network is reliable. We assume that
2:04:37
the network is reliable. We assume that
2:04:38
the network is reliable. We assume that network will always be up and network
2:04:41
network will always be up and network
2:04:41
network will always be up and network will everything that we send will be
2:04:43
will everything that we send will be
2:04:43
will everything that we send will be received. But in reality network can
2:04:45
received. But in reality network can
2:04:45
received. But in reality network can fail. information can get lost and
2:04:48
fail. information can get lost and
2:04:48
fail. information can get lost and network could become congested. Right?
2:04:50
network could become congested. Right?
2:04:50
network could become congested. Right? We assume that latency is zero. We
2:04:54
We assume that latency is zero. We
2:04:54
We assume that latency is zero. We assume that requests will complete
2:04:56
assume that requests will complete
2:04:56
assume that requests will complete instantly. But in reality there is
2:04:59
instantly. But in reality there is
2:04:59
instantly. But in reality there is always a delay millisecond, microsconds
2:05:01
always a delay millisecond, microsconds
2:05:01
always a delay millisecond, microsconds to even more in some cases. We assume
2:05:05
to even more in some cases. We assume
2:05:05
to even more in some cases. We assume that the bandwidth is infinite but
2:05:07
that the bandwidth is infinite but
2:05:07
that the bandwidth is infinite but bandwidth is finite. There's a limit to
2:05:09
bandwidth is finite. There's a limit to
2:05:09
bandwidth is finite. There's a limit to the bandwidth. You can have slowdowns
2:05:11
the bandwidth. You can have slowdowns
2:05:11
the bandwidth. You can have slowdowns and bottlenecks. We just cannot send as
2:05:14
and bottlenecks. We just cannot send as
2:05:14
and bottlenecks. We just cannot send as much data as we want at any
2:05:16
much data as we want at any
2:05:16
much data as we want at any point. We assume that the network is
2:05:19
point. We assume that the network is
2:05:19
point. We assume that the network is always secure. We assume that you know
2:05:23
always secure. We assume that you know
2:05:23
always secure. We assume that you know now my network is secure. There's no one
2:05:24
now my network is secure. There's no one
2:05:24
now my network is secure. There's no one coming to attack it. But we need to
2:05:26
coming to attack it. But we need to
2:05:26
coming to attack it. But we need to understand that in flight request
2:05:29
understand that in flight request
2:05:29
understand that in flight request there's always a chance that someone
2:05:31
there's always a chance that someone
2:05:31
there's always a chance that someone could intercept
2:05:33
could intercept
2:05:33
could intercept it. We assume that topology doesn't
2:05:36
it. We assume that topology doesn't
2:05:36
it. We assume that topology doesn't change. We assume that servers, nodes,
2:05:39
change. We assume that servers, nodes,
2:05:39
change. We assume that servers, nodes, routes, they all are static and constant
2:05:41
routes, they all are static and constant
2:05:41
routes, they all are static and constant and they don't change. But in reality,
2:05:44
and they don't change. But in reality,
2:05:44
and they don't change. But in reality, machines crash, they restart, they get
2:05:46
machines crash, they restart, they get
2:05:46
machines crash, they restart, they get migrated, they scale up and down. So we
2:05:49
migrated, they scale up and down. So we
2:05:50
migrated, they scale up and down. So we cannot assume that there is no change.
2:05:52
cannot assume that there is no change.
2:05:52
cannot assume that there is no change. In fact, change is constant. And as
2:05:54
In fact, change is constant. And as
2:05:54
In fact, change is constant. And as developers, we need to embrace it. We
2:05:57
developers, we need to embrace it. We
2:05:57
developers, we need to embrace it. We assume that there's just a single
2:05:59
assume that there's just a single
2:05:59
assume that there's just a single administrator. But in reality, there is
2:06:01
administrator. But in reality, there is
2:06:01
administrator. But in reality, there is nothing called a centralized control.
2:06:03
nothing called a centralized control.
2:06:03
nothing called a centralized control. These days, it's more about distributed
2:06:05
These days, it's more about distributed
2:06:05
These days, it's more about distributed teams. You could have multiple teams
2:06:07
teams. You could have multiple teams
2:06:07
teams. You could have multiple teams working on the same distributed system
2:06:09
working on the same distributed system
2:06:09
working on the same distributed system and when that happens if you don't have
2:06:11
and when that happens if you don't have
2:06:11
and when that happens if you don't have enough inter team communication
2:06:13
enough inter team communication
2:06:13
enough inter team communication inconsistencies and failures happen but
2:06:15
inconsistencies and failures happen but
2:06:15
inconsistencies and failures happen but is there something called as enough
2:06:17
is there something called as enough
2:06:17
is there something called as enough interte communication I don't think
2:06:20
interte communication I don't think
2:06:21
interte communication I don't think so we assume that the transport cost is
2:06:24
so we assume that the transport cost is
2:06:24
so we assume that the transport cost is zero even if we have infinite bandwidth
2:06:27
zero even if we have infinite bandwidth
2:06:27
zero even if we have infinite bandwidth the transport cost is not zero you know
2:06:30
the transport cost is not zero you know
2:06:30
the transport cost is not zero you know there is a little bit of that extra that
2:06:31
there is a little bit of that extra that
2:06:32
there is a little bit of that extra that you pay at the end of every month with
2:06:33
you pay at the end of every month with
2:06:33
you pay at the end of every month with your Azure bill that comes around that
2:06:36
your Azure bill that comes around that
2:06:36
your Azure bill that comes around that is what telling you is that transport
2:06:39
is what telling you is that transport
2:06:39
is what telling you is that transport cost is not zero. There's always cost
2:06:41
cost is not zero. There's always cost
2:06:41
cost is not zero. There's always cost associated even with CPU performance and
2:06:44
associated even with CPU performance and
2:06:44
associated even with CPU performance and usage. And we assume that network is
2:06:46
usage. And we assume that network is
2:06:46
usage. And we assume that network is homogeneous. But is the network
2:06:48
homogeneous. But is the network
2:06:48
homogeneous. But is the network homogeneous? Is the behavior always
2:06:50
homogeneous? Is the behavior always
2:06:50
homogeneous? Is the behavior always uniform? Never. Because no two systems
2:06:53
uniform? Never. Because no two systems
2:06:54
uniform? Never. Because no two systems or no two servers are
2:06:55
or no two servers are
2:06:55
or no two servers are alike. Let us go back to our order
2:06:58
alike. Let us go back to our order
2:06:58
alike. Let us go back to our order processing workflow and see what might
2:07:00
processing workflow and see what might
2:07:00
processing workflow and see what might the workflow be. So we have our website
2:07:03
the workflow be. So we have our website
2:07:03
the workflow be. So we have our website which is pushing the orders or when you
2:07:06
which is pushing the orders or when you
2:07:06
which is pushing the orders or when you hit that place order button goes into a
2:07:09
hit that place order button goes into a
2:07:09
hit that place order button goes into a big service called the order processing
2:07:10
big service called the order processing
2:07:10
big service called the order processing service. The order processing service
2:07:13
service. The order processing service
2:07:13
service. The order processing service then might reach out to the sales
2:07:15
then might reach out to the sales
2:07:15
then might reach out to the sales service and say hey create this order
2:07:17
service and say hey create this order
2:07:17
service and say hey create this order for me and the sales comes back uh with
2:07:20
for me and the sales comes back uh with
2:07:20
for me and the sales comes back uh with a response. Then the order processing
2:07:22
a response. Then the order processing
2:07:22
a response. Then the order processing goes and talks to the order payments.
2:07:25
goes and talks to the order payments.
2:07:25
goes and talks to the order payments. Sorry the payments is hidden here. The
2:07:27
Sorry the payments is hidden here. The
2:07:27
Sorry the payments is hidden here. The payments and says hey build this for me.
2:07:29
payments and says hey build this for me.
2:07:29
payments and says hey build this for me. And then somehow it gives a response
2:07:32
And then somehow it gives a response
2:07:32
And then somehow it gives a response magically and then say then it goes and
2:07:35
magically and then say then it goes and
2:07:35
magically and then say then it goes and talks to the customer status service to
2:07:38
talks to the customer status service to
2:07:38
talks to the customer status service to update the loyalty points and then it
2:07:40
update the loyalty points and then it
2:07:40
update the loyalty points and then it might then give it uh give the response
2:07:43
might then give it uh give the response
2:07:43
might then give it uh give the response back to the order processing and then
2:07:45
back to the order processing and then
2:07:45
back to the order processing and then the response goes back all the way back
2:07:47
the response goes back all the way back
2:07:47
the response goes back all the way back to the client. That is when the client
2:07:50
to the client. That is when the client
2:07:50
to the client. That is when the client uh gets to know yeah the order has gone
2:07:52
uh gets to know yeah the order has gone
2:07:52
uh gets to know yeah the order has gone through. Now what you might have compare
2:07:57
through. Now what you might have compare
2:07:57
through. Now what you might have compare this with the policies that we just
2:07:59
this with the policies that we just
2:07:59
this with the policies that we just spoke about what if one of the services
2:08:01
spoke about what if one of the services
2:08:01
spoke about what if one of the services is down what if the network is congested
2:08:04
is down what if the network is congested
2:08:04
is down what if the network is congested and the data doesn't reach on time there
2:08:06
and the data doesn't reach on time there
2:08:06
and the data doesn't reach on time there could be that chance of HTB timeout
2:08:08
could be that chance of HTB timeout
2:08:08
could be that chance of HTB timeout exception right what if one of the
2:08:10
exception right what if one of the
2:08:10
exception right what if one of the services has been updated by a team and
2:08:12
services has been updated by a team and
2:08:12
services has been updated by a team and the others other other services just
2:08:15
the others other other services just
2:08:15
the others other other services just cannot cope up there's the risk of that
2:08:18
cannot cope up there's the risk of that
2:08:18
cannot cope up there's the risk of that too so what we have is a scenario of
2:08:20
too so what we have is a scenario of
2:08:20
too so what we have is a scenario of very tight coupling each service like If
2:08:23
very tight coupling each service like If
2:08:23
very tight coupling each service like If you look at the order processing
2:08:24
you look at the order processing
2:08:24
you look at the order processing service, it needs to know that it needs
2:08:26
service, it needs to know that it needs
2:08:26
service, it needs to know that it needs to call the sales, it needs to call the
2:08:28
to call the sales, it needs to call the
2:08:28
to call the sales, it needs to call the order, it needs to call the uh order
2:08:30
order, it needs to call the uh order
2:08:30
order, it needs to call the uh order payment and it needs to call the custom
2:08:31
payment and it needs to call the custom
2:08:31
payment and it needs to call the custom status. Why? Why can't just the order
2:08:34
status. Why? Why can't just the order
2:08:34
status. Why? Why can't just the order processing handoff and then just move on
2:08:36
processing handoff and then just move on
2:08:36
processing handoff and then just move on to do other things? That is what you
2:08:38
to do other things? That is what you
2:08:38
to do other things? That is what you want to do right here. There's too many
2:08:40
want to do right here. There's too many
2:08:40
want to do right here. There's too many responsibilities on any service that is
2:08:43
responsibilities on any service that is
2:08:43
responsibilities on any service that is doing it. And you might think at this
2:08:45
doing it. And you might think at this
2:08:45
doing it. And you might think at this point that you can bring in poly to keep
2:08:48
point that you can bring in poly to keep
2:08:48
point that you can bring in poly to keep doing the retries if there's failures
2:08:50
doing the retries if there's failures
2:08:50
doing the retries if there's failures happening. But that's not enough because
2:08:53
happening. But that's not enough because
2:08:53
happening. But that's not enough because what about the data and the item potency
2:08:56
what about the data and the item potency
2:08:56
what about the data and the item potency around it? Do you want to take the
2:08:57
around it? Do you want to take the
2:08:57
around it? Do you want to take the payment twice? No. The underlying
2:09:00
payment twice? No. The underlying
2:09:00
payment twice? No. The underlying problem here is what's known as temporal
2:09:02
problem here is what's known as temporal
2:09:02
problem here is what's known as temporal coupling. This is the tight coupling
2:09:03
coupling. This is the tight coupling
2:09:03
coupling. This is the tight coupling that I've been talking about. The idea
2:09:06
that I've been talking about. The idea
2:09:06
that I've been talking about. The idea that for two services to communicate to
2:09:09
that for two services to communicate to
2:09:09
that for two services to communicate to each other, they should be up and
2:09:10
each other, they should be up and
2:09:10
each other, they should be up and running at the same time. So if there's
2:09:13
running at the same time. So if there's
2:09:13
running at the same time. So if there's a sales service and the order processing
2:09:15
a sales service and the order processing
2:09:15
a sales service and the order processing both needs to be up and running I need
2:09:17
both needs to be up and running I need
2:09:17
both needs to be up and running I need to get the response back after talking
2:09:19
to get the response back after talking
2:09:19
to get the response back after talking to B directly uh and only then can I
2:09:22
to B directly uh and only then can I
2:09:22
to B directly uh and only then can I move on. So if B
2:09:24
move on. So if B
2:09:24
move on. So if B crashes there is no request there is no
2:09:27
crashes there is no request there is no
2:09:27
crashes there is no request there is no response right and at that point A is
2:09:30
response right and at that point A is
2:09:30
response right and at that point A is completely blocked A cannot do anything
2:09:32
completely blocked A cannot do anything
2:09:32
completely blocked A cannot do anything and there's failure on the face of the
2:09:34
and there's failure on the face of the
2:09:34
and there's failure on the face of the user and while that request has been
2:09:37
user and while that request has been
2:09:37
user and while that request has been sent to B is still waiting doing
2:09:40
sent to B is still waiting doing
2:09:40
sent to B is still waiting doing nothing. Yeah, that is money lost
2:09:43
nothing. Yeah, that is money lost
2:09:43
nothing. Yeah, that is money lost probably during that time in compute
2:09:46
probably during that time in compute
2:09:46
probably during that time in compute power. There's also the request response
2:09:48
power. There's also the request response
2:09:48
power. There's also the request response pattern that we see here. I am not
2:09:50
pattern that we see here. I am not
2:09:50
pattern that we see here. I am not saying that this is a problem. But when
2:09:52
saying that this is a problem. But when
2:09:52
saying that this is a problem. But when it comes to high throughput, high
2:09:54
it comes to high throughput, high
2:09:54
it comes to high throughput, high performant scenarios, we cannot rely on
2:09:57
performant scenarios, we cannot rely on
2:09:57
performant scenarios, we cannot rely on request response because it follows the
2:09:59
request response because it follows the
2:09:59
request response because it follows the synchronous processing technique because
2:10:02
synchronous processing technique because
2:10:02
synchronous processing technique because HTTP by nature is synchronous. We cannot
2:10:05
HTTP by nature is synchronous. We cannot
2:10:05
HTTP by nature is synchronous. We cannot have async processing with request
2:10:07
have async processing with request
2:10:07
have async processing with request response. So this is also that something
2:10:09
response. So this is also that something
2:10:09
response. So this is also that something cannot really fit into this high
2:10:11
cannot really fit into this high
2:10:11
cannot really fit into this high throughput high performance scenario
2:10:13
throughput high performance scenario
2:10:13
throughput high performance scenario mission critical systems. So what we
2:10:16
mission critical systems. So what we
2:10:16
mission critical systems. So what we have built here is a house of cards and
2:10:19
have built here is a house of cards and
2:10:19
have built here is a house of cards and not just a house of cards but one that
2:10:22
not just a house of cards but one that
2:10:22
not just a house of cards but one that is sitting on top of Asian waves. Now
2:10:24
is sitting on top of Asian waves. Now
2:10:24
is sitting on top of Asian waves. Now this is not about bashing HTTP APIs or
2:10:27
this is not about bashing HTTP APIs or
2:10:28
this is not about bashing HTTP APIs or gRPC, GraphQL whatever because they are
2:10:30
gRPC, GraphQL whatever because they are
2:10:30
gRPC, GraphQL whatever because they are all battle tested. They are there for a
2:10:32
all battle tested. They are there for a
2:10:32
all battle tested. They are there for a purpose. What I'm talking about is
2:10:34
purpose. What I'm talking about is
2:10:34
purpose. What I'm talking about is missionritical high throughput high
2:10:36
missionritical high throughput high
2:10:36
missionritical high throughput high performance systems where time is money
2:10:39
performance systems where time is money
2:10:39
performance systems where time is money where you cannot have failures and
2:10:42
where you cannot have failures and
2:10:42
where you cannot have failures and probably there an HTTP based API is not
2:10:45
probably there an HTTP based API is not
2:10:45
probably there an HTTP based API is not something that you should be using and
2:10:47
something that you should be using and
2:10:47
something that you should be using and how can we change this how can we have
2:10:49
how can we change this how can we have
2:10:49
how can we change this how can we have better foundations by introducing what
2:10:52
better foundations by introducing what
2:10:52
better foundations by introducing what is known as a message cue so in reality
2:10:55
is known as a message cue so in reality
2:10:55
is known as a message cue so in reality it is not as simple as this there's a
2:10:57
it is not as simple as this there's a
2:10:57
it is not as simple as this there's a lot of thinking about the problem and
2:11:00
lot of thinking about the problem and
2:11:00
lot of thinking about the problem and the solution before you go into
2:11:01
the solution before you go into
2:11:01
the solution before you go into implementing this But to have an
2:11:04
implementing this But to have an
2:11:04
implementing this But to have an introduction to messaging today, let us
2:11:06
introduction to messaging today, let us
2:11:06
introduction to messaging today, let us just assume that we have introduced a
2:11:08
just assume that we have introduced a
2:11:08
just assume that we have introduced a message queue in between. What is a
2:11:10
message queue in between. What is a
2:11:10
message queue in between. What is a message Q? Consider it like a database
2:11:13
message Q? Consider it like a database
2:11:13
message Q? Consider it like a database uh but instead of rows you have little
2:11:15
uh but instead of rows you have little
2:11:15
uh but instead of rows you have little messages. And what are messages? They
2:11:17
messages. And what are messages? They
2:11:17
messages. And what are messages? They are basically what you would have in
2:11:19
are basically what you would have in
2:11:19
are basically what you would have in your request information. So with the
2:11:22
your request information. So with the
2:11:22
your request information. So with the message Q in place, A will actually send
2:11:25
message Q in place, A will actually send
2:11:25
message Q in place, A will actually send a message into the message Q and at that
2:11:28
a message into the message Q and at that
2:11:28
a message into the message Q and at that point the message gets stored into the
2:11:30
point the message gets stored into the
2:11:30
point the message gets stored into the message Q. A is not blocked at all. A
2:11:33
message Q. A is not blocked at all. A
2:11:33
message Q. A is not blocked at all. A can continue doing whatever else it
2:11:35
can continue doing whatever else it
2:11:35
can continue doing whatever else it needs to do. And B is the on the other
2:11:38
needs to do. And B is the on the other
2:11:38
needs to do. And B is the on the other side of the message queue. B might be
2:11:40
side of the message queue. B might be
2:11:40
side of the message queue. B might be crashed at that point. B might be
2:11:42
crashed at that point. B might be
2:11:42
crashed at that point. B might be undergoing an update or B might be
2:11:44
undergoing an update or B might be
2:11:44
undergoing an update or B might be online. But whenever B is ready to
2:11:47
online. But whenever B is ready to
2:11:47
online. But whenever B is ready to process things further, it takes the
2:11:49
process things further, it takes the
2:11:49
process things further, it takes the message from the message Q, processes it
2:11:52
message from the message Q, processes it
2:11:52
message from the message Q, processes it and deletes it. So in a single shot, we
2:11:55
and deletes it. So in a single shot, we
2:11:55
and deletes it. So in a single shot, we have gotten rid of the temporal coupling
2:11:57
have gotten rid of the temporal coupling
2:11:57
have gotten rid of the temporal coupling and note that there is no request
2:11:59
and note that there is no request
2:11:59
and note that there is no request response. Why? because message cues or
2:12:01
response. Why? because message cues or
2:12:01
response. Why? because message cues or message brokers they rely on protocols
2:12:04
message brokers they rely on protocols
2:12:04
message brokers they rely on protocols like AMQP which by nature is
2:12:07
like AMQP which by nature is
2:12:07
like AMQP which by nature is asynchronous
2:12:08
asynchronous
2:12:08
asynchronous processing. So where do we start with
2:12:11
processing. So where do we start with
2:12:11
processing. So where do we start with this? I'm going to be focusing on the
2:12:12
this? I'm going to be focusing on the
2:12:12
this? I'm going to be focusing on the technical aspects of it. But if you want
2:12:15
technical aspects of it. But if you want
2:12:15
technical aspects of it. But if you want to head over to
2:12:17
to head over to
2:12:17
to head over to particular.net/blog which I'll be
2:12:18
particular.net/blog which I'll be
2:12:18
particular.net/blog which I'll be sharing a link today there's a lot of
2:12:20
sharing a link today there's a lot of
2:12:20
sharing a link today there's a lot of information about what goes into
2:12:23
information about what goes into
2:12:23
information about what goes into actually planning such a project. how
2:12:25
actually planning such a project. how
2:12:25
actually planning such a project. how can we migrate or how can we even start
2:12:27
can we migrate or how can we even start
2:12:27
can we migrate or how can we even start green field projects but today in this
2:12:29
green field projects but today in this
2:12:30
green field projects but today in this 35 minutes I just want to focus on the
2:12:31
35 minutes I just want to focus on the
2:12:31
35 minutes I just want to focus on the technical aspects of it. So the main
2:12:34
technical aspects of it. So the main
2:12:34
technical aspects of it. So the main thing to talk about or the first main
2:12:36
thing to talk about or the first main
2:12:36
thing to talk about or the first main thing to talk about is the message
2:12:38
thing to talk about is the message
2:12:38
thing to talk about is the message queue. There are variety of options out
2:12:40
queue. There are variety of options out
2:12:40
queue. There are variety of options out there. It can be cues or brokers.
2:12:43
there. It can be cues or brokers.
2:12:43
there. It can be cues or brokers. Brokers are much more advanced in terms
2:12:45
Brokers are much more advanced in terms
2:12:45
Brokers are much more advanced in terms of functionality with uh routing and
2:12:48
of functionality with uh routing and
2:12:48
of functionality with uh routing and message filtering, message
2:12:49
message filtering, message
2:12:49
message filtering, message transformation. a talk for another day
2:12:52
transformation. a talk for another day
2:12:52
transformation. a talk for another day but understand that there is message
2:12:53
but understand that there is message
2:12:53
but understand that there is message brokers and cues. So there's Rabbit MQ
2:12:56
brokers and cues. So there's Rabbit MQ
2:12:56
brokers and cues. So there's Rabbit MQ the open source. Uh if you want
2:12:58
the open source. Uh if you want
2:12:58
the open source. Uh if you want something in the cloud which is a more Q
2:13:00
something in the cloud which is a more Q
2:13:00
something in the cloud which is a more Q version you have Amazon SQS then you
2:13:03
version you have Amazon SQS then you
2:13:03
version you have Amazon SQS then you have Azure service bus which is in Azure
2:13:06
have Azure service bus which is in Azure
2:13:06
have Azure service bus which is in Azure uh cloud and then you have active MQ0
2:13:09
uh cloud and then you have active MQ0
2:13:09
uh cloud and then you have active MQ0 MQI BMQ to Google pubsub. Now all these
2:13:13
MQI BMQ to Google pubsub. Now all these
2:13:13
MQI BMQ to Google pubsub. Now all these all this are infrastructure this is
2:13:15
all this are infrastructure this is
2:13:16
all this are infrastructure this is extra infrastructure being brought into
2:13:18
extra infrastructure being brought into
2:13:18
extra infrastructure being brought into place and then you also might be moving
2:13:21
place and then you also might be moving
2:13:21
place and then you also might be moving in from an HTTP to a messaging
2:13:23
in from an HTTP to a messaging
2:13:23
in from an HTTP to a messaging environment. So you might want to play
2:13:25
environment. So you might want to play
2:13:25
environment. So you might want to play around have a look gain some confidence
2:13:28
around have a look gain some confidence
2:13:28
around have a look gain some confidence about messaging in general in such
2:13:30
about messaging in general in such
2:13:30
about messaging in general in such instances we have seen uh database as
2:13:33
instances we have seen uh database as
2:13:33
instances we have seen uh database as cues using SQL server as cues why
2:13:36
cues using SQL server as cues why
2:13:36
cues using SQL server as cues why because such organizations who doesn't
2:13:39
because such organizations who doesn't
2:13:39
because such organizations who doesn't have enough confidence with messaging
2:13:41
have enough confidence with messaging
2:13:41
have enough confidence with messaging from the word go they they find it
2:13:44
from the word go they they find it
2:13:44
from the word go they they find it easier to have SQL server which they
2:13:46
easier to have SQL server which they
2:13:46
easier to have SQL server which they might be already using in the
2:13:48
might be already using in the
2:13:48
might be already using in the application and use that as a cue it's
2:13:50
application and use that as a cue it's
2:13:50
application and use that as a cue it's okay in that kind of a scenario to use
2:13:53
okay in that kind of a scenario to use
2:13:53
okay in that kind of a scenario to use it But when you think about real high
2:13:55
it But when you think about real high
2:13:55
it But when you think about real high throughput scenarios, using database as
2:13:58
throughput scenarios, using database as
2:13:58
throughput scenarios, using database as a queue is probably not a good idea
2:13:59
a queue is probably not a good idea
2:14:00
a queue is probably not a good idea because it's also adding load to your
2:14:01
because it's also adding load to your
2:14:01
because it's also adding load to your own database service. Now we have our
2:14:04
own database service. Now we have our
2:14:04
own database service. Now we have our messaging queue in place. Suppose say
2:14:07
messaging queue in place. Suppose say
2:14:07
messaging queue in place. Suppose say for today I'm using database as the
2:14:09
for today I'm using database as the
2:14:09
for today I'm using database as the queue because that is the easiest to set
2:14:11
queue because that is the easiest to set
2:14:11
queue because that is the easiest to set up. But say if you are using rabbit Q or
2:14:14
up. But say if you are using rabbit Q or
2:14:14
up. But say if you are using rabbit Q or SQS or service bus or even database as
2:14:17
SQS or service bus or even database as
2:14:17
SQS or service bus or even database as the queue, how would you go about
2:14:19
the queue, how would you go about
2:14:19
the queue, how would you go about talking to it? Would you use the native
2:14:22
talking to it? Would you use the native
2:14:22
talking to it? Would you use the native client library? Not. Not really. Because
2:14:24
client library? Not. Not really. Because
2:14:24
client library? Not. Not really. Because there are so many things that you need
2:14:26
there are so many things that you need
2:14:26
there are so many things that you need to ask yourself when you go down this
2:14:29
to ask yourself when you go down this
2:14:29
to ask yourself when you go down this path. What patterns do you need to
2:14:31
path. What patterns do you need to
2:14:31
path. What patterns do you need to support? Is it send and receive and
2:14:33
support? Is it send and receive and
2:14:33
support? Is it send and receive and publish subscribe? Which one do you
2:14:35
publish subscribe? Which one do you
2:14:35
publish subscribe? Which one do you need? Because with publish subscribe,
2:14:37
need? Because with publish subscribe,
2:14:37
need? Because with publish subscribe, you're going down the even eventdriven
2:14:39
you're going down the even eventdriven
2:14:39
you're going down the even eventdriven architecture route. What is your average
2:14:41
architecture route. What is your average
2:14:41
architecture route. What is your average message size? Do you need large message
2:14:43
message size? Do you need large message
2:14:43
message size? Do you need large message support? What about the complex routing
2:14:45
support? What about the complex routing
2:14:45
support? What about the complex routing that you might need in place? Do you
2:14:47
that you might need in place? Do you
2:14:47
that you might need in place? Do you want to write things yourself? No. How
2:14:49
want to write things yourself? No. How
2:14:49
want to write things yourself? No. How about the message delivery order and the
2:14:51
about the message delivery order and the
2:14:51
about the message delivery order and the delivery guarantees? Are you after at
2:14:53
delivery guarantees? Are you after at
2:14:53
delivery guarantees? Are you after at least once, at most once or exactly once
2:14:55
least once, at most once or exactly once
2:14:56
least once, at most once or exactly once processing? What about data
2:14:57
processing? What about data
2:14:57
processing? What about data transactionality and the item potency of
2:14:59
transactionality and the item potency of
2:15:00
transactionality and the item potency of data? Surely you don't want to take
2:15:01
data? Surely you don't want to take
2:15:01
data? Surely you don't want to take payment twice. What about the
2:15:04
payment twice. What about the
2:15:04
payment twice. What about the throughput? Do you want managed service
2:15:06
throughput? Do you want managed service
2:15:06
throughput? Do you want managed service or self-hosted service? Are you after
2:15:08
or self-hosted service? Are you after
2:15:08
or self-hosted service? Are you after cloud native solutions to what local dev
2:15:11
cloud native solutions to what local dev
2:15:11
cloud native solutions to what local dev support you need? All these are things
2:15:13
support you need? All these are things
2:15:14
support you need? All these are things that you need to ask yourself. And on
2:15:17
that you need to ask yourself. And on
2:15:17
that you need to ask yourself. And on top of that, you need to be also
2:15:19
top of that, you need to be also
2:15:19
top of that, you need to be also thinking about a variety of patterns
2:15:21
thinking about a variety of patterns
2:15:21
thinking about a variety of patterns that I'm just going to talk to you
2:15:22
that I'm just going to talk to you
2:15:22
that I'm just going to talk to you about. Message routing, workflow,
2:15:25
about. Message routing, workflow,
2:15:25
about. Message routing, workflow, transactions, claim check pattern,
2:15:27
transactions, claim check pattern,
2:15:27
transactions, claim check pattern, serialization, retries, monitoring and
2:15:30
serialization, retries, monitoring and
2:15:30
serialization, retries, monitoring and alerting because it's a distributed
2:15:31
alerting because it's a distributed
2:15:32
alerting because it's a distributed system. All in all, you might end up
2:15:34
system. All in all, you might end up
2:15:34
system. All in all, you might end up writing all the patterns that you see on
2:15:36
writing all the patterns that you see on
2:15:36
writing all the patterns that you see on the screen. So, would you want to do
2:15:38
the screen. So, would you want to do
2:15:38
the screen. So, would you want to do that yourself or would you want to do it
2:15:41
that yourself or would you want to do it
2:15:41
that yourself or would you want to do it a different way? That is where me
2:15:43
a different way? That is where me
2:15:44
a different way? That is where me messaging middleware or messaging
2:15:45
messaging middleware or messaging
2:15:45
messaging middleware or messaging libraries come into play. There are many
2:15:48
libraries come into play. There are many
2:15:48
libraries come into play. There are many many options which I'll be talking about
2:15:50
many options which I'll be talking about
2:15:50
many options which I'll be talking about but I'm going to use the analogy of a
2:15:52
but I'm going to use the analogy of a
2:15:52
but I'm going to use the analogy of a car here. Suppose you want to uh have a
2:15:56
car here. Suppose you want to uh have a
2:15:56
car here. Suppose you want to uh have a new car with all the latest features out
2:15:58
new car with all the latest features out
2:15:58
new car with all the latest features out there. Would you go buy a car for
2:16:01
there. Would you go buy a car for
2:16:01
there. Would you go buy a car for yourself and use the amenities that it
2:16:03
yourself and use the amenities that it
2:16:03
yourself and use the amenities that it provides you with or decide hm this
2:16:06
provides you with or decide hm this
2:16:06
provides you with or decide hm this sounds fun. Let me actually build a car.
2:16:09
sounds fun. Let me actually build a car.
2:16:09
sounds fun. Let me actually build a car. You know trust me there are people who
2:16:11
You know trust me there are people who
2:16:11
You know trust me there are people who build a car but then you have to think
2:16:13
build a car but then you have to think
2:16:13
build a car but then you have to think about the roadworthiness of it. You have
2:16:15
about the roadworthiness of it. You have
2:16:15
about the roadworthiness of it. You have to consider the paperwork that goes
2:16:17
to consider the paperwork that goes
2:16:17
to consider the paperwork that goes behind it. Do you really want to be
2:16:19
behind it. Do you really want to be
2:16:19
behind it. Do you really want to be doing it? Of course there is the
2:16:20
doing it? Of course there is the
2:16:20
doing it? Of course there is the learning but then one of the key
2:16:22
learning but then one of the key
2:16:22
learning but then one of the key learnings at the end of it would be I
2:16:25
learnings at the end of it would be I
2:16:25
learnings at the end of it would be I don't want to do it ever again. I don't
2:16:26
don't want to do it ever again. I don't
2:16:26
don't want to do it ever again. I don't want to be servicing this car. It is
2:16:28
want to be servicing this car. It is
2:16:28
want to be servicing this car. It is going to sit as a car which is not going
2:16:30
going to sit as a car which is not going
2:16:30
going to sit as a car which is not going to be used on my driveway. I built that
2:16:33
to be used on my driveway. I built that
2:16:33
to be used on my driveway. I built that car. That is it. I don't want to be
2:16:34
car. That is it. I don't want to be
2:16:34
car. That is it. I don't want to be servicing it. So my point being do not
2:16:37
servicing it. So my point being do not
2:16:37
servicing it. So my point being do not reinvent the wheel. use one of these
2:16:39
reinvent the wheel. use one of these
2:16:39
reinvent the wheel. use one of these libraries and service bus, mass transit,
2:16:42
libraries and service bus, mass transit,
2:16:42
libraries and service bus, mass transit, writer, rebus, wolverine, all of these
2:16:44
writer, rebus, wolverine, all of these
2:16:44
writer, rebus, wolverine, all of these are messaging libraries. They all come
2:16:46
are messaging libraries. They all come
2:16:46
are messaging libraries. They all come with patterns that I just spoke about
2:16:49
with patterns that I just spoke about
2:16:49
with patterns that I just spoke about that has been built in. You can make use
2:16:51
that has been built in. You can make use
2:16:51
that has been built in. You can make use of those amenities yourself. So this
2:16:54
of those amenities yourself. So this
2:16:54
of those amenities yourself. So this helps you focus on the business code. In
2:16:56
helps you focus on the business code. In
2:16:56
helps you focus on the business code. In today's example, I'm going to be using N
2:16:58
today's example, I'm going to be using N
2:16:58
today's example, I'm going to be using N service plus because that is what I am
2:17:00
service plus because that is what I am
2:17:00
service plus because that is what I am used to. But regardless of that, feel
2:17:03
used to. But regardless of that, feel
2:17:04
used to. But regardless of that, feel free to use any of this because all the
2:17:06
free to use any of this because all the
2:17:06
free to use any of this because all the code that I show you, it is just the
2:17:07
code that I show you, it is just the
2:17:07
code that I show you, it is just the APIs that keep changing. The patterns
2:17:10
APIs that keep changing. The patterns
2:17:10
APIs that keep changing. The patterns are the same regardless of the library
2:17:12
are the same regardless of the library
2:17:12
are the same regardless of the library you use. So just putting it out there,
2:17:15
you use. So just putting it out there,
2:17:15
you use. So just putting it out there, do not reinvent the wheel because what
2:17:17
do not reinvent the wheel because what
2:17:17
do not reinvent the wheel because what you might end up writing is a cheaper
2:17:19
you might end up writing is a cheaper
2:17:19
you might end up writing is a cheaper version of one of these libraries that
2:17:22
version of one of these libraries that
2:17:22
version of one of these libraries that is going to cost you a fortune in the
2:17:25
is going to cost you a fortune in the
2:17:25
is going to cost you a fortune in the long run servicing and maintaining it.
2:17:27
long run servicing and maintaining it.
2:17:27
long run servicing and maintaining it. Save yourself from the headache because
2:17:28
Save yourself from the headache because
2:17:28
Save yourself from the headache because a distributed system is no mean feat. So
2:17:32
a distributed system is no mean feat. So
2:17:32
a distributed system is no mean feat. So time for some code now. So what we will
2:17:34
time for some code now. So what we will
2:17:34
time for some code now. So what we will discuss are these main points,
2:17:36
discuss are these main points,
2:17:36
discuss are these main points, endpoints, commands and pointto-point
2:17:37
endpoints, commands and pointto-point
2:17:38
endpoints, commands and pointto-point communication, events, publish and
2:17:39
communication, events, publish and
2:17:40
communication, events, publish and subscribe. We will see if we can extend
2:17:42
subscribe. We will see if we can extend
2:17:42
subscribe. We will see if we can extend our system if time permits and we'll
2:17:44
our system if time permits and we'll
2:17:44
our system if time permits and we'll also talk about recoverabilities and
2:17:47
also talk about recoverabilities and
2:17:47
also talk about recoverabilities and retries. So let's go to Ryder.
2:17:52
retries. So let's go to Ryder.
2:17:52
retries. So let's go to Ryder. What I have here is a solution with four
2:17:56
What I have here is a solution with four
2:17:56
What I have here is a solution with four projects. I have unloaded something. Let
2:17:58
projects. I have unloaded something. Let
2:17:58
projects. I have unloaded something. Let us bring that into picture when the time
2:18:00
us bring that into picture when the time
2:18:00
us bring that into picture when the time is ready. So the client UI is basically
2:18:03
is ready. So the client UI is basically
2:18:03
is ready. So the client UI is basically the website which is the web front end
2:18:05
the website which is the web front end
2:18:05
the website which is the web front end ASP.NET Core NBC application. Nothing
2:18:08
ASP.NET Core NBC application. Nothing
2:18:08
ASP.NET Core NBC application. Nothing too fancy about it. And I've got two
2:18:11
too fancy about it. And I've got two
2:18:11
too fancy about it. And I've got two services which is the sales endpoint and
2:18:13
services which is the sales endpoint and
2:18:13
services which is the sales endpoint and the billing endpoint. So in reality I
2:18:16
the billing endpoint. So in reality I
2:18:16
the billing endpoint. So in reality I might be hosting these as Windows
2:18:18
might be hosting these as Windows
2:18:18
might be hosting these as Windows services. the billing and the sales end
2:18:20
services. the billing and the sales end
2:18:20
services. the billing and the sales end points as Windows services or even as
2:18:22
points as Windows services or even as
2:18:22
points as Windows services or even as like an Azure web job. The client UI
2:18:24
like an Azure web job. The client UI
2:18:24
like an Azure web job. The client UI that is a website that could be hosted
2:18:26
that is a website that could be hosted
2:18:26
that is a website that could be hosted anywhere or even on Azure. So as I said
2:18:29
anywhere or even on Azure. So as I said
2:18:29
anywhere or even on Azure. So as I said I'm using N service bus because that is
2:18:31
I'm using N service bus because that is
2:18:31
I'm using N service bus because that is what I'm familiar with but feel free to
2:18:33
what I'm familiar with but feel free to
2:18:33
what I'm familiar with but feel free to use Transit or Wolverine or Rebus
2:18:36
use Transit or Wolverine or Rebus
2:18:36
use Transit or Wolverine or Rebus because the patterns just keep
2:18:37
because the patterns just keep
2:18:37
because the patterns just keep repeating. It's just the semantics and
2:18:39
repeating. It's just the semantics and
2:18:40
repeating. It's just the semantics and the APIs, the names of the APIs and the
2:18:41
the APIs, the names of the APIs and the
2:18:42
the APIs, the names of the APIs and the methods that keep changing. So in my
2:18:44
methods that keep changing. So in my
2:18:44
methods that keep changing. So in my controllers I have the home controller.
2:18:47
controllers I have the home controller.
2:18:47
controllers I have the home controller. there's a place order button. So if I
2:18:49
there's a place order button. So if I
2:18:49
there's a place order button. So if I just run this demo and show you what the
2:18:52
just run this demo and show you what the
2:18:52
just run this demo and show you what the web front end looks like, it is very
2:18:54
web front end looks like, it is very
2:18:54
web front end looks like, it is very simple and basic uh for this 35 minute
2:18:57
simple and basic uh for this 35 minute
2:18:57
simple and basic uh for this 35 minute session again. So I have this big button
2:19:00
session again. So I have this big button
2:19:00
session again. So I have this big button which places an order and it tells me
2:19:02
which places an order and it tells me
2:19:02
which places an order and it tells me that a order has been placed. So when
2:19:06
that a order has been placed. So when
2:19:06
that a order has been placed. So when that place order button is clicked, what
2:19:08
that place order button is clicked, what
2:19:08
that place order button is clicked, what happens is it goes and invokes this
2:19:11
happens is it goes and invokes this
2:19:11
happens is it goes and invokes this action method for me. So in in here I
2:19:14
action method for me. So in in here I
2:19:14
action method for me. So in in here I create a new order id and then I
2:19:17
create a new order id and then I
2:19:17
create a new order id and then I instantiate something of the type place
2:19:19
instantiate something of the type place
2:19:19
instantiate something of the type place order and I am sending that object that
2:19:22
order and I am sending that object that
2:19:22
order and I am sending that object that I've just created using something called
2:19:24
I've just created using something called
2:19:24
I've just created using something called message session. So what is actually
2:19:26
message session. So what is actually
2:19:26
message session. So what is actually happening? So message session is like an
2:19:28
happening? So message session is like an
2:19:28
happening? So message session is like an interface in n service bus that helps me
2:19:30
interface in n service bus that helps me
2:19:30
interface in n service bus that helps me do basic operations on the message like
2:19:32
do basic operations on the message like
2:19:32
do basic operations on the message like sending a message or publishing or
2:19:34
sending a message or publishing or
2:19:34
sending a message or publishing or receiving a message. Um and I am using
2:19:37
receiving a message. Um and I am using
2:19:37
receiving a message. Um and I am using that to send something. Now what is that
2:19:40
that to send something. Now what is that
2:19:40
that to send something. Now what is that something that I'm sending? So if we
2:19:42
something that I'm sending? So if we
2:19:42
something that I'm sending? So if we look at the place order class, it's a
2:19:45
look at the place order class, it's a
2:19:45
look at the place order class, it's a plain old CLR object which inherits from
2:19:48
plain old CLR object which inherits from
2:19:48
plain old CLR object which inherits from I command and this is what I'm sending.
2:19:51
I command and this is what I'm sending.
2:19:51
I command and this is what I'm sending. In reality, it'll be your entire request
2:19:54
In reality, it'll be your entire request
2:19:54
In reality, it'll be your entire request which contains all the details of the
2:19:56
which contains all the details of the
2:19:56
which contains all the details of the products and everything. That's one way
2:19:58
products and everything. That's one way
2:19:58
products and everything. That's one way of doing it. But inheriting from I
2:20:00
of doing it. But inheriting from I
2:20:00
of doing it. But inheriting from I command is telling the system that is
2:20:03
command is telling the system that is
2:20:03
command is telling the system that is it's telling an N service bus that hey
2:20:05
it's telling an N service bus that hey
2:20:05
it's telling an N service bus that hey this is a message. This needs needs to
2:20:07
this is a message. This needs needs to
2:20:07
this is a message. This needs needs to be treated like a command. Now in comes
2:20:10
be treated like a command. Now in comes
2:20:10
be treated like a command. Now in comes the concept of the two different types
2:20:12
the concept of the two different types
2:20:12
the concept of the two different types of message here. This is a command. A
2:20:15
of message here. This is a command. A
2:20:15
of message here. This is a command. A command is an instruction. So it is a
2:20:17
command is an instruction. So it is a
2:20:17
command is an instruction. So it is a very valuable method and me as a sender
2:20:20
very valuable method and me as a sender
2:20:20
very valuable method and me as a sender I expect someone to take action upon it.
2:20:24
I expect someone to take action upon it.
2:20:24
I expect someone to take action upon it. So if I expect someone to take action
2:20:26
So if I expect someone to take action
2:20:26
So if I expect someone to take action upon it and it is a high value thing I
2:20:28
upon it and it is a high value thing I
2:20:28
upon it and it is a high value thing I need to make sure that I know at least
2:20:31
need to make sure that I know at least
2:20:31
need to make sure that I know at least who is going to deal with it. So that
2:20:34
who is going to deal with it. So that
2:20:34
who is going to deal with it. So that also can be configured but as a sender I
2:20:37
also can be configured but as a sender I
2:20:37
also can be configured but as a sender I don't need to know whether that that
2:20:40
don't need to know whether that that
2:20:40
don't need to know whether that that receiving party or whoever is going to
2:20:41
receiving party or whoever is going to
2:20:42
receiving party or whoever is going to deal with my instruction is up and
2:20:43
deal with my instruction is up and
2:20:43
deal with my instruction is up and running or down or whatever. I just need
2:20:46
running or down or whatever. I just need
2:20:46
running or down or whatever. I just need to know that there is this someone who I
2:20:48
to know that there is this someone who I
2:20:48
to know that there is this someone who I need to send the instruction to who is
2:20:50
need to send the instruction to who is
2:20:50
need to send the instruction to who is going to do the work for me at some
2:20:52
going to do the work for me at some
2:20:52
going to do the work for me at some point. So using the message session I'm
2:20:55
point. So using the message session I'm
2:20:55
point. So using the message session I'm sending that command and how that
2:20:57
sending that command and how that
2:20:57
sending that command and how that sending is controlled in a centralized
2:21:00
sending is controlled in a centralized
2:21:00
sending is controlled in a centralized manner is from the program. uh CS. So
2:21:03
manner is from the program. uh CS. So
2:21:03
manner is from the program. uh CS. So here I have this API called route to
2:21:05
here I have this API called route to
2:21:05
here I have this API called route to endpoint where I say the type of place
2:21:08
endpoint where I say the type of place
2:21:08
endpoint where I say the type of place order classes or the objects of type
2:21:10
order classes or the objects of type
2:21:10
order classes or the objects of type place order the destination would be the
2:21:13
place order the destination would be the
2:21:13
place order the destination would be the sales for it the sales endpoint or the
2:21:15
sales for it the sales endpoint or the
2:21:15
sales for it the sales endpoint or the sales Q. So as you can see there is a
2:21:17
sales Q. So as you can see there is a
2:21:17
sales Q. So as you can see there is a website and it is talking directly just
2:21:20
website and it is talking directly just
2:21:20
website and it is talking directly just to the queue not the sales service it's
2:21:22
to the queue not the sales service it's
2:21:22
to the queue not the sales service it's the sales queue that it is talking to.
2:21:24
the sales queue that it is talking to.
2:21:24
the sales queue that it is talking to. So it centralizes all the connection for
2:21:27
So it centralizes all the connection for
2:21:27
So it centralizes all the connection for me. Um, and this is now also an endpoint
2:21:31
me. Um, and this is now also an endpoint
2:21:31
me. Um, and this is now also an endpoint because that is how we treat things in
2:21:33
because that is how we treat things in
2:21:33
because that is how we treat things in in service bus. An endpoint means it's a
2:21:35
in service bus. An endpoint means it's a
2:21:35
in service bus. An endpoint means it's a service that can send or receive
2:21:37
service that can send or receive
2:21:37
service that can send or receive messages. Um, and of course there is the
2:21:41
messages. Um, and of course there is the
2:21:41
messages. Um, and of course there is the the the uh configuration for the SQL
2:21:43
the the uh configuration for the SQL
2:21:43
the the uh configuration for the SQL transport which I'm using today and um a
2:21:46
transport which I'm using today and um a
2:21:46
transport which I'm using today and um a little bit of N service endpoint
2:21:48
little bit of N service endpoint
2:21:48
little bit of N service endpoint configuration. So that is the client UI
2:21:50
configuration. So that is the client UI
2:21:50
configuration. So that is the client UI which sends the message or sends the
2:21:53
which sends the message or sends the
2:21:53
which sends the message or sends the command. Now let us go and visit the
2:21:56
command. Now let us go and visit the
2:21:56
command. Now let us go and visit the sales service. So the sales service is
2:21:58
sales service. So the sales service is
2:21:58
sales service. So the sales service is where the place order instruction is
2:22:00
where the place order instruction is
2:22:00
where the place order instruction is received. So it needs to process that
2:22:03
received. So it needs to process that
2:22:03
received. So it needs to process that command and for that there is a class
2:22:05
command and for that there is a class
2:22:05
command and for that there is a class which uh which says that hey I am here
2:22:08
which uh which says that hey I am here
2:22:08
which uh which says that hey I am here to catch all the commands that you send
2:22:10
to catch all the commands that you send
2:22:10
to catch all the commands that you send of the type placeholder. Let me deal
2:22:12
of the type placeholder. Let me deal
2:22:12
of the type placeholder. Let me deal with it. So in the placeholder
2:22:15
with it. So in the placeholder
2:22:15
with it. So in the placeholder handler we have a class that inherits
2:22:18
handler we have a class that inherits
2:22:18
handler we have a class that inherits from I handle message messages of type
2:22:21
from I handle message messages of type
2:22:21
from I handle message messages of type T. So marking a class inheriting from I
2:22:24
T. So marking a class inheriting from I
2:22:24
T. So marking a class inheriting from I handle messages of the type placeholder
2:22:27
handle messages of the type placeholder
2:22:27
handle messages of the type placeholder say say is shouting out love to the
2:22:29
say say is shouting out love to the
2:22:29
say say is shouting out love to the system that I am here to handle all the
2:22:32
system that I am here to handle all the
2:22:32
system that I am here to handle all the commands or or all the messages of the
2:22:34
commands or or all the messages of the
2:22:34
commands or or all the messages of the type place order and inside my handler
2:22:39
type place order and inside my handler
2:22:39
type place order and inside my handler there's a handle method where I can get
2:22:41
there's a handle method where I can get
2:22:41
there's a handle method where I can get the message as well as the context. So
2:22:44
the message as well as the context. So
2:22:44
the message as well as the context. So if you think about HTTP context the
2:22:47
if you think about HTTP context the
2:22:48
if you think about HTTP context the iMessage handler context is something
2:22:49
iMessage handler context is something
2:22:49
iMessage handler context is something like that. It gives me access to the the
2:22:52
like that. It gives me access to the the
2:22:52
like that. It gives me access to the the context because this is a service that
2:22:54
context because this is a service that
2:22:54
context because this is a service that has been invoked by a message. With HTTP
2:22:57
has been invoked by a message. With HTTP
2:22:57
has been invoked by a message. With HTTP APIs, you are invoking using HTTP
2:23:00
APIs, you are invoking using HTTP
2:23:00
APIs, you are invoking using HTTP request. Here it is invoked using a
2:23:02
request. Here it is invoked using a
2:23:02
request. Here it is invoked using a message. So in here I can then do some
2:23:06
message. So in here I can then do some
2:23:06
message. So in here I can then do some business logic that is processing the
2:23:08
business logic that is processing the
2:23:08
business logic that is processing the order or saving it to the database in
2:23:10
order or saving it to the database in
2:23:10
order or saving it to the database in this instance. And then we have some
2:23:13
this instance. And then we have some
2:23:13
this instance. And then we have some interesting things happening. If you see
2:23:15
interesting things happening. If you see
2:23:15
interesting things happening. If you see here there is another object called
2:23:17
here there is another object called
2:23:17
here there is another object called order placed being instantiated.
2:23:20
order placed being instantiated.
2:23:20
order placed being instantiated. And I'm using the context API, the
2:23:22
And I'm using the context API, the
2:23:22
And I'm using the context API, the publish API and the context to publish
2:23:25
publish API and the context to publish
2:23:25
publish API and the context to publish it. Here I'm not sending, I am
2:23:27
it. Here I'm not sending, I am
2:23:27
it. Here I'm not sending, I am publishing it. So what is the
2:23:28
publishing it. So what is the
2:23:28
publishing it. So what is the difference? So this is an event. Event
2:23:31
difference? So this is an event. Event
2:23:31
difference? So this is an event. Event is like letting uh letting the world
2:23:33
is like letting uh letting the world
2:23:33
is like letting uh letting the world know that something has happened. While
2:23:35
know that something has happened. While
2:23:35
know that something has happened. While command is an instruction that says do
2:23:38
command is an instruction that says do
2:23:38
command is an instruction that says do this. Event is like something happened.
2:23:41
this. Event is like something happened.
2:23:41
this. Event is like something happened. I have done it. So the sales endpoint or
2:23:44
I have done it. So the sales endpoint or
2:23:44
I have done it. So the sales endpoint or the sales service is saying that yep I
2:23:46
the sales service is saying that yep I
2:23:46
the sales service is saying that yep I have saved the order to the database. my
2:23:49
have saved the order to the database. my
2:23:49
have saved the order to the database. my job is done. I am just letting others
2:23:51
job is done. I am just letting others
2:23:51
job is done. I am just letting others know that I have done my job so that
2:23:53
know that I have done my job so that
2:23:53
know that I have done my job so that others can pick up on what is left to
2:23:55
others can pick up on what is left to
2:23:55
others can pick up on what is left to do. So as you can see here there's just
2:23:57
do. So as you can see here there's just
2:23:58
do. So as you can see here there's just one responsibility residing on the sales
2:24:00
one responsibility residing on the sales
2:24:00
one responsibility residing on the sales service which is creating that order in
2:24:03
service which is creating that order in
2:24:03
service which is creating that order in the database. So another thing to note
2:24:06
the database. So another thing to note
2:24:06
the database. So another thing to note here is that the order placed event is
2:24:09
here is that the order placed event is
2:24:09
here is that the order placed event is again very lightweight. In reality it
2:24:11
again very lightweight. In reality it
2:24:11
again very lightweight. In reality it might be different but the order placed
2:24:14
might be different but the order placed
2:24:14
might be different but the order placed inherits from I event which lets the
2:24:16
inherits from I event which lets the
2:24:16
inherits from I event which lets the system know that this is an event. Now
2:24:17
system know that this is an event. Now
2:24:17
system know that this is an event. Now if you look at the semantics of a
2:24:19
if you look at the semantics of a
2:24:19
if you look at the semantics of a command and event the event semantic is
2:24:23
command and event the event semantic is
2:24:23
command and event the event semantic is a noun plus a verb in past tense and for
2:24:26
a noun plus a verb in past tense and for
2:24:26
a noun plus a verb in past tense and for command is like a verb in present tense
2:24:30
command is like a verb in present tense
2:24:30
command is like a verb in present tense plus a noun. So so that this way you can
2:24:33
plus a noun. So so that this way you can
2:24:33
plus a noun. So so that this way you can easily make out which is a command which
2:24:35
easily make out which is a command which
2:24:35
easily make out which is a command which is an event without even going to the uh
2:24:37
is an event without even going to the uh
2:24:37
is an event without even going to the uh without even going inside the class and
2:24:39
without even going inside the class and
2:24:39
without even going inside the class and speaking into the class. So so something
2:24:41
speaking into the class. So so something
2:24:41
speaking into the class. So so something like a best practice. So now we have
2:24:43
like a best practice. So now we have
2:24:43
like a best practice. So now we have published the event and if you look at
2:24:45
published the event and if you look at
2:24:45
published the event and if you look at program.cs is I'm not talking to anyone
2:24:48
program.cs is I'm not talking to anyone
2:24:48
program.cs is I'm not talking to anyone right because that is because this is an
2:24:50
right because that is because this is an
2:24:50
right because that is because this is an event I just need to let the world know
2:24:53
event I just need to let the world know
2:24:53
event I just need to let the world know whether someone will listen to me how
2:24:55
whether someone will listen to me how
2:24:55
whether someone will listen to me how many listeners will be there I don't
2:24:58
many listeners will be there I don't
2:24:58
many listeners will be there I don't care I just need to let the world know
2:24:59
care I just need to let the world know
2:25:00
care I just need to let the world know it is like me talking to you it's like a
2:25:01
it is like me talking to you it's like a
2:25:01
it is like me talking to you it's like a broadcast there could be one or many
2:25:04
broadcast there could be one or many
2:25:04
broadcast there could be one or many listeners and those listeners are called
2:25:06
listeners and those listeners are called
2:25:06
listeners and those listeners are called subscribers and this is the basic of
2:25:09
subscribers and this is the basic of
2:25:09
subscribers and this is the basic of event-driven architecture what we are
2:25:10
event-driven architecture what we are
2:25:10
event-driven architecture what we are doing as a pattern is publish subscribe
2:25:12
doing as a pattern is publish subscribe
2:25:12
doing as a pattern is publish subscribe and this is the basics of the
2:25:13
and this is the basics of the
2:25:13
and this is the basics of the event-driven architecture And the beauty
2:25:16
event-driven architecture And the beauty
2:25:16
event-driven architecture And the beauty with event- driven architecture that is
2:25:17
with event- driven architecture that is
2:25:17
with event- driven architecture that is that we get the space to extend the
2:25:20
that we get the space to extend the
2:25:20
that we get the space to extend the system easily because we can bring in
2:25:22
system easily because we can bring in
2:25:22
system easily because we can bring in more subscribers without affecting the
2:25:24
more subscribers without affecting the
2:25:24
more subscribers without affecting the system as a whole. Now how do we handle
2:25:27
system as a whole. Now how do we handle
2:25:27
system as a whole. Now how do we handle this order placed event that is getting
2:25:30
this order placed event that is getting
2:25:30
this order placed event that is getting done in the billing endpoint or the
2:25:32
done in the billing endpoint or the
2:25:32
done in the billing endpoint or the billing service. Here we have a handler
2:25:35
billing service. Here we have a handler
2:25:35
billing service. Here we have a handler again which inherits from I handle
2:25:36
again which inherits from I handle
2:25:36
again which inherits from I handle messages of type T which is order
2:25:39
messages of type T which is order
2:25:39
messages of type T which is order placed. In the handle method I can again
2:25:41
placed. In the handle method I can again
2:25:42
placed. In the handle method I can again do some business logic and then at the
2:25:44
do some business logic and then at the
2:25:44
do some business logic and then at the end I might send another command or
2:25:46
end I might send another command or
2:25:46
end I might send another command or publish another event that is also
2:25:47
publish another event that is also
2:25:48
publish another event that is also possible. Now let us see the demo in
2:25:50
possible. Now let us see the demo in
2:25:50
possible. Now let us see the demo in action. Yeah that's what does not ups.
2:25:56
action. Yeah that's what does not ups.
2:25:56
action. Yeah that's what does not ups. So let me bring up the for the run
2:25:59
So let me bring up the for the run
2:25:59
So let me bring up the for the run window. So I have the client UI here.
2:26:04
I'm going to place a few orders. Um just
2:26:07
I'm going to place a few orders. Um just
2:26:07
I'm going to place a few orders. Um just let us start with one to begin with that
2:26:09
let us start with one to begin with that
2:26:09
let us start with one to begin with that is CFB4 is the starting. If I look at
2:26:12
is CFB4 is the starting. If I look at
2:26:12
is CFB4 is the starting. If I look at the sales it has received the place or
2:26:15
the sales it has received the place or
2:26:15
the sales it has received the place or uh place order instruction. So if I look
2:26:17
uh place order instruction. So if I look
2:26:17
uh place order instruction. So if I look at the client UI to begin with I'm
2:26:19
at the client UI to begin with I'm
2:26:19
at the client UI to begin with I'm sending the command for the order ID
2:26:21
sending the command for the order ID
2:26:21
sending the command for the order ID CFD4. The sales receives it and then
2:26:24
CFD4. The sales receives it and then
2:26:24
CFD4. The sales receives it and then publishes the event for the order ID and
2:26:27
publishes the event for the order ID and
2:26:27
publishes the event for the order ID and in the billing I have now received the
2:26:31
in the billing I have now received the
2:26:31
in the billing I have now received the order placed and I can move on and do
2:26:33
order placed and I can move on and do
2:26:33
order placed and I can move on and do other things. Now we spoke about
2:26:35
other things. Now we spoke about
2:26:35
other things. Now we spoke about extending the system right. So I have
2:26:38
extending the system right. So I have
2:26:38
extending the system right. So I have another service that I have just hidden
2:26:40
another service that I have just hidden
2:26:40
another service that I have just hidden here. I'm going to load the project and
2:26:43
here. I'm going to load the project and
2:26:43
here. I'm going to load the project and then I am going to run this as well. So
2:26:45
then I am going to run this as well. So
2:26:45
then I am going to run this as well. So right now it is not running at all. I'm
2:26:48
right now it is not running at all. I'm
2:26:48
right now it is not running at all. I'm just going to run this again. This is a
2:26:51
just going to run this again. This is a
2:26:51
just going to run this again. This is a simple handler which handles the order
2:26:54
simple handler which handles the order
2:26:54
simple handler which handles the order placed.
2:26:56
placed.
2:26:56
placed. And if I run this
2:26:58
And if I run this
2:26:58
And if I run this now, that should also
2:27:07
run. Uh, give me a
2:27:11
run. Uh, give me a
2:27:11
run. Uh, give me a minute. I think this is up and running.
2:27:13
minute. I think this is up and running.
2:27:13
minute. I think this is up and running. Now, if I go and place a few other
2:27:15
Now, if I go and place a few other
2:27:15
Now, if I go and place a few other orders, I should see that the shipping
2:27:18
orders, I should see that the shipping
2:27:18
orders, I should see that the shipping or endpoint should receive some of the
2:27:20
or endpoint should receive some of the
2:27:20
or endpoint should receive some of the messages as well from the past. So we
2:27:23
messages as well from the past. So we
2:27:23
messages as well from the past. So we have extended our system without
2:27:25
have extended our system without
2:27:25
have extended our system without impacting the system as a whole. Now
2:27:27
impacting the system as a whole. Now
2:27:27
impacting the system as a whole. Now what if one of the endpoints is down? It
2:27:29
what if one of the endpoints is down? It
2:27:29
what if one of the endpoints is down? It has a bug. What happens behind the
2:27:32
has a bug. What happens behind the
2:27:32
has a bug. What happens behind the scenes? That is when the recoverability
2:27:34
scenes? That is when the recoverability
2:27:34
scenes? That is when the recoverability and the retries come in. So let us go
2:27:36
and the retries come in. So let us go
2:27:36
and the retries come in. So let us go and introduce a bug into our sales end
2:27:38
and introduce a bug into our sales end
2:27:38
and introduce a bug into our sales end point. But by just throwing an
2:27:40
point. But by just throwing an
2:27:40
point. But by just throwing an exception. So we just stop this and then
2:27:44
exception. So we just stop this and then
2:27:44
exception. So we just stop this and then run it all.
2:27:51
So the sales endpoint is completely
2:27:53
So the sales endpoint is completely
2:27:53
So the sales endpoint is completely failing at the moment because I have
2:27:55
failing at the moment because I have
2:27:55
failing at the moment because I have introduced a bug
2:27:57
introduced a bug
2:27:57
introduced a bug but that doesn't prevent the UI from
2:28:00
but that doesn't prevent the UI from
2:28:00
but that doesn't prevent the UI from working. I have placed a few orders now
2:28:04
working. I have placed a few orders now
2:28:04
working. I have placed a few orders now and the client UI must have sent a few
2:28:07
and the client UI must have sent a few
2:28:07
and the client UI must have sent a few messages. But when it comes to sales, it
2:28:10
messages. But when it comes to sales, it
2:28:10
messages. But when it comes to sales, it keeps on failing. So now what happens is
2:28:13
keeps on failing. So now what happens is
2:28:13
keeps on failing. So now what happens is in the sales I've got some
2:28:15
in the sales I've got some
2:28:15
in the sales I've got some recoverability in place. This is
2:28:17
recoverability in place. This is
2:28:17
recoverability in place. This is something that you would add to every
2:28:18
something that you would add to every
2:28:18
something that you would add to every endpoint. And with the recoverability,
2:28:20
endpoint. And with the recoverability,
2:28:20
endpoint. And with the recoverability, it says that hey when you have an error,
2:28:23
it says that hey when you have an error,
2:28:23
it says that hey when you have an error, retry it. And when the first retry
2:28:26
retry it. And when the first retry
2:28:26
retry it. And when the first retry fails, then back off exponentially 2
2:28:29
fails, then back off exponentially 2
2:28:29
fails, then back off exponentially 2 seconds, 4 seconds and so on till the
2:28:32
seconds, 4 seconds and so on till the
2:28:32
seconds, 4 seconds and so on till the point you cannot do it anymore. And then
2:28:35
point you cannot do it anymore. And then
2:28:35
point you cannot do it anymore. And then what you do is you don't sit and do
2:28:37
what you do is you don't sit and do
2:28:37
what you do is you don't sit and do anything. you move that message into
2:28:40
anything. you move that message into
2:28:40
anything. you move that message into into another queue called as the error
2:28:42
into another queue called as the error
2:28:42
into another queue called as the error queue and that is what is going on here.
2:28:45
queue and that is what is going on here.
2:28:45
queue and that is what is going on here. I think it retries for like three times
2:28:47
I think it retries for like three times
2:28:48
I think it retries for like three times before it completely backs off and moves
2:28:50
before it completely backs off and moves
2:28:50
before it completely backs off and moves the message into the queue. So if you
2:28:52
the message into the queue. So if you
2:28:52
the message into the queue. So if you look here there should be some messages
2:28:54
look here there should be some messages
2:28:54
look here there should be some messages in the monitoring area which I'm just
2:28:56
in the monitoring area which I'm just
2:28:56
in the monitoring area which I'm just going to show to you right now.
2:29:03
Let me bring that up here.
2:29:08
I should see a few failed messages. So
2:29:12
I should see a few failed messages. So
2:29:12
I should see a few failed messages. So if you look here, there is a message
2:29:14
if you look here, there is a message
2:29:14
if you look here, there is a message that has failed with the message
2:29:16
that has failed with the message
2:29:16
that has failed with the message body
2:29:17
body
2:29:17
body file. And that is indeed one of the
2:29:20
file. And that is indeed one of the
2:29:20
file. And that is indeed one of the messages that was sent by our
2:29:25
messages that was sent by our
2:29:25
messages that was sent by our client UI here. So at this point sales
2:29:27
client UI here. So at this point sales
2:29:27
client UI here. So at this point sales is failing but the client UI is up and
2:29:30
is failing but the client UI is up and
2:29:30
is failing but the client UI is up and running. So now let us simulate the
2:29:32
running. So now let us simulate the
2:29:32
running. So now let us simulate the scenario where we have gone and fixed
2:29:34
scenario where we have gone and fixed
2:29:34
scenario where we have gone and fixed the bug.
2:29:36
the bug.
2:29:36
the bug. Yeah. So here we are in the placeholder
2:29:38
Yeah. So here we are in the placeholder
2:29:38
Yeah. So here we are in the placeholder handler again. We have fixed the bug and
2:29:41
handler again. We have fixed the bug and
2:29:41
handler again. We have fixed the bug and we are running the app again.
2:29:44
we are running the app again.
2:29:44
we are running the app again. And now what I can do is when things are
2:29:46
And now what I can do is when things are
2:29:46
And now what I can do is when things are up and running I can go back to the
2:29:49
up and running I can go back to the
2:29:49
up and running I can go back to the monitoring area and then start uh
2:29:52
monitoring area and then start uh
2:29:52
monitoring area and then start uh retrying my messages the failed
2:29:54
retrying my messages the failed
2:29:54
retrying my messages the failed messages. So I can go into here
2:30:00
definitely not in the console in service
2:30:03
definitely not in the console in service
2:30:03
definitely not in the console in service and I can see failed messages. I I can
2:30:05
and I can see failed messages. I I can
2:30:05
and I can see failed messages. I I can go into one and I say retry this
2:30:07
go into one and I say retry this
2:30:07
go into one and I say retry this message. Yes, I want to retry this
2:30:09
message. Yes, I want to retry this
2:30:09
message. Yes, I want to retry this message. So it is getting retrieded. Now
2:30:11
message. So it is getting retrieded. Now
2:30:11
message. So it is getting retrieded. Now if I go into sales I should see that it
2:30:14
if I go into sales I should see that it
2:30:14
if I go into sales I should see that it is going to try and pick up the message
2:30:16
is going to try and pick up the message
2:30:16
is going to try and pick up the message that just failed.
2:30:18
that just failed.
2:30:18
that just failed. So let us see.
2:30:23
Come on. Yeah.
2:30:26
Come on. Yeah.
2:30:26
Come on. Yeah. Yeah. Yeah. Because we don't Yeah. You
2:30:29
Yeah. Yeah. Because we don't Yeah. You
2:30:29
Yeah. Yeah. Because we don't Yeah. You just retry. I can send you I can export
2:30:32
just retry. I can send you I can export
2:30:32
just retry. I can send you I can export this whatever they are. But I mean we
2:30:35
this whatever they are. But I mean we
2:30:35
this whatever they are. But I mean we don't get tickets for these. Yeah. I
2:30:36
don't get tickets for these. Yeah. I
2:30:36
don't get tickets for these. Yeah. I mean security is not bothered. There you
2:30:38
mean security is not bothered. There you
2:30:38
mean security is not bothered. There you go. So the message with the message
2:30:42
go. So the message with the message
2:30:42
go. So the message with the message body PFI CE that has been retrieded and
2:30:46
body PFI CE that has been retrieded and
2:30:46
body PFI CE that has been retrieded and the order has been the order placed
2:30:48
the order has been the order placed
2:30:48
the order has been the order placed event has been published and then the
2:30:50
event has been published and then the
2:30:50
event has been published and then the billing can receive it and the shipping
2:30:52
billing can receive it and the shipping
2:30:52
billing can receive it and the shipping can receive it. So the idea is that you
2:30:55
can receive it. So the idea is that you
2:30:55
can receive it. So the idea is that you can extend the system and even if there
2:30:57
can extend the system and even if there
2:30:57
can extend the system and even if there are failures the request is safely and
2:31:00
are failures the request is safely and
2:31:00
are failures the request is safely and durably stored somewhere be it the error
2:31:02
durably stored somewhere be it the error
2:31:02
durably stored somewhere be it the error Q so that you can bring things back up
2:31:04
Q so that you can bring things back up
2:31:04
Q so that you can bring things back up and retry it. So you're not losing any
2:31:07
and retry it. So you're not losing any
2:31:07
and retry it. So you're not losing any message. You are building that
2:31:09
message. You are building that
2:31:09
message. You are building that difference in place so that nothing is
2:31:10
difference in place so that nothing is
2:31:10
difference in place so that nothing is lost. Similarly, we can select all and
2:31:13
lost. Similarly, we can select all and
2:31:13
lost. Similarly, we can select all and retry and it should all go through
2:31:15
retry and it should all go through
2:31:16
retry and it should all go through without overwhelming the system or it
2:31:18
without overwhelming the system or it
2:31:18
without overwhelming the system or it should at least if processed one by
2:31:22
one. So we shall see that in action any
2:31:25
one. So we shall see that in action any
2:31:25
one. So we shall see that in action any minute. So I'm just going to move on and
2:31:28
minute. So I'm just going to move on and
2:31:28
minute. So I'm just going to move on and we can come back to it and visit the
2:31:30
we can come back to it and visit the
2:31:30
we can come back to it and visit the logs later. So we discussed all of this
2:31:32
logs later. So we discussed all of this
2:31:32
logs later. So we discussed all of this endpoints commands and pointto-point
2:31:34
endpoints commands and pointto-point
2:31:34
endpoints commands and pointto-point communication events in publish and
2:31:36
communication events in publish and
2:31:36
communication events in publish and subscribe. We saw about how you can
2:31:37
subscribe. We saw about how you can
2:31:38
subscribe. We saw about how you can extend your system without impacting the
2:31:39
extend your system without impacting the
2:31:39
extend your system without impacting the rest of the system. We saw about
2:31:41
rest of the system. We saw about
2:31:41
rest of the system. We saw about recoverability and retries. So we have
2:31:44
recoverability and retries. So we have
2:31:44
recoverability and retries. So we have moved on from that very monolithic
2:31:47
moved on from that very monolithic
2:31:47
moved on from that very monolithic architecture to something like this. So
2:31:48
architecture to something like this. So
2:31:48
architecture to something like this. So you have the client UI which publishes
2:31:51
you have the client UI which publishes
2:31:51
you have the client UI which publishes sorry not publishes it sends a command
2:31:53
sorry not publishes it sends a command
2:31:53
sorry not publishes it sends a command saying place order to the sales
2:31:55
saying place order to the sales
2:31:55
saying place order to the sales endpoint. The sales endpoint then
2:31:57
endpoint. The sales endpoint then
2:31:57
endpoint. The sales endpoint then publishes an event called order placed
2:32:00
publishes an event called order placed
2:32:00
publishes an event called order placed which is consumed by both billing and
2:32:02
which is consumed by both billing and
2:32:02
which is consumed by both billing and shipping. And here it gets interesting
2:32:05
shipping. And here it gets interesting
2:32:05
shipping. And here it gets interesting because the billing can then produce
2:32:07
because the billing can then produce
2:32:07
because the billing can then produce further events to say I have built the
2:32:09
further events to say I have built the
2:32:09
further events to say I have built the order. At which point the shipping can
2:32:11
order. At which point the shipping can
2:32:12
order. At which point the shipping can chip in and say you have placed the
2:32:13
chip in and say you have placed the
2:32:13
chip in and say you have placed the order, the order is confirmed, you have
2:32:16
order, the order is confirmed, you have
2:32:16
order, the order is confirmed, you have built the order. um I might also want to
2:32:19
built the order. um I might also want to
2:32:19
built the order. um I might also want to wait for the say the the stock service
2:32:21
wait for the say the the stock service
2:32:21
wait for the say the the stock service to come back and tell me that there is
2:32:23
to come back and tell me that there is
2:32:23
to come back and tell me that there is enough stock so that I can start the
2:32:25
enough stock so that I can start the
2:32:25
enough stock so that I can start the shipping. So that is a very complicated
2:32:28
shipping. So that is a very complicated
2:32:28
shipping. So that is a very complicated thing happening behind the scenes and
2:32:29
thing happening behind the scenes and
2:32:29
thing happening behind the scenes and that is yet another integration pattern
2:32:31
that is yet another integration pattern
2:32:31
that is yet another integration pattern called the saga pattern which you might
2:32:33
called the saga pattern which you might
2:32:33
called the saga pattern which you might want to invest and investigate and that
2:32:36
want to invest and investigate and that
2:32:36
want to invest and investigate and that is used for having uh or creating
2:32:38
is used for having uh or creating
2:32:38
is used for having uh or creating workflows. Further, the billing might uh
2:32:42
workflows. Further, the billing might uh
2:32:42
workflows. Further, the billing might uh publish the the same order build event
2:32:44
publish the the same order build event
2:32:44
publish the the same order build event that the billing published. It might be
2:32:46
that the billing published. It might be
2:32:46
that the billing published. It might be used by the email service to pick up the
2:32:48
used by the email service to pick up the
2:32:48
used by the email service to pick up the fact that a confirmation email needs to
2:32:50
fact that a confirmation email needs to
2:32:50
fact that a confirmation email needs to go on to the customer. And finally, the
2:32:53
go on to the customer. And finally, the
2:32:53
go on to the customer. And finally, the order build that could be picked up by
2:32:55
order build that could be picked up by
2:32:55
order build that could be picked up by the customer loyalty service to say that
2:32:57
the customer loyalty service to say that
2:32:57
the customer loyalty service to say that yep uh I haveated the customer
2:33:02
yep uh I haveated the customer
2:33:02
yep uh I haveated the customer loyalty database or the details of the
2:33:05
loyalty database or the details of the
2:33:05
loyalty database or the details of the customer as well. So all in all if you
2:33:07
customer as well. So all in all if you
2:33:07
customer as well. So all in all if you see you are moving closer to your
2:33:09
see you are moving closer to your
2:33:09
see you are moving closer to your business domain with such a kind of
2:33:11
business domain with such a kind of
2:33:11
business domain with such a kind of architecture at play. Now talking about
2:33:13
architecture at play. Now talking about
2:33:13
architecture at play. Now talking about where you would see such messaged
2:33:15
where you would see such messaged
2:33:15
where you would see such messaged architectures at place um when you have
2:33:18
architectures at place um when you have
2:33:18
architectures at place um when you have communication between services when you
2:33:20
communication between services when you
2:33:20
communication between services when you want modules in modular monoliths
2:33:22
want modules in modular monoliths
2:33:22
want modules in modular monoliths communicating with each other you can
2:33:24
communicating with each other you can
2:33:24
communicating with each other you can investigate into message message to an
2:33:26
investigate into message message to an
2:33:26
investigate into message message to an architecture. In real life you would see
2:33:29
architecture. In real life you would see
2:33:29
architecture. In real life you would see such architectures at play. industrial
2:33:31
such architectures at play. industrial
2:33:31
such architectures at play. industrial automation, health care system, sorry,
2:33:34
automation, health care system, sorry,
2:33:34
automation, health care system, sorry, uh banking and finance, anywhere you
2:33:37
uh banking and finance, anywhere you
2:33:37
uh banking and finance, anywhere you want to have high throughput, high
2:33:40
want to have high throughput, high
2:33:40
want to have high throughput, high performance scenarios, mission critical
2:33:42
performance scenarios, mission critical
2:33:42
performance scenarios, mission critical systems, messaging architecture can
2:33:44
systems, messaging architecture can
2:33:44
systems, messaging architecture can widely help there. And if you are
2:33:47
widely help there. And if you are
2:33:47
widely help there. And if you are thinking about message messaging
2:33:48
thinking about message messaging
2:33:48
thinking about message messaging architecture, these are some scenarios
2:33:50
architecture, these are some scenarios
2:33:50
architecture, these are some scenarios where you shouldn't be using them. CUD
2:33:52
where you shouldn't be using them. CUD
2:33:52
where you shouldn't be using them. CUD applications when you need request
2:33:54
applications when you need request
2:33:54
applications when you need request response or even realtime
2:33:58
response or even realtime
2:33:58
response or even realtime application. Uh now revisiting the
2:34:01
application. Uh now revisiting the
2:34:01
application. Uh now revisiting the policies of distributed computing what
2:34:03
policies of distributed computing what
2:34:03
policies of distributed computing what is the verdict? How does messaging fare?
2:34:06
is the verdict? How does messaging fare?
2:34:06
is the verdict? How does messaging fare? So network is reliable. We embrace
2:34:08
So network is reliable. We embrace
2:34:08
So network is reliable. We embrace failure by design by introducing durable
2:34:11
failure by design by introducing durable
2:34:11
failure by design by introducing durable storage retries and DLQs. Uh with the
2:34:14
storage retries and DLQs. Uh with the
2:34:14
storage retries and DLQs. Uh with the latency we have introduced async
2:34:16
latency we have introduced async
2:34:16
latency we have introduced async processing and we have decoupled time.
2:34:19
processing and we have decoupled time.
2:34:19
processing and we have decoupled time. There's nothing called a instant
2:34:21
There's nothing called a instant
2:34:21
There's nothing called a instant processing. It is all eventually
2:34:23
processing. It is all eventually
2:34:23
processing. It is all eventually consistent data.
2:34:25
consistent data.
2:34:25
consistent data. We are tackling bandwidth by achieving
2:34:27
We are tackling bandwidth by achieving
2:34:27
We are tackling bandwidth by achieving some load leveling because backend
2:34:29
some load leveling because backend
2:34:29
some load leveling because backend systems could process at a normal rate
2:34:31
systems could process at a normal rate
2:34:31
systems could process at a normal rate while the the client UI alone is scaled.
2:34:34
while the the client UI alone is scaled.
2:34:34
while the the client UI alone is scaled. So there's load leveling
2:34:37
So there's load leveling
2:34:37
So there's load leveling happening. The network is secure because
2:34:39
happening. The network is secure because
2:34:39
happening. The network is secure because all the message brokers they take care
2:34:42
all the message brokers they take care
2:34:42
all the message brokers they take care of TLS encryption of inflight services
2:34:45
of TLS encryption of inflight services
2:34:45
of TLS encryption of inflight services and with fine grain services the attack
2:34:48
and with fine grain services the attack
2:34:48
and with fine grain services the attack surface is also
2:34:50
surface is also
2:34:50
surface is also reduced with the topology that doesn't
2:34:52
reduced with the topology that doesn't
2:34:52
reduced with the topology that doesn't change. We saw that we can evolve with
2:34:54
change. We saw that we can evolve with
2:34:54
change. We saw that we can evolve with minimal disruption. We can take entire
2:34:57
minimal disruption. We can take entire
2:34:57
minimal disruption. We can take entire consumers down for maintaining and
2:34:59
consumers down for maintaining and
2:34:59
consumers down for maintaining and servicing and that doesn't impact the
2:35:01
servicing and that doesn't impact the
2:35:01
servicing and that doesn't impact the entire system at all. We we can have
2:35:05
entire system at all. We we can have
2:35:05
entire system at all. We we can have different teams working on different
2:35:06
different teams working on different
2:35:06
different teams working on different part parts of the distributed system and
2:35:09
part parts of the distributed system and
2:35:09
part parts of the distributed system and they they all can work independently and
2:35:11
they they all can work independently and
2:35:12
they they all can work independently and have team
2:35:13
have team
2:35:13
have team autonomy. We can scale just the
2:35:16
autonomy. We can scale just the
2:35:16
autonomy. We can scale just the necessary services and deal with the
2:35:18
necessary services and deal with the
2:35:18
necessary services and deal with the spikes. For example, you could just
2:35:19
spikes. For example, you could just
2:35:19
spikes. For example, you could just scale the client UI alone to have
2:35:22
scale the client UI alone to have
2:35:22
scale the client UI alone to have multiple instances for the userfacing
2:35:24
multiple instances for the userfacing
2:35:24
multiple instances for the userfacing fend and then the backend services could
2:35:27
fend and then the backend services could
2:35:27
fend and then the backend services could be just one instant and keep processing
2:35:29
be just one instant and keep processing
2:35:29
be just one instant and keep processing data at a normal normal pace achieving
2:35:32
data at a normal normal pace achieving
2:35:32
data at a normal normal pace achieving load
2:35:33
load
2:35:33
load leveling and we have an inherently
2:35:36
leveling and we have an inherently
2:35:36
leveling and we have an inherently polygot friendly architecture in place
2:35:38
polygot friendly architecture in place
2:35:38
polygot friendly architecture in place because the underlying uh protocols like
2:35:41
because the underlying uh protocols like
2:35:41
because the underlying uh protocols like AMQP and MQTT they are language agnostic
2:35:44
AMQP and MQTT they are language agnostic
2:35:44
AMQP and MQTT they are language agnostic and enables communication across
2:35:45
and enables communication across
2:35:46
and enables communication across different platforms. It doesn't solve
2:35:48
different platforms. It doesn't solve
2:35:48
different platforms. It doesn't solve all the problems. What what messaging
2:35:50
all the problems. What what messaging
2:35:50
all the problems. What what messaging helps you is confront the policies early
2:35:53
helps you is confront the policies early
2:35:53
helps you is confront the policies early on and these policies as they are. You
2:35:56
on and these policies as they are. You
2:35:56
on and these policies as they are. You are forced to ask yourself those
2:35:58
are forced to ask yourself those
2:35:58
are forced to ask yourself those questions early on to mitigate the
2:36:00
questions early on to mitigate the
2:36:00
questions early on to mitigate the risks. So that is it from me today. That
2:36:02
risks. So that is it from me today. That
2:36:02
risks. So that is it from me today. That is the QR code to my resources and my
2:36:07
is the QR code to my resources and my
2:36:07
is the QR code to my resources and my resource link as well. And if you want
2:36:09
resource link as well. And if you want
2:36:09
resource link as well. And if you want to reach out to me, feel free to reach
2:36:11
to reach out to me, feel free to reach
2:36:11
to reach out to me, feel free to reach out to me at Purima. Thank you and thank
2:36:13
out to me at Purima. Thank you and thank
2:36:14
out to me at Purima. Thank you and thank you once again for having me as a
2:36:15
you once again for having me as a
2:36:15
you once again for having me as a speaker.
2:36:18
speaker.
2:36:18
speaker. Wow, you you really need to, you know,
2:36:20
Wow, you you really need to, you know,
2:36:20
Wow, you you really need to, you know, get a glass of water, Bunima, because
2:36:22
get a glass of water, Bunima, because
2:36:22
get a glass of water, Bunima, because you've been speaking nonstop, right,
2:36:24
you've been speaking nonstop, right,
2:36:24
you've been speaking nonstop, right, from last week, right? Especially, I was
2:36:27
from last week, right? Especially, I was
2:36:27
from last week, right? Especially, I was looking at the demo, right? It was it
2:36:29
looking at the demo, right? It was it
2:36:29
looking at the demo, right? It was it was so smooth and uh uh very So, this is
2:36:32
was so smooth and uh uh very So, this is
2:36:32
was so smooth and uh uh very So, this is a very nice, you know, to be behind the
2:36:33
a very nice, you know, to be behind the
2:36:33
a very nice, you know, to be behind the scenes and look at your demo. I just
2:36:36
scenes and look at your demo. I just
2:36:36
scenes and look at your demo. I just Thank you very much. It's been a while
2:36:38
Thank you very much. It's been a while
2:36:38
Thank you very much. It's been a while I've seen a such a fastpaced demo and
2:36:41
I've seen a such a fastpaced demo and
2:36:41
I've seen a such a fastpaced demo and yet it was so good. Uh there were no
2:36:44
yet it was so good. Uh there were no
2:36:44
yet it was so good. Uh there were no demo demons. I think I even if there was
2:36:47
demo demons. I think I even if there was
2:36:47
demo demons. I think I even if there was a demo demon, I didn't really realize
2:36:49
a demo demon, I didn't really realize
2:36:49
a demo demon, I didn't really realize it. Uh but it was it was very good. I
2:36:51
it. Uh but it was it was very good. I
2:36:51
it. Uh but it was it was very good. I know we have Elvin waiting behind the
2:36:53
know we have Elvin waiting behind the
2:36:54
know we have Elvin waiting behind the scenes and we have quite a few
2:36:55
scenes and we have quite a few
2:36:55
scenes and we have quite a few questions. Yes, maybe let's take at
2:36:56
questions. Yes, maybe let's take at
2:36:56
questions. Yes, maybe let's take at least one, right? Let's take one maybe
2:36:59
least one, right? Let's take one maybe
2:36:59
least one, right? Let's take one maybe um um um who let's say take him this
2:37:02
um um um who let's say take him this
2:37:02
um um um who let's say take him this time. It's he's asking how do you ensure
2:37:04
time. It's he's asking how do you ensure
2:37:04
time. It's he's asking how do you ensure message reliability and avoid issues
2:37:07
message reliability and avoid issues
2:37:07
message reliability and avoid issues like message loss or duplication
2:37:09
like message loss or duplication
2:37:09
like message loss or duplication especially during high traffic. Okay,
2:37:12
especially during high traffic. Okay,
2:37:12
especially during high traffic. Okay, these are two very different things.
2:37:14
these are two very different things.
2:37:14
these are two very different things. Message loss Yeah, rely on a messaging
2:37:17
Message loss Yeah, rely on a messaging
2:37:17
Message loss Yeah, rely on a messaging library. Please let the messaging
2:37:19
library. Please let the messaging
2:37:19
library. Please let the messaging library take care of you. Uh because
2:37:22
library take care of you. Uh because
2:37:22
library take care of you. Uh because that's not something that you can handle
2:37:23
that's not something that you can handle
2:37:23
that's not something that you can handle yourself. There is message cues but you
2:37:26
yourself. There is message cues but you
2:37:26
yourself. There is message cues but you need to make sure that you need to focus
2:37:28
need to make sure that you need to focus
2:37:28
need to make sure that you need to focus on your business code. So use a message
2:37:30
on your business code. So use a message
2:37:30
on your business code. So use a message library that will take care of the
2:37:31
library that will take care of the
2:37:31
library that will take care of the messages for you. Now when it comes to
2:37:33
messages for you. Now when it comes to
2:37:33
messages for you. Now when it comes to duplication that is yet another pattern
2:37:35
duplication that is yet another pattern
2:37:35
duplication that is yet another pattern that you can invest in which is the
2:37:37
that you can invest in which is the
2:37:37
that you can invest in which is the outbox pattern. So that takes care of
2:37:40
outbox pattern. So that takes care of
2:37:40
outbox pattern. So that takes care of exactly one's processing and make sure
2:37:41
exactly one's processing and make sure
2:37:42
exactly one's processing and make sure that there's deed replication and item
2:37:44
that there's deed replication and item
2:37:44
that there's deed replication and item potential of your data. It's not
2:37:45
potential of your data. It's not
2:37:45
potential of your data. It's not something that I can explain in five
2:37:47
something that I can explain in five
2:37:47
something that I can explain in five minutes because it is really really
2:37:49
minutes because it is really really
2:37:49
minutes because it is really really really advanced as a topic something
2:37:52
really advanced as a topic something
2:37:52
really advanced as a topic something which needs one hour but I have
2:37:55
which needs one hour but I have
2:37:55
which needs one hour but I have something for the audience who asked me
2:37:58
something for the audience who asked me
2:37:58
something for the audience who asked me about it. Um it is a podcast that I'm
2:38:02
about it. Um it is a podcast that I'm
2:38:02
about it. Um it is a podcast that I'm going to direct you to. Uh there's a
2:38:05
going to direct you to. Uh there's a
2:38:05
going to direct you to. Uh there's a onehour podcast
2:38:07
onehour podcast
2:38:07
onehour podcast uh about the outbox pattern. So that is
2:38:10
uh about the outbox pattern. So that is
2:38:10
uh about the outbox pattern. So that is what I am talking about. So Stephen, I'm
2:38:12
what I am talking about. So Stephen, I'm
2:38:12
what I am talking about. So Stephen, I'm going to put this in the chat here.
2:38:14
going to put this in the chat here.
2:38:14
going to put this in the chat here. Maybe you can then put it in the the
2:38:17
Maybe you can then put it in the the
2:38:17
Maybe you can then put it in the the live chat. So this is a link to a
2:38:19
live chat. So this is a link to a
2:38:19
live chat. So this is a link to a podcast. It is a oneh hour podcast by my
2:38:23
podcast. It is a oneh hour podcast by my
2:38:23
podcast. It is a oneh hour podcast by my colleagues Tom and Shimon who did it
2:38:26
colleagues Tom and Shimon who did it
2:38:26
colleagues Tom and Shimon who did it with my friend Dan Clark. One hour about
2:38:28
with my friend Dan Clark. One hour about
2:38:28
with my friend Dan Clark. One hour about outbox. They'll teach you all about
2:38:30
outbox. They'll teach you all about
2:38:30
outbox. They'll teach you all about duplication, dduplication, and item
2:38:32
duplication, dduplication, and item
2:38:32
duplication, dduplication, and item potency.
2:38:34
potency.
2:38:34
potency. Perfect puna. You know, thank you. Thank
2:38:36
Perfect puna. You know, thank you. Thank
2:38:36
Perfect puna. You know, thank you. Thank you so much. I really enjoyed hosting
2:38:37
you so much. I really enjoyed hosting
2:38:37
you so much. I really enjoyed hosting you and and I can't wait, you know, to
2:38:39
you and and I can't wait, you know, to
2:38:39
you and and I can't wait, you know, to have you on these events once again.
2:38:41
have you on these events once again.
2:38:41
have you on these events once again. Maybe maybe I'll I'll come to your part
2:38:42
Maybe maybe I'll I'll come to your part
2:38:42
Maybe maybe I'll I'll come to your part of the world, right? And then we
2:38:45
of the world, right? And then we
2:38:45
of the world, right? And then we [Laughter]
2:38:48
[Laughter]
2:38:48
[Laughter] Oh, maybe whenever you're coming here.
2:38:50
Oh, maybe whenever you're coming here.
2:38:50
Oh, maybe whenever you're coming here. So with that, Punima, thank you so much.
2:38:52
So with that, Punima, thank you so much.
2:38:52
So with that, Punima, thank you so much. Right. It's what evening at your time? 7
2:38:54
Right. It's what evening at your time? 7
2:38:54
Right. It's what evening at your time? 7 6 or something? Uh, no, it's 5:00. It's
2:38:57
6 or something? Uh, no, it's 5:00. It's
2:38:57
6 or something? Uh, no, it's 5:00. It's five. All right. All right. Have a nice
2:38:58
five. All right. All right. Have a nice
2:38:58
five. All right. All right. Have a nice evening, Puna. Thank you so much once
2:39:00
evening, Puna. Thank you so much once
2:39:00
evening, Puna. Thank you so much once again. And yeah, enjoy your evening.
2:39:03
again. And yeah, enjoy your evening.
2:39:03
again. And yeah, enjoy your evening. Thank you very much. Bye. Downloading.
2:39:06
Thank you very much. Bye. Downloading.
2:39:06
Thank you very much. Bye. Downloading. All right, ladies and gentlemen, that
2:39:07
All right, ladies and gentlemen, that
2:39:08
All right, ladies and gentlemen, that was Puna for you. And our next speaker
2:39:09
was Puna for you. And our next speaker
2:39:09
was Puna for you. And our next speaker and the final speaker for this
2:39:11
and the final speaker for this
2:39:11
and the final speaker for this conference has been waiting. He's been
2:39:12
conference has been waiting. He's been
2:39:12
conference has been waiting. He's been very kind already. You know, he's been
2:39:14
very kind already. You know, he's been
2:39:14
very kind already. You know, he's been waiting for at least 30 minutes behind
2:39:16
waiting for at least 30 minutes behind
2:39:16
waiting for at least 30 minutes behind the scenes. So, thank you so much,
2:39:17
the scenes. So, thank you so much,
2:39:17
the scenes. So, thank you so much, Elvin. Elvin is our next speaker and
2:39:19
Elvin. Elvin is our next speaker and
2:39:19
Elvin. Elvin is our next speaker and he's going to talk about build native
2:39:21
he's going to talk about build native
2:39:21
he's going to talk about build native Windows app with Win UI.NET and Windows
2:39:24
Windows app with Win UI.NET and Windows
2:39:24
Windows app with Win UI.NET and Windows app SDK. And um if I'm not wrong, Elvin
2:39:30
app SDK. And um if I'm not wrong, Elvin
2:39:30
app SDK. And um if I'm not wrong, Elvin um go Alvin is a senior content
2:39:33
um go Alvin is a senior content
2:39:33
um go Alvin is a senior content developer at Microsoft L. Who I finally
2:39:35
developer at Microsoft L. Who I finally
2:39:36
developer at Microsoft L. Who I finally get to host someone from Microsoft learn
2:39:37
get to host someone from Microsoft learn
2:39:37
get to host someone from Microsoft learn you know. So without any further ado I I
2:39:39
you know. So without any further ado I I
2:39:39
you know. So without any further ado I I want to have some chit chat with him. So
2:39:41
want to have some chit chat with him. So
2:39:41
want to have some chit chat with him. So without any further ado let's bring
2:39:42
without any further ado let's bring
2:39:42
without any further ado let's bring Alvin. Hi Ar. Welcome to the net
2:39:44
Alvin. Hi Ar. Welcome to the net
2:39:44
Alvin. Hi Ar. Welcome to the net conference.
2:39:46
conference.
2:39:46
conference. Hi how you doing Simon? I'm doing great.
2:39:49
Hi how you doing Simon? I'm doing great.
2:39:49
Hi how you doing Simon? I'm doing great. You know I I just read you are you a
2:39:52
You know I I just read you are you a
2:39:52
You know I I just read you are you a senior content developer at Microsoft
2:39:54
senior content developer at Microsoft
2:39:54
senior content developer at Microsoft learn. uh how how long you have been
2:39:56
learn. uh how how long you have been
2:39:56
learn. uh how how long you have been working with Microsoft learn actually
2:40:00
working with Microsoft learn actually
2:40:00
working with Microsoft learn actually I've been there a little over three
2:40:02
I've been there a little over three
2:40:02
I've been there a little over three years now before that I spent uh about
2:40:04
years now before that I spent uh about
2:40:04
years now before that I spent uh about 25 years doing uh software development
2:40:06
25 years doing uh software development
2:40:06
25 years doing uh software development and architecture mostly withnet
2:40:09
and architecture mostly withnet
2:40:09
and architecture mostly withnet oh I see you know uh you know because
2:40:11
oh I see you know uh you know because
2:40:11
oh I see you know uh you know because because I I remember right Microsoft
2:40:13
because I I remember right Microsoft
2:40:13
because I I remember right Microsoft learn was introduced around like
2:40:15
learn was introduced around like
2:40:15
learn was introduced around like pandemic or something right and before
2:40:17
pandemic or something right and before
2:40:17
pandemic or something right and before that we have a Microsoft virtual academy
2:40:20
that we have a Microsoft virtual academy
2:40:20
that we have a Microsoft virtual academy right uh right yeah so I have I've
2:40:24
right uh right yeah so I have I've
2:40:24
right uh right yeah so I have I've hosted quite a few folks from there uh
2:40:26
hosted quite a few folks from there uh
2:40:26
hosted quite a few folks from there uh from that from that time. So, it's so
2:40:28
from that from that time. So, it's so
2:40:28
from that from that time. So, it's so good to see you Alvin. I know uh I'm
2:40:31
good to see you Alvin. I know uh I'm
2:40:31
good to see you Alvin. I know uh I'm already 10 11 minutes in your session.
2:40:33
already 10 11 minutes in your session.
2:40:33
already 10 11 minutes in your session. So, I've added your presentation to the
2:40:35
So, I've added your presentation to the
2:40:35
So, I've added your presentation to the stream. Everybody else can see it and
2:40:38
stream. Everybody else can see it and
2:40:38
stream. Everybody else can see it and you have all the time that you need.
2:40:41
you have all the time that you need.
2:40:41
you have all the time that you need. Okay, that sounds great. So, we have
2:40:43
Okay, that sounds great. So, we have
2:40:43
Okay, that sounds great. So, we have about 40
2:40:44
about 40
2:40:44
about 40 minutes. That's good. Let me uh get
2:40:48
minutes. That's good. Let me uh get
2:40:48
minutes. That's good. Let me uh get right started here. Um, so this is
2:40:50
right started here. Um, so this is
2:40:50
right started here. Um, so this is getting started with WinUI and the
2:40:52
getting started with WinUI and the
2:40:52
getting started with WinUI and the Windows app SDK and also with uh .NET
2:40:54
Windows app SDK and also with uh .NET
2:40:54
Windows app SDK and also with uh .NET because this is all using uh .NET if
2:40:57
because this is all using uh .NET if
2:40:57
because this is all using uh .NET if you're doing C#
2:40:59
you're doing C#
2:40:59
you're doing C# projects. So a little bit about me. I've
2:41:01
projects. So a little bit about me. I've
2:41:01
projects. So a little bit about me. I've been in the industry for uh almost 30
2:41:04
been in the industry for uh almost 30
2:41:04
been in the industry for uh almost 30 years now. I have a blog, The Morning
2:41:06
years now. I have a blog, The Morning
2:41:06
years now. I have a blog, The Morning Dew. It's at alvinshcraft.com. A lot of
2:41:09
Dew. It's at alvinshcraft.com. A lot of
2:41:09
Dew. It's at alvinshcraft.com. A lot of you may be familiar with that. I post uh
2:41:11
you may be familiar with that. I post uh
2:41:11
you may be familiar with that. I post uh links to uhnet resources for developers
2:41:14
links to uhnet resources for developers
2:41:14
links to uhnet resources for developers every day. I've also written uh three
2:41:16
every day. I've also written uh three
2:41:16
every day. I've also written uh three books for packed publishing. uh two of
2:41:18
books for packed publishing. uh two of
2:41:18
books for packed publishing. uh two of them are two editions of
2:41:20
them are two editions of
2:41:20
them are two editions of learnui3 and then I have another one
2:41:22
learnui3 and then I have another one
2:41:22
learnui3 and then I have another one that's on parallel programming and
2:41:24
that's on parallel programming and
2:41:24
that's on parallel programming and concurrency
2:41:26
concurrency
2:41:26
concurrency withnet and like I said I've been at
2:41:28
withnet and like I said I've been at
2:41:28
withnet and like I said I've been at Microsoft since 2022 just over three
2:41:30
Microsoft since 2022 just over three
2:41:30
Microsoft since 2022 just over three years now a content developer working on
2:41:33
years now a content developer working on
2:41:33
years now a content developer working on the Windows developer docs on Microsoft
2:41:35
the Windows developer docs on Microsoft
2:41:35
the Windows developer docs on Microsoft learn and I'm an organizer too of a de
2:41:39
learn and I'm an organizer too of a de
2:41:39
learn and I'm an organizer too of a de developer conference the tech bash
2:41:41
developer conference the tech bash
2:41:41
developer conference the tech bash conference happens every fall in the
2:41:43
conference happens every fall in the
2:41:43
conference happens every fall in the Poconos's in the Pocono mountains in
2:41:45
Poconos's in the Pocono mountains in
2:41:45
Poconos's in the Pocono mountains in Pennsylvania
2:41:47
Pennsylvania
2:41:47
Pennsylvania So that's TechBash. We're in November
2:41:49
So that's TechBash. We're in November
2:41:49
So that's TechBash. We're in November this year. If you're in the area, you
2:41:51
this year. If you're in the area, you
2:41:51
this year. If you're in the area, you should join us. We're going to have a
2:41:53
should join us. We're going to have a
2:41:53
should join us. We're going to have a lot of great speakers. We'll be
2:41:54
lot of great speakers. We'll be
2:41:54
lot of great speakers. We'll be announcing some keynotes very
2:41:57
announcing some keynotes very
2:41:57
announcing some keynotes very soon. And the agenda. So I've got a
2:42:00
soon. And the agenda. So I've got a
2:42:00
soon. And the agenda. So I've got a couple of things struck through here. I
2:42:02
couple of things struck through here. I
2:42:02
couple of things struck through here. I normally do about a 60 to 75 minute
2:42:05
normally do about a 60 to 75 minute
2:42:05
normally do about a 60 to 75 minute version of this talk. So I've cut out a
2:42:08
version of this talk. So I've cut out a
2:42:08
version of this talk. So I've cut out a few things for this uh version of the
2:42:09
few things for this uh version of the
2:42:10
few things for this uh version of the talk, but all of the slides for
2:42:12
talk, but all of the slides for
2:42:12
talk, but all of the slides for everything and all of the code samples
2:42:14
everything and all of the code samples
2:42:14
everything and all of the code samples are all up in my GitHub repo. It's just
2:42:16
are all up in my GitHub repo. It's just
2:42:16
are all up in my GitHub repo. It's just Alvin
2:42:18
Alvin
2:42:18
Alvin Ashcraftspeaking. So you can go up to
2:42:19
Ashcraftspeaking. So you can go up to
2:42:19
Ashcraftspeaking. So you can go up to GitHub and uh get the resources for all
2:42:21
GitHub and uh get the resources for all
2:42:22
GitHub and uh get the resources for all of these
2:42:26
demos. So let's start with a quick
2:42:28
demos. So let's start with a quick
2:42:28
demos. So let's start with a quick overview of WinUI and then we'll get in
2:42:30
overview of WinUI and then we'll get in
2:42:30
overview of WinUI and then we'll get in some code quickly here. Uh so WinUI is
2:42:33
some code quickly here. Uh so WinUI is
2:42:33
some code quickly here. Uh so WinUI is part of the Windows app SDK. Um the
2:42:36
part of the Windows app SDK. Um the
2:42:36
part of the Windows app SDK. Um the first release was in March of 2021. That
2:42:39
first release was in March of 2021. That
2:42:39
first release was in March of 2021. That was 1.0. Uh WinUI3, they call it WinUI3,
2:42:42
was 1.0. Uh WinUI3, they call it WinUI3,
2:42:42
was 1.0. Uh WinUI3, they call it WinUI3, but it's not really a version number. uh
2:42:44
but it's not really a version number. uh
2:42:44
but it's not really a version number. uh it's kind of the successor to WinUI 2
2:42:48
it's kind of the successor to WinUI 2
2:42:48
it's kind of the successor to WinUI 2 which was an add-on to UWP to add some
2:42:51
which was an add-on to UWP to add some
2:42:51
which was an add-on to UWP to add some additional controls and libraries and
2:42:53
additional controls and libraries and
2:42:53
additional controls and libraries and WinUI3 is completely its own thing with
2:42:55
WinUI3 is completely its own thing with
2:42:55
WinUI3 is completely its own thing with the Windows app SDK. It's very similar
2:42:57
the Windows app SDK. It's very similar
2:42:57
the Windows app SDK. It's very similar to UWP if you've done a UWP apps on
2:43:00
to UWP if you've done a UWP apps on
2:43:00
to UWP if you've done a UWP apps on Windows 10. Uh what they did was they
2:43:03
Windows 10. Uh what they did was they
2:43:03
Windows 10. Uh what they did was they took those controls and libraries and
2:43:06
took those controls and libraries and
2:43:06
took those controls and libraries and extracted them from the Windows SDK so
2:43:08
extracted them from the Windows SDK so
2:43:08
extracted them from the Windows SDK so that they could version these components
2:43:11
that they could version these components
2:43:11
that they could version these components independent of Windows. they used to be
2:43:13
independent of Windows. they used to be
2:43:13
independent of Windows. they used to be stuck with waiting for a new Windows
2:43:15
stuck with waiting for a new Windows
2:43:15
stuck with waiting for a new Windows release before you could get new UWP
2:43:17
release before you could get new UWP
2:43:17
release before you could get new UWP features and now it's all separated out.
2:43:19
features and now it's all separated out.
2:43:20
features and now it's all separated out. Uh the main difference between UWP and
2:43:23
Uh the main difference between UWP and
2:43:24
Uh the main difference between UWP and Win UI as far as looking at the code is
2:43:26
Win UI as far as looking at the code is
2:43:26
Win UI as far as looking at the code is uh the name spaces are changed. So
2:43:27
uh the name spaces are changed. So
2:43:27
uh the name spaces are changed. So everything starts with Microsoft dot
2:43:29
everything starts with Microsoft dot
2:43:29
everything starts with Microsoft dot instead of Windows dot in the name
2:43:33
instead of Windows dot in the name
2:43:33
instead of Windows dot in the name spaces. Um it's built on the latest .NET
2:43:35
spaces. Um it's built on the latest .NET
2:43:35
spaces. Um it's built on the latest .NET runtime. Right now you can build WinUI
2:43:37
runtime. Right now you can build WinUI
2:43:37
runtime. Right now you can build WinUI apps with .NET 9 or .NET 8. Both are
2:43:40
apps with .NET 9 or .NET 8. Both are
2:43:40
apps with .NET 9 or .NET 8. Both are still supported.
2:43:42
still supported.
2:43:42
still supported. um you create apps with ZAML and either
2:43:44
um you create apps with ZAML and either
2:43:44
um you create apps with ZAML and either C or C++ and if you use C you're also
2:43:48
C or C++ and if you use C you're also
2:43:48
C or C++ and if you use C you're also using uh .NET and you have access to the
2:43:50
using uh .NET and you have access to the
2:43:50
using uh .NET and you have access to the full uh net libraries, runtimes,
2:43:54
full uh net libraries, runtimes,
2:43:54
full uh net libraries, runtimes, everything. And the latest release of
2:43:56
everything. And the latest release of
2:43:56
everything. And the latest release of Windows App SDK is 1.7 that just came
2:43:59
Windows App SDK is 1.7 that just came
2:43:59
Windows App SDK is 1.7 that just came out about 3 weeks
2:44:00
out about 3 weeks
2:44:01
out about 3 weeks ago. And it's open source on GitHub, not
2:44:04
ago. And it's open source on GitHub, not
2:44:04
ago. And it's open source on GitHub, not full open source. You can't uh
2:44:06
full open source. You can't uh
2:44:06
full open source. You can't uh contribute code yourself, but they do
2:44:07
contribute code yourself, but they do
2:44:08
contribute code yourself, but they do publish readonly um versions of the code
2:44:10
publish readonly um versions of the code
2:44:10
publish readonly um versions of the code so that it helps with debugging. You can
2:44:12
so that it helps with debugging. You can
2:44:12
so that it helps with debugging. You can get access to all the
2:44:16
source. And let's see, we're going to
2:44:18
source. And let's see, we're going to
2:44:18
source. And let's see, we're going to dive into the first demo here. Uh, so
2:44:20
dive into the first demo here. Uh, so
2:44:20
dive into the first demo here. Uh, so there's going to be uh two parts to this
2:44:22
there's going to be uh two parts to this
2:44:22
there's going to be uh two parts to this demo. So I'm going to create a new WinUI
2:44:24
demo. So I'm going to create a new WinUI
2:44:24
demo. So I'm going to create a new WinUI project from scratch and then show you
2:44:27
project from scratch and then show you
2:44:27
project from scratch and then show you how you can add a couple of things to
2:44:28
how you can add a couple of things to
2:44:28
how you can add a couple of things to make it look a little bit nicer. And
2:44:30
make it look a little bit nicer. And
2:44:30
make it look a little bit nicer. And then I will open up another project
2:44:32
then I will open up another project
2:44:32
then I will open up another project that's got uh an MVVM implementation
2:44:35
that's got uh an MVVM implementation
2:44:35
that's got uh an MVVM implementation model view view model. And it's also got
2:44:37
model view view model. And it's also got
2:44:37
model view view model. And it's also got some controls and some styles added so
2:44:40
some controls and some styles added so
2:44:40
some controls and some styles added so you can see uh the difference between
2:44:41
you can see uh the difference between
2:44:41
you can see uh the difference between the the basic out of the box and what
2:44:44
the the basic out of the box and what
2:44:44
the the basic out of the box and what you can do pretty easily just adding a
2:44:45
you can do pretty easily just adding a
2:44:45
you can do pretty easily just adding a few styles and controls to your app. But
2:44:48
few styles and controls to your app. But
2:44:48
few styles and controls to your app. But let's start with a new project dialogue.
2:44:51
let's start with a new project dialogue.
2:44:51
let's start with a new project dialogue. We'll create a new project in Visual
2:44:58
Studio. And we're going to pick a blank
2:45:01
Studio. And we're going to pick a blank
2:45:01
Studio. And we're going to pick a blank app packaged
2:45:03
app packaged
2:45:03
app packaged WinUI3. And this is
2:45:07
C. And we'll just leave the name app 3
2:45:10
C. And we'll just leave the name app 3
2:45:10
C. And we'll just leave the name app 3 for
2:45:12
for
2:45:12
for now. And hit create.
2:45:23
So, this loads up a couple of files here
2:45:25
So, this loads up a couple of files here
2:45:25
So, this loads up a couple of files here in your your project.
2:45:29
See, if we zoom in a little bit there,
2:45:32
See, if we zoom in a little bit there,
2:45:32
See, if we zoom in a little bit there, you can see this better. Um, so we've
2:45:34
you can see this better. Um, so we've
2:45:34
you can see this better. Um, so we've got an app manifest. We've got an
2:45:37
got an app manifest. We've got an
2:45:37
got an app manifest. We've got an app.zaml, which is the part of the
2:45:40
app.zaml, which is the part of the
2:45:40
app.zaml, which is the part of the program that launches your app. So it
2:45:42
program that launches your app. So it
2:45:42
program that launches your app. So it goes into the app class first and then
2:45:44
goes into the app class first and then
2:45:44
goes into the app class first and then launches the main window from there. And
2:45:47
launches the main window from there. And
2:45:47
launches the main window from there. And the main window is exactly at the main
2:45:50
the main window is exactly at the main
2:45:50
the main window is exactly at the main window. Let's take a look in the
2:45:52
window. Let's take a look in the
2:45:52
window. Let's take a look in the app.zaml just for a second to see how
2:45:54
app.zaml just for a second to see how
2:45:54
app.zaml just for a second to see how that's
2:45:57
created. So in the on launch method, it
2:46:00
created. So in the on launch method, it
2:46:00
created. So in the on launch method, it just creates a new instance of the main
2:46:02
just creates a new instance of the main
2:46:02
just creates a new instance of the main window and activates it.
2:46:05
window and activates it.
2:46:05
window and activates it. And then in the main
2:46:07
And then in the main
2:46:07
And then in the main window, the new project just gives you a
2:46:10
window, the new project just gives you a
2:46:10
window, the new project just gives you a blank window with a single stack panel.
2:46:13
blank window with a single stack panel.
2:46:13
blank window with a single stack panel. Stack panel just uh does exactly that.
2:46:15
Stack panel just uh does exactly that.
2:46:15
Stack panel just uh does exactly that. Anything you put inside there, it'll
2:46:17
Anything you put inside there, it'll
2:46:17
Anything you put inside there, it'll just stack the controls either
2:46:19
just stack the controls either
2:46:19
just stack the controls either horizontally or vertically depending how
2:46:21
horizontally or vertically depending how
2:46:21
horizontally or vertically depending how you set that up. So this one is
2:46:24
you set that up. So this one is
2:46:24
you set that up. So this one is horizontal. So it would stack things um
2:46:26
horizontal. So it would stack things um
2:46:26
horizontal. So it would stack things um left
2:46:28
left
2:46:28
left right. And then in the code
2:46:31
right. And then in the code
2:46:31
right. And then in the code behind, each ZAML file has a C# code
2:46:34
behind, each ZAML file has a C# code
2:46:34
behind, each ZAML file has a C# code behind file where you can put code. Um,
2:46:38
behind file where you can put code. Um,
2:46:38
behind file where you can put code. Um, so here there's just a buttonclick event
2:46:40
so here there's just a buttonclick event
2:46:40
so here there's just a buttonclick event handler. So when you click the button
2:46:42
handler. So when you click the button
2:46:42
handler. So when you click the button that's in this UI file, it'll call that
2:46:45
that's in this UI file, it'll call that
2:46:45
that's in this UI file, it'll call that event handler. Let's just run this. I'm
2:46:48
event handler. Let's just run this. I'm
2:46:48
event handler. Let's just run this. I'm going to change this to ARM 64. I have
2:46:49
going to change this to ARM 64. I have
2:46:49
going to change this to ARM 64. I have an ARM laptop
2:46:51
an ARM laptop
2:46:51
an ARM laptop here. Run it with no changes and see how
2:46:54
here. Run it with no changes and see how
2:46:54
here. Run it with no changes and see how it looks.
2:47:01
It's building and
2:47:06
deploying. And it's pretty basic. It's a
2:47:08
deploying. And it's pretty basic. It's a
2:47:08
deploying. And it's pretty basic. It's a big empty window except for the one
2:47:10
big empty window except for the one
2:47:10
big empty window except for the one click me button there. And you can see
2:47:12
click me button there. And you can see
2:47:12
click me button there. And you can see it's got a title bar with a no icon yet.
2:47:16
it's got a title bar with a no icon yet.
2:47:16
it's got a title bar with a no icon yet. I click that, it just changes it to
2:47:17
I click that, it just changes it to
2:47:18
I click that, it just changes it to clicked.
2:47:20
clicked.
2:47:20
clicked. And now I want to show you a couple of
2:47:22
And now I want to show you a couple of
2:47:22
And now I want to show you a couple of quick things you can do to make
2:47:24
quick things you can do to make
2:47:24
quick things you can do to make your window look a little bit nicer. I
2:47:27
your window look a little bit nicer. I
2:47:27
your window look a little bit nicer. I have this other app
2:47:29
have this other app
2:47:29
have this other app here. And this is exactly the same code
2:47:32
here. And this is exactly the same code
2:47:32
here. And this is exactly the same code except I've added a few extra things. So
2:47:35
except I've added a few extra things. So
2:47:35
except I've added a few extra things. So the first thing I've added is this Micah
2:47:37
the first thing I've added is this Micah
2:47:37
the first thing I've added is this Micah backdrop. And what that does is it gives
2:47:39
backdrop. And what that does is it gives
2:47:39
backdrop. And what that does is it gives it a little bit more of that Windows 11
2:47:42
it a little bit more of that Windows 11
2:47:42
it a little bit more of that Windows 11 look and feel. I'm going to take that
2:47:45
look and feel. I'm going to take that
2:47:45
look and feel. I'm going to take that and just paste it in our new project and
2:47:48
and just paste it in our new project and
2:47:48
and just paste it in our new project and run this again. So you can see the
2:47:49
run this again. So you can see the
2:47:49
run this again. So you can see the difference that one little uh attribute
2:47:52
difference that one little uh attribute
2:47:52
difference that one little uh attribute makes
2:47:54
there. You can see it kind of has that
2:47:56
there. You can see it kind of has that
2:47:56
there. You can see it kind of has that pinkish hue now. So it's almost like a
2:47:59
pinkish hue now. So it's almost like a
2:47:59
pinkish hue now. So it's almost like a it's picking up the color of your
2:48:01
it's picking up the color of your
2:48:01
it's picking up the color of your wallpaper in the background. So I've got
2:48:03
wallpaper in the background. So I've got
2:48:04
wallpaper in the background. So I've got a a purplish hazy background and it's
2:48:06
a a purplish hazy background and it's
2:48:06
a a purplish hazy background and it's pulling that into the window
2:48:09
pulling that into the window
2:48:09
pulling that into the window here. Let's stop this and go grab the
2:48:12
here. Let's stop this and go grab the
2:48:12
here. Let's stop this and go grab the other piece that I have here. So the
2:48:15
other piece that I have here. So the
2:48:15
other piece that I have here. So the rest of this, so instead of just the
2:48:17
rest of this, so instead of just the
2:48:17
rest of this, so instead of just the stack panel, I have a grid wrapping it.
2:48:19
stack panel, I have a grid wrapping it.
2:48:19
stack panel, I have a grid wrapping it. And I have two rows in the grid. The
2:48:21
And I have two rows in the grid. The
2:48:21
And I have two rows in the grid. The first one has a custom title bar. And
2:48:24
first one has a custom title bar. And
2:48:24
first one has a custom title bar. And this is a new thing in Windows app SDK
2:48:27
this is a new thing in Windows app SDK
2:48:27
this is a new thing in Windows app SDK 1.7. It's a title bar that looks a
2:48:30
1.7. It's a title bar that looks a
2:48:30
1.7. It's a title bar that looks a little bit more like what you see in
2:48:31
little bit more like what you see in
2:48:31
little bit more like what you see in other Windows apps. Uh you can add more
2:48:34
other Windows apps. Uh you can add more
2:48:34
other Windows apps. Uh you can add more things into the the title bar like
2:48:37
things into the the title bar like
2:48:37
things into the the title bar like you'll see in this WinUI3 gallery
2:48:40
you'll see in this WinUI3 gallery
2:48:40
you'll see in this WinUI3 gallery app. You know, it looks like a little
2:48:42
app. You know, it looks like a little
2:48:42
app. You know, it looks like a little bit bigger. It's got a nice icon here.
2:48:45
bit bigger. It's got a nice icon here.
2:48:45
bit bigger. It's got a nice icon here. It's got a back button in here. And
2:48:48
It's got a back button in here. And
2:48:48
It's got a back button in here. And you'll see some apps like the store,
2:48:49
you'll see some apps like the store,
2:48:49
you'll see some apps like the store, they have each they even have like a
2:48:51
they have each they even have like a
2:48:51
they have each they even have like a search box up in your title bar. You can
2:48:53
search box up in your title bar. You can
2:48:53
search box up in your title bar. You can do all that with this new title bar
2:48:55
do all that with this new title bar
2:48:55
do all that with this new title bar control. Let's go back to this
2:48:58
control. Let's go back to this
2:48:58
control. Let's go back to this app, copy this, and put it in
2:49:04
here. So, we've added this new title
2:49:08
here. So, we've added this new title
2:49:08
here. So, we've added this new title bar. I'll call this sample app. that
2:49:11
bar. I'll call this sample app. that
2:49:12
bar. I'll call this sample app. that we'll put that in the title
2:49:13
we'll put that in the title
2:49:13
we'll put that in the title bar. I'm hiding the back button and I'm
2:49:16
bar. I'm hiding the back button and I'm
2:49:16
bar. I'm hiding the back button and I'm not making it a tab stop because we
2:49:18
not making it a tab stop because we
2:49:18
not making it a tab stop because we don't have any controls up there that we
2:49:19
don't have any controls up there that we
2:49:20
don't have any controls up there that we want the user be to be able to tab
2:49:23
want the user be to be able to tab
2:49:23
want the user be to be able to tab into. And I have to get one other piece
2:49:25
into. And I have to get one other piece
2:49:25
into. And I have to get one other piece to make that work. In the code
2:49:28
to make that work. In the code
2:49:28
to make that work. In the code behind, there's a set title bar method
2:49:32
behind, there's a set title bar method
2:49:32
behind, there's a set title bar method that we're going to copy and call that
2:49:34
that we're going to copy and call that
2:49:34
that we're going to copy and call that from the constructor.
2:49:39
So, let's paste that in
2:49:46
here and call
2:49:49
here and call
2:49:49
here and call it. And so here, you'll see I'm setting
2:49:52
it. And so here, you'll see I'm setting
2:49:52
it. And so here, you'll see I'm setting the icon. I'm telling it to make it the
2:49:55
the icon. I'm telling it to make it the
2:49:55
the icon. I'm telling it to make it the taller
2:49:57
taller
2:49:57
taller height and setting the display name here
2:50:00
height and setting the display name here
2:50:00
height and setting the display name here as well. Let's run this again.
2:50:07
And if we did everything right, we
2:50:09
And if we did everything right, we
2:50:09
And if we did everything right, we should have this nice all title bar. But
2:50:12
should have this nice all title bar. But
2:50:12
should have this nice all title bar. But we don't have the icon yet because I
2:50:14
we don't have the icon yet because I
2:50:14
we don't have the icon yet because I forgot that step. Let's get our icon in
2:50:17
forgot that step. Let's get our icon in
2:50:17
forgot that step. Let's get our icon in here. Add it to the assets
2:50:19
here. Add it to the assets
2:50:19
here. Add it to the assets folder. We're going to add an existing
2:50:23
folder. We're going to add an existing
2:50:23
folder. We're going to add an existing item. going to browse out to this other
2:50:26
item. going to browse out to this other
2:50:26
item. going to browse out to this other place where I have an
2:50:31
icon and it's a winui
2:50:34
icon and it's a winui
2:50:34
icon and it's a winui icon. Now we've got
2:50:39
that. I got to do one more thing. We'll
2:50:42
that. I got to do one more thing. We'll
2:50:42
that. I got to do one more thing. We'll stop that.
2:50:46
We have to go and set the properties on
2:50:49
We have to go and set the properties on
2:50:49
We have to go and set the properties on this so that we set it as
2:50:52
this so that we set it as
2:50:52
this so that we set it as content. Instead of build action none,
2:50:55
content. Instead of build action none,
2:50:55
content. Instead of build action none, we're going to say build action content
2:50:57
we're going to say build action content
2:50:57
we're going to say build action content so that we can reference it in the
2:51:04
code. Now we should have an icon when
2:51:06
code. Now we should have an icon when
2:51:06
code. Now we should have an icon when this launches. There it is. We've got
2:51:08
this launches. There it is. We've got
2:51:08
this launches. There it is. We've got the larger title bar. Looks a little bit
2:51:10
the larger title bar. Looks a little bit
2:51:10
the larger title bar. Looks a little bit nicer. And we got the icon set there.
2:51:16
nicer. And we got the icon set there.
2:51:16
nicer. And we got the icon set there. and it still works just like expected.
2:51:18
and it still works just like expected.
2:51:18
and it still works just like expected. When you hit the button, it says
2:51:23
clicked. So, that's a basic app. I'm
2:51:26
clicked. So, that's a basic app. I'm
2:51:26
clicked. So, that's a basic app. I'm going to pull up something with a little
2:51:28
going to pull up something with a little
2:51:28
going to pull up something with a little bit more to it.
2:51:30
bit more to it.
2:51:30
bit more to it. Now, these are all the samples that are
2:51:33
Now, these are all the samples that are
2:51:33
Now, these are all the samples that are out of my GitHub repo. We're going to
2:51:34
out of my GitHub repo. We're going to
2:51:34
out of my GitHub repo. We're going to start with this controls and MBBM
2:51:36
start with this controls and MBBM
2:51:36
start with this controls and MBBM solution.
2:51:45
And in here you can see I've got a lot
2:51:46
And in here you can see I've got a lot
2:51:46
And in here you can see I've got a lot more going on. So we have still have a
2:51:48
more going on. So we have still have a
2:51:48
more going on. So we have still have a main window and an app.zaml, but we also
2:51:51
main window and an app.zaml, but we also
2:51:51
main window and an app.zaml, but we also have some other views and view
2:51:55
have some other views and view
2:51:55
have some other views and view models. So in the main window
2:51:59
models. So in the main window
2:51:59
models. So in the main window now you'll see there's nothing in there.
2:52:01
now you'll see there's nothing in there.
2:52:01
now you'll see there's nothing in there. It's just a window with the micica
2:52:04
It's just a window with the micica
2:52:04
It's just a window with the micica backdrop.
2:52:06
backdrop.
2:52:06
backdrop. So in here, instead of having the uh
2:52:09
So in here, instead of having the uh
2:52:09
So in here, instead of having the uh everything in the main window, we're
2:52:11
everything in the main window, we're
2:52:11
everything in the main window, we're loading each of these other views as a
2:52:13
loading each of these other views as a
2:52:13
loading each of these other views as a page inside the
2:52:16
page inside the
2:52:16
page inside the window. So all of my markup for what
2:52:20
window. So all of my markup for what
2:52:20
window. So all of my markup for what we're going to be launching is here in
2:52:21
we're going to be launching is here in
2:52:21
we're going to be launching is here in the main page. And this main page will
2:52:24
the main page. And this main page will
2:52:24
the main page. And this main page will get
2:52:25
get
2:52:25
get loaded, I believe, in the app.zaml.
2:52:27
loaded, I believe, in the app.zaml.
2:52:27
loaded, I believe, in the app.zaml. Let's take a look here.
2:52:33
So on launched, we're creating main
2:52:36
So on launched, we're creating main
2:52:36
So on launched, we're creating main window and we're adding a frame to the
2:52:39
window and we're adding a frame to the
2:52:39
window and we're adding a frame to the window and then we're adding we're
2:52:42
window and then we're adding we're
2:52:42
window and then we're adding we're telling it to navigate to the main page
2:52:43
telling it to navigate to the main page
2:52:43
telling it to navigate to the main page within that
2:52:46
within that
2:52:46
within that frame. Let's before we dive into any
2:52:48
frame. Let's before we dive into any
2:52:48
frame. Let's before we dive into any more code, let's just launch this and
2:52:49
more code, let's just launch this and
2:52:50
more code, let's just launch this and show you what we're dealing
2:52:57
with. So this is a media collection app.
2:53:00
with. So this is a media collection app.
2:53:00
with. So this is a media collection app. So you can enter in your CDs, you know,
2:53:03
So you can enter in your CDs, you know,
2:53:03
So you can enter in your CDs, you know, books, Blu-rays, DVDs. You can enter all
2:53:06
books, Blu-rays, DVDs. You can enter all
2:53:06
books, Blu-rays, DVDs. You can enter all that media here and create your
2:53:08
that media here and create your
2:53:08
that media here and create your collection. It's got a dropown box to
2:53:10
collection. It's got a dropown box to
2:53:10
collection. It's got a dropown box to filter by type. So if you only want to
2:53:12
filter by type. So if you only want to
2:53:12
filter by type. So if you only want to see books, it'll show that. Or I can go
2:53:15
see books, it'll show that. Or I can go
2:53:15
see books, it'll show that. Or I can go back and show
2:53:17
all. I can select items. I can edit it
2:53:21
all. I can select items. I can edit it
2:53:21
all. I can select items. I can edit it or I can delete it. If I don't have
2:53:23
or I can delete it. If I don't have
2:53:23
or I can delete it. If I don't have anything selected, I can add items.
2:53:25
anything selected, I can add items.
2:53:25
anything selected, I can add items. Let's hit edit.
2:53:27
Let's hit edit.
2:53:27
Let's hit edit. And one of the other cool controls here
2:53:29
And one of the other cool controls here
2:53:29
And one of the other cool controls here is this teaching tip. So what you can do
2:53:31
is this teaching tip. So what you can do
2:53:32
is this teaching tip. So what you can do with a teaching tip uh by default it'll
2:53:34
with a teaching tip uh by default it'll
2:53:34
with a teaching tip uh by default it'll show every time, but you can add a user
2:53:35
show every time, but you can add a user
2:53:35
show every time, but you can add a user preference
2:53:37
preference
2:53:37
preference um to save whether the user has already
2:53:39
um to save whether the user has already
2:53:39
um to save whether the user has already seen this tip. So once they've seen it
2:53:41
seen this tip. So once they've seen it
2:53:41
seen this tip. So once they've seen it one time, you don't show it to them
2:53:42
one time, you don't show it to them
2:53:42
one time, you don't show it to them again. It's just telling them how this
2:53:45
again. It's just telling them how this
2:53:45
again. It's just telling them how this drop down button works. So they can save
2:53:47
drop down button works. So they can save
2:53:47
drop down button works. So they can save and create new or save and return once
2:53:49
and create new or save and return once
2:53:49
and create new or save and return once they've made a change here. So let's say
2:53:52
they've made a change here. So let's say
2:53:52
they've made a change here. So let's say this is no longer in my collection. I've
2:53:53
this is no longer in my collection. I've
2:53:53
this is no longer in my collection. I've loaned it to
2:53:55
loaned it to
2:53:55
loaned it to somebody. Now I can hit this. So, I can
2:53:57
somebody. Now I can hit this. So, I can
2:53:57
somebody. Now I can hit this. So, I can either save and create a new item or I
2:53:59
either save and create a new item or I
2:53:59
either save and create a new item or I can save and return to the
2:54:02
list. Let's create
2:54:08
new. And we'll add an alien movie to our
2:54:11
new. And we'll add an alien movie to our
2:54:11
new. And we'll add an alien movie to our list, a
2:54:13
list, a
2:54:13
list, a video. Let's say it's a Blu-ray. And
2:54:16
video. Let's say it's a Blu-ray. And
2:54:16
video. Let's say it's a Blu-ray. And it's in our collection. Now, I can save
2:54:19
it's in our collection. Now, I can save
2:54:19
it's in our collection. Now, I can save and return. And we've got all four items
2:54:25
here. But let's take a look at some of
2:54:27
here. But let's take a look at some of
2:54:27
here. But let's take a look at some of the code for this and see how this
2:54:30
the code for this and see how this
2:54:30
the code for this and see how this works. So in the
2:54:32
works. So in the
2:54:32
works. So in the main
2:54:35
main
2:54:35
main page, we've got separate grid for the
2:54:38
page, we've got separate grid for the
2:54:38
page, we've got separate grid for the stuff at the top. So in the top, we've
2:54:41
stuff at the top. So in the top, we've
2:54:41
stuff at the top. So in the top, we've got the header. We've got a stack panel
2:54:43
got the header. We've got a stack panel
2:54:43
got the header. We've got a stack panel that stacks horizontally for the uh the
2:54:47
that stacks horizontally for the uh the
2:54:47
that stacks horizontally for the uh the label for the drop-own box that filters
2:54:49
label for the drop-own box that filters
2:54:49
label for the drop-own box that filters by type. And then the combo box itself.
2:54:53
by type. And then the combo box itself.
2:54:53
by type. And then the combo box itself. And this is using data binding. So we
2:54:55
And this is using data binding. So we
2:54:55
And this is using data binding. So we can bind to things in our view model to
2:54:59
can bind to things in our view model to
2:54:59
can bind to things in our view model to show them in the UI. So I'm binding the
2:55:01
show them in the UI. So I'm binding the
2:55:01
show them in the UI. So I'm binding the list of items to this list of mediums in
2:55:04
list of items to this list of mediums in
2:55:04
list of items to this list of mediums in the view model. And then I set the
2:55:06
the view model. And then I set the
2:55:06
the view model. And then I set the selected item based on that
2:55:09
selected item based on that
2:55:09
selected item based on that property. And then for the bottom part
2:55:11
property. And then for the bottom part
2:55:11
property. And then for the bottom part I'm using a list view control. And
2:55:14
I'm using a list view control. And
2:55:14
I'm using a list view control. And inside the list view I have both a
2:55:16
inside the list view I have both a
2:55:16
inside the list view I have both a template for the header and a template
2:55:18
template for the header and a template
2:55:18
template for the header and a template for each item in the list.
2:55:23
And you can see for the styling, uh,
2:55:25
And you can see for the styling, uh,
2:55:26
And you can see for the styling, uh, we're using theme resources. This will
2:55:28
we're using theme resources. This will
2:55:28
we're using theme resources. This will make sure it'll pick up the light and
2:55:30
make sure it'll pick up the light and
2:55:30
make sure it'll pick up the light and dark mode or any other color changes
2:55:32
dark mode or any other color changes
2:55:32
dark mode or any other color changes that the user makes in their system. If
2:55:34
that the user makes in their system. If
2:55:34
that the user makes in their system. If you wanted to instead brand it your own
2:55:37
you wanted to instead brand it your own
2:55:37
you wanted to instead brand it your own company colors or something, you could
2:55:39
company colors or something, you could
2:55:39
company colors or something, you could hardcode or create your own theme based
2:55:41
hardcode or create your own theme based
2:55:41
hardcode or create your own theme based on your your company uh logos and
2:55:44
on your your company uh logos and
2:55:44
on your your company uh logos and things.
2:55:47
And at the bottom we have another stack
2:55:49
And at the bottom we have another stack
2:55:49
And at the bottom we have another stack panel that's got the
2:55:52
buttons. These are both
2:55:56
buttons. These are both
2:55:56
buttons. These are both regular standard buttons and these are
2:55:59
regular standard buttons and these are
2:55:59
regular standard buttons and these are binding a command to the view model. So
2:56:02
binding a command to the view model. So
2:56:02
binding a command to the view model. So the um the command is what's going to be
2:56:05
the um the command is what's going to be
2:56:05
the um the command is what's going to be executed when you the user clicks on
2:56:07
executed when you the user clicks on
2:56:07
executed when you the user clicks on there. So it'll go into this addedit
2:56:10
there. So it'll go into this addedit
2:56:10
there. So it'll go into this addedit functionality or the delete. Let's take
2:56:13
functionality or the delete. Let's take
2:56:13
functionality or the delete. Let's take a look at the uh the view model that
2:56:15
a look at the uh the view model that
2:56:15
a look at the uh the view model that corresponds to
2:56:17
corresponds to
2:56:17
corresponds to this. So if you've done any uh ZAML
2:56:20
this. So if you've done any uh ZAML
2:56:20
this. So if you've done any uh ZAML development and used model view model,
2:56:22
development and used model view model,
2:56:22
development and used model view model, you may may have uh done your own
2:56:25
you may may have uh done your own
2:56:25
you may may have uh done your own implementation of uh an observable class
2:56:28
implementation of uh an observable class
2:56:28
implementation of uh an observable class or a bindable class. Uh I'm using the
2:56:32
or a bindable class. Uh I'm using the
2:56:32
or a bindable class. Uh I'm using the MVVM toolkit which is part of the net
2:56:35
MVVM toolkit which is part of the net
2:56:35
MVVM toolkit which is part of the net community toolkit. It's uh open source
2:56:38
community toolkit. It's uh open source
2:56:38
community toolkit. It's uh open source available up on GitHub. you can get
2:56:40
available up on GitHub. you can get
2:56:40
available up on GitHub. you can get references into your project through um
2:56:44
references into your project through um
2:56:44
references into your project through um Nougat. So if I look at our Nougat
2:56:46
Nougat. So if I look at our Nougat
2:56:46
Nougat. So if I look at our Nougat packages
2:56:49
here, let's see, I've got the MVVM
2:56:53
here, let's see, I've got the MVVM
2:56:53
here, let's see, I've got the MVVM toolkit and these are all other standard
2:56:57
toolkit and these are all other standard
2:56:57
toolkit and these are all other standard Win UI packages that you'll have
2:57:00
Win UI packages that you'll have
2:57:00
Win UI packages that you'll have here. So by using the MVVM toolkit, it
2:57:04
here. So by using the MVVM toolkit, it
2:57:04
here. So by using the MVVM toolkit, it reduces a lot of code that you'd
2:57:05
reduces a lot of code that you'd
2:57:05
reduces a lot of code that you'd normally have in your your view model.
2:57:08
normally have in your your view model.
2:57:08
normally have in your your view model. All I need to do is make my view model a
2:57:11
All I need to do is make my view model a
2:57:11
All I need to do is make my view model a partial class and inherit from
2:57:13
partial class and inherit from
2:57:13
partial class and inherit from observable object. And by doing that
2:57:16
observable object. And by doing that
2:57:16
observable object. And by doing that it's going to create it's uses source
2:57:19
it's going to create it's uses source
2:57:19
it's going to create it's uses source generators to create another partial
2:57:21
generators to create another partial
2:57:21
generators to create another partial class with the imple implementation of
2:57:23
class with the imple implementation of
2:57:23
class with the imple implementation of all the public members. So for a
2:57:26
all the public members. So for a
2:57:26
all the public members. So for a property I only need to create the
2:57:27
property I only need to create the
2:57:27
property I only need to create the private member the selected medium in
2:57:30
private member the selected medium in
2:57:30
private member the selected medium in this case and when it builds and runs
2:57:33
this case and when it builds and runs
2:57:33
this case and when it builds and runs it's going to create a public property
2:57:36
it's going to create a public property
2:57:36
it's going to create a public property called selected medium with a capital
2:57:39
called selected medium with a capital
2:57:39
called selected medium with a capital S. So anything that's decorated with
2:57:41
S. So anything that's decorated with
2:57:42
S. So anything that's decorated with observable property will create a
2:57:44
observable property will create a
2:57:44
observable property will create a corresponding public property for you
2:57:46
corresponding public property for you
2:57:46
corresponding public property for you for data binding.
2:57:49
And I can also if I go down to uh my
2:57:53
And I can also if I go down to uh my
2:57:53
And I can also if I go down to uh my commands here. So I've got here's the
2:57:55
commands here. So I've got here's the
2:57:55
commands here. So I've got here's the addedit. You see this is private and
2:57:58
addedit. You see this is private and
2:57:58
addedit. You see this is private and it's just called add edit but I've got
2:58:00
it's just called add edit but I've got
2:58:00
it's just called add edit but I've got this relay command decorating it. So
2:58:02
this relay command decorating it. So
2:58:02
this relay command decorating it. So that creates the addedit command that's
2:58:05
that creates the addedit command that's
2:58:05
that creates the addedit command that's public that'll be
2:58:07
public that'll be
2:58:07
public that'll be bound in the uh main page here. So this
2:58:11
bound in the uh main page here. So this
2:58:11
bound in the uh main page here. So this addedit command is created by the source
2:58:17
generator and then within that command
2:58:19
generator and then within that command
2:58:19
generator and then within that command it calls this private method. So when I
2:58:21
it calls this private method. So when I
2:58:21
it calls this private method. So when I hit the button all of this
2:58:24
hit the button all of this
2:58:24
hit the button all of this executes and if I hit delete this is the
2:58:27
executes and if I hit delete this is the
2:58:27
executes and if I hit delete this is the code that gets
2:58:28
code that gets
2:58:28
code that gets executed. And I've got some code to
2:58:31
executed. And I've got some code to
2:58:31
executed. And I've got some code to validate whether the delete button
2:58:32
validate whether the delete button
2:58:32
validate whether the delete button should be
2:58:33
should be
2:58:33
should be enabled.
2:58:36
enabled.
2:58:36
enabled. Anytime that this
2:58:38
Anytime that this
2:58:38
Anytime that this um can delete item is called, it's going
2:58:41
um can delete item is called, it's going
2:58:41
um can delete item is called, it's going to check if there are any selected
2:58:42
to check if there are any selected
2:58:42
to check if there are any selected items. So, I can only hit delete if
2:58:44
items. So, I can only hit delete if
2:58:44
items. So, I can only hit delete if there's an item selected in my
2:58:49
list. Let's take a quick look at the
2:58:51
list. Let's take a quick look at the
2:58:51
list. Let's take a quick look at the item details, view, and view model.
2:58:54
item details, view, and view model.
2:58:54
item details, view, and view model. We'll look at the view first. Uh we'll
2:58:56
We'll look at the view first. Uh we'll
2:58:56
We'll look at the view first. Uh we'll go down to that teaching tip. So, here's
2:58:58
go down to that teaching tip. So, here's
2:58:58
go down to that teaching tip. So, here's the teaching tip and the split button.
2:59:01
the teaching tip and the split button.
2:59:01
the teaching tip and the split button. So the split button has the drop down
2:59:03
So the split button has the drop down
2:59:03
So the split button has the drop down with the two buttons inside of it. And
2:59:06
with the two buttons inside of it. And
2:59:06
with the two buttons inside of it. And to show those, it uses a flyyou with a
2:59:09
to show those, it uses a flyyou with a
2:59:09
to show those, it uses a flyyou with a stack panel and the two buttons inside
2:59:13
stack panel and the two buttons inside
2:59:13
stack panel and the two buttons inside there. And the teaching tip
2:59:18
here. We just data bind
2:59:20
here. We just data bind
2:59:20
here. We just data bind that to the save button and that will
2:59:24
that to the save button and that will
2:59:24
that to the save button and that will attach it to
2:59:30
that. And in the back here we have some
2:59:34
that. And in the back here we have some
2:59:34
that. And in the back here we have some uh little bit of navigation logic so
2:59:36
uh little bit of navigation logic so
2:59:36
uh little bit of navigation logic so that uh when we open up here we're
2:59:39
that uh when we open up here we're
2:59:39
that uh when we open up here we're setting the uh the teaching tip. This is
2:59:41
setting the uh the teaching tip. This is
2:59:41
setting the uh the teaching tip. This is where it's if you had some local
2:59:45
where it's if you had some local
2:59:45
where it's if you had some local settings, you can check whether the view
2:59:47
settings, you can check whether the view
2:59:48
settings, you can check whether the view the user has already viewed that
2:59:49
the user has already viewed that
2:59:49
the user has already viewed that teaching tip and you can set whether
2:59:50
teaching tip and you can set whether
2:59:50
teaching tip and you can set whether it's visible or not. I just have it
2:59:52
it's visible or not. I just have it
2:59:52
it's visible or not. I just have it hardcoded to false so that we'll see it
2:59:54
hardcoded to false so that we'll see it
2:59:54
hardcoded to false so that we'll see it every time that I do this
2:59:57
demo. And the other bit that's important
3:00:00
demo. And the other bit that's important
3:00:00
demo. And the other bit that's important in the code behind here is whenever we
3:00:02
in the code behind here is whenever we
3:00:02
in the code behind here is whenever we navigate to this page, um, we're just
3:00:05
navigate to this page, um, we're just
3:00:05
navigate to this page, um, we're just populating the initial data if there's
3:00:06
populating the initial data if there's
3:00:06
populating the initial data if there's already a an item selected.
3:00:09
already a an item selected.
3:00:09
already a an item selected. So, if there's an item ID, then we're
3:00:12
So, if there's an item ID, then we're
3:00:12
So, if there's an item ID, then we're going to be editing. If there's no item
3:00:13
going to be editing. If there's no item
3:00:14
going to be editing. If there's no item ID, then we know we're adding a new item
3:00:15
ID, then we know we're adding a new item
3:00:15
ID, then we know we're adding a new item and we should have an empty
3:00:20
form. So, that's the basics of some
3:00:23
form. So, that's the basics of some
3:00:23
form. So, that's the basics of some controls. Let's jump back to the slides
3:00:25
controls. Let's jump back to the slides
3:00:25
controls. Let's jump back to the slides and get to another demo
3:00:29
and get to another demo
3:00:29
and get to another demo here. So, the next one will be the uh
3:00:31
here. So, the next one will be the uh
3:00:31
here. So, the next one will be the uh using the Windows community toolkit. So,
3:00:34
using the Windows community toolkit. So,
3:00:34
using the Windows community toolkit. So, there's the there are different uh
3:00:35
there's the there are different uh
3:00:35
there's the there are different uh community toolkits available from
3:00:37
community toolkits available from
3:00:37
community toolkits available from Microsoft that are open source. There's
3:00:39
Microsoft that are open source. There's
3:00:39
Microsoft that are open source. There's the .NET community toolkit I mentioned
3:00:40
the .NET community toolkit I mentioned
3:00:40
the .NET community toolkit I mentioned with the MVVM stuff in it. The Windows
3:00:43
with the MVVM stuff in it. The Windows
3:00:43
with the MVVM stuff in it. The Windows community toolkit. Um there's some
3:00:45
community toolkit. Um there's some
3:00:45
community toolkit. Um there's some Windows specific stuff. Uh you can use
3:00:47
Windows specific stuff. Uh you can use
3:00:47
Windows specific stuff. Uh you can use the things in there for UWP uh Win UI3
3:00:50
the things in there for UWP uh Win UI3
3:00:50
the things in there for UWP uh Win UI3 and also UNO
3:00:52
and also UNO
3:00:52
and also UNO platform. So there are animations,
3:00:55
platform. So there are animations,
3:00:55
platform. So there are animations, triggers, uh behaviors, controls, and
3:00:57
triggers, uh behaviors, controls, and
3:00:57
triggers, uh behaviors, controls, and other helper classes in the toolkit.
3:00:59
other helper classes in the toolkit.
3:01:00
other helper classes in the toolkit. It's open source on GitHub here. Um
3:01:02
It's open source on GitHub here. Um
3:01:02
It's open source on GitHub here. Um there's documentation on Microsoft Learn
3:01:04
there's documentation on Microsoft Learn
3:01:04
there's documentation on Microsoft Learn about the controls and things in the
3:01:06
about the controls and things in the
3:01:06
about the controls and things in the toolkit. And there's a gallery app on
3:01:09
toolkit. And there's a gallery app on
3:01:09
toolkit. And there's a gallery app on the Microsoft Store. We'll take a look
3:01:11
the Microsoft Store. We'll take a look
3:01:11
the Microsoft Store. We'll take a look at that quick. I've got that open here.
3:01:15
at that quick. I've got that open here.
3:01:15
at that quick. I've got that open here. So, within the gallery, you can explore
3:01:16
So, within the gallery, you can explore
3:01:16
So, within the gallery, you can explore everything in the toolkit and see things
3:01:19
everything in the toolkit and see things
3:01:19
everything in the toolkit and see things working in the UI to see how they look.
3:01:22
working in the UI to see how they look.
3:01:22
working in the UI to see how they look. If I go to go to items
3:01:25
If I go to go to items
3:01:25
If I go to go to items view, so it shows you what the items
3:01:28
view, so it shows you what the items
3:01:28
view, so it shows you what the items view looks like. It's running live here
3:01:30
view looks like. It's running live here
3:01:30
view looks like. It's running live here in the app.
3:01:34
So if I expand the source code, it shows
3:01:36
So if I expand the source code, it shows
3:01:36
So if I expand the source code, it shows me the code that was used to create
3:01:38
me the code that was used to create
3:01:38
me the code that was used to create that. So you can copy and paste from
3:01:40
that. So you can copy and paste from
3:01:40
that. So you can copy and paste from here to get started quickly. Shows you
3:01:43
here to get started quickly. Shows you
3:01:43
here to get started quickly. Shows you the ZAML code for that and also the C
3:01:47
the ZAML code for that and also the C
3:01:47
the ZAML code for that and also the C for any stuff in the code
3:01:49
for any stuff in the code
3:01:49
for any stuff in the code behind. And with some of the samples in
3:01:51
behind. And with some of the samples in
3:01:51
behind. And with some of the samples in the toolkit app, you can change some
3:01:55
the toolkit app, you can change some
3:01:55
the toolkit app, you can change some properties to see how it will look in uh
3:01:57
properties to see how it will look in uh
3:01:57
properties to see how it will look in uh different layouts. So it's got three
3:01:59
different layouts. So it's got three
3:01:59
different layouts. So it's got three different layouts that you can pick from
3:02:00
different layouts that you can pick from
3:02:00
different layouts that you can pick from here.
3:02:02
here.
3:02:02
here. You can change the number
3:02:03
You can change the number
3:02:03
You can change the number of amount of space between them and
3:02:07
of amount of space between them and
3:02:07
of amount of space between them and space these out a little
3:02:15
farther. And we can change the selection
3:02:17
farther. And we can change the selection
3:02:17
farther. And we can change the selection mode for this item. So right now it's
3:02:20
mode for this item. So right now it's
3:02:20
mode for this item. So right now it's multiple. I can select multiple items.
3:02:23
multiple. I can select multiple items.
3:02:23
multiple. I can select multiple items. You can change that to
3:02:25
You can change that to
3:02:25
You can change that to single. So check boxes are gone. You
3:02:27
single. So check boxes are gone. You
3:02:28
single. So check boxes are gone. You just select one at a time.
3:02:34
So, let's take a look at um a sample app
3:02:36
So, let's take a look at um a sample app
3:02:36
So, let's take a look at um a sample app that's got this in
3:02:42
it. So, I've got a community toolkit
3:02:45
it. So, I've got a community toolkit
3:02:45
it. So, I've got a community toolkit solution here. And you'll notice for
3:02:47
solution here. And you'll notice for
3:02:47
solution here. And you'll notice for some of these solutions, I have both an
3:02:49
some of these solutions, I have both an
3:02:49
some of these solutions, I have both an a solution and a solution x slmx. Some
3:02:53
a solution and a solution x slmx. Some
3:02:53
a solution and a solution x slmx. Some people are calling these slinks files.
3:02:56
people are calling these slinks files.
3:02:56
people are calling these slinks files. Uh it's a new solution format that's
3:02:58
Uh it's a new solution format that's
3:02:58
Uh it's a new solution format that's currently in preview. Uh it works with
3:03:00
currently in preview. Uh it works with
3:03:00
currently in preview. Uh it works with the Visual Studio 2022 uh preview
3:03:03
the Visual Studio 2022 uh preview
3:03:03
the Visual Studio 2022 uh preview version. And these are a lot nicer to
3:03:06
version. And these are a lot nicer to
3:03:06
version. And these are a lot nicer to look at if you ever opened a solution
3:03:07
look at if you ever opened a solution
3:03:08
look at if you ever opened a solution file and you've seen all the goods in
3:03:09
file and you've seen all the goods in
3:03:09
file and you've seen all the goods in there. The solution X
3:03:11
there. The solution X
3:03:11
there. The solution X files have no goods and they're they're
3:03:14
files have no goods and they're they're
3:03:14
files have no goods and they're they're much simpler to look at. We won't demo
3:03:16
much simpler to look at. We won't demo
3:03:16
much simpler to look at. We won't demo that here, but you should go check it
3:03:20
out. So here I have a hardware supplies
3:03:23
out. So here I have a hardware supplies
3:03:23
out. So here I have a hardware supplies app. Let's run it first to see what this
3:03:25
app. Let's run it first to see what this
3:03:25
app. Let's run it first to see what this looks
3:03:27
looks
3:03:27
looks like. Call it hardware supplies, but
3:03:29
like. Call it hardware supplies, but
3:03:29
like. Call it hardware supplies, but it's uh got a list of hardware items and
3:03:32
it's uh got a list of hardware items and
3:03:32
it's uh got a list of hardware items and then another color picker control here.
3:03:35
then another color picker control here.
3:03:36
then another color picker control here. So, you'll see I've got a data
3:03:38
So, you'll see I've got a data
3:03:38
So, you'll see I've got a data grid with some hardware items in it. And
3:03:42
grid with some hardware items in it. And
3:03:42
grid with some hardware items in it. And this control, I can resize the columns
3:03:44
this control, I can resize the columns
3:03:44
this control, I can resize the columns nicely, like your basic data grid
3:03:46
nicely, like your basic data grid
3:03:46
nicely, like your basic data grid functionality. And you'll see I've also
3:03:48
functionality. And you'll see I've also
3:03:48
functionality. And you'll see I've also got a little shadow around here. And
3:03:51
got a little shadow around here. And
3:03:51
got a little shadow around here. And I've got some text here with a shadow on
3:03:54
I've got some text here with a shadow on
3:03:54
I've got some text here with a shadow on it. And my color picker control. I'm
3:03:57
it. And my color picker control. I'm
3:03:57
it. And my color picker control. I'm using data binding to bind to this
3:03:59
using data binding to bind to this
3:03:59
using data binding to bind to this shadow color. So if I
3:04:01
shadow color. So if I
3:04:01
shadow color. So if I change the color that I've picked here,
3:04:04
change the color that I've picked here,
3:04:04
change the color that I've picked here, it changes my shadows in real
3:04:10
time. Anything I change there changes.
3:04:13
time. Anything I change there changes.
3:04:13
time. Anything I change there changes. You can change the
3:04:15
You can change the
3:04:15
You can change the uh type of selection.
3:04:23
And that's uh one of the controls in the
3:04:25
And that's uh one of the controls in the
3:04:25
And that's uh one of the controls in the community toolkit. Let's take a look at
3:04:26
community toolkit. Let's take a look at
3:04:26
community toolkit. Let's take a look at um the code for
3:04:30
this. So in our main
3:04:39
window, there we
3:04:41
window, there we
3:04:41
window, there we go. So I've got the Micah backdrop on
3:04:43
go. So I've got the Micah backdrop on
3:04:43
go. So I've got the Micah backdrop on here as
3:04:44
here as
3:04:45
here as well. And for the drop
3:04:47
well. And for the drop
3:04:47
well. And for the drop shadow using an attached drop shadow
3:04:50
shadow using an attached drop shadow
3:04:50
shadow using an attached drop shadow from the toolkit. I named it common
3:04:54
from the toolkit. I named it common
3:04:54
from the toolkit. I named it common shadow and I'm binding that to the uh
3:04:57
shadow and I'm binding that to the uh
3:04:57
shadow and I'm binding that to the uh the color
3:05:01
picker and setting the path to color. So
3:05:04
picker and setting the path to color. So
3:05:04
picker and setting the path to color. So that's telling it to pick up the color
3:05:06
that's telling it to pick up the color
3:05:06
that's telling it to pick up the color property from the color picker and use
3:05:08
property from the color picker and use
3:05:08
property from the color picker and use that for the shadow color.
3:05:12
And then down here, this header content
3:05:14
And then down here, this header content
3:05:14
And then down here, this header content control, that's the uh that was the
3:05:16
control, that's the uh that was the
3:05:16
control, that's the uh that was the header at the
3:05:20
top. And I've got a drop shadow panel,
3:05:23
top. And I've got a drop shadow panel,
3:05:23
top. And I've got a drop shadow panel, which is also binding to the color
3:05:27
which is also binding to the color
3:05:27
which is also binding to the color picker to pick up that shadow
3:05:31
color. And this is my data grid. All I'm
3:05:34
color. And this is my data grid. All I'm
3:05:34
color. And this is my data grid. All I'm doing here is binding the item source to
3:05:37
doing here is binding the item source to
3:05:37
doing here is binding the item source to a list of hardware items that are
3:05:38
a list of hardware items that are
3:05:38
a list of hardware items that are hardcoded in the the back
3:05:41
hardcoded in the the back
3:05:41
hardcoded in the the back go behind
3:05:44
here. It's got some code to add a bunch
3:05:47
here. It's got some code to add a bunch
3:05:47
here. It's got some code to add a bunch of items to that
3:05:52
list. And then finally, got a grid at
3:05:55
list. And then finally, got a grid at
3:05:55
list. And then finally, got a grid at the bottom that
3:05:57
the bottom that
3:05:57
the bottom that contains the uh text block for the uh
3:06:02
contains the uh text block for the uh
3:06:02
contains the uh text block for the uh the final shadow says I love hardware
3:06:04
the final shadow says I love hardware
3:06:04
the final shadow says I love hardware and all related
3:06:06
and all related
3:06:06
and all related supplies. And I set the uh
3:06:08
supplies. And I set the uh
3:06:08
supplies. And I set the uh effects.shadow shadow property to the
3:06:10
effects.shadow shadow property to the
3:06:10
effects.shadow shadow property to the common shadow that's up in the resource
3:06:12
common shadow that's up in the resource
3:06:12
common shadow that's up in the resource at the
3:06:16
top. And finally, the color picker. It's
3:06:19
top. And finally, the color picker. It's
3:06:19
top. And finally, the color picker. It's got a lot of different properties you
3:06:20
got a lot of different properties you
3:06:20
got a lot of different properties you can set. So, I'm setting the spectrum
3:06:23
can set. So, I'm setting the spectrum
3:06:23
can set. So, I'm setting the spectrum shape to a
3:06:26
shape to a
3:06:26
shape to a ring. You can enable and disable some
3:06:28
ring. You can enable and disable some
3:06:28
ring. You can enable and disable some different things about whether you want
3:06:29
different things about whether you want
3:06:29
different things about whether you want to have the different sliders and other
3:06:32
to have the different sliders and other
3:06:32
to have the different sliders and other picking elements available.
3:06:34
picking elements available.
3:06:34
picking elements available. And then I'm setting the default color
3:06:36
And then I'm setting the default color
3:06:36
And then I'm setting the default color when it launches to be my system accent
3:06:39
when it launches to be my system accent
3:06:39
when it launches to be my system accent color. So whatever the user's uh system
3:06:41
color. So whatever the user's uh system
3:06:41
color. So whatever the user's uh system accent color is in Windows, that'll be
3:06:43
accent color is in Windows, that'll be
3:06:43
accent color is in Windows, that'll be the the color of the shadows when you
3:06:45
the the color of the shadows when you
3:06:45
the the color of the shadows when you first
3:06:49
launch. And in the code behind, like I
3:06:52
launch. And in the code behind, like I
3:06:52
launch. And in the code behind, like I said, there's just the hardware items
3:06:54
said, there's just the hardware items
3:06:54
said, there's just the hardware items and then we've got the code to set the
3:06:56
and then we've got the code to set the
3:06:56
and then we've got the code to set the uh title bar up.
3:07:02
All right, let's move on to another demo
3:07:06
All right, let's move on to another demo
3:07:06
All right, let's move on to another demo here. We should have time to get to a
3:07:07
here. We should have time to get to a
3:07:07
here. We should have time to get to a couple
3:07:11
more
3:07:13
more
3:07:13
more notifications. So, the uh notifications
3:07:16
notifications. So, the uh notifications
3:07:16
notifications. So, the uh notifications API in the Windows app SDK lets you use
3:07:18
API in the Windows app SDK lets you use
3:07:18
API in the Windows app SDK lets you use uh toast notifications in Windows. And
3:07:21
uh toast notifications in Windows. And
3:07:21
uh toast notifications in Windows. And there's a couple different types that we
3:07:22
there's a couple different types that we
3:07:22
there's a couple different types that we can create here. Let's uh pop open that
3:07:26
can create here. Let's uh pop open that
3:07:26
can create here. Let's uh pop open that demo project.
3:07:32
And most of these demos are adapted from
3:07:34
And most of these demos are adapted from
3:07:34
And most of these demos are adapted from samples in my book. I've got that
3:07:36
samples in my book. I've got that
3:07:36
samples in my book. I've got that chapter on notifications that I pulled
3:07:38
chapter on notifications that I pulled
3:07:38
chapter on notifications that I pulled this demo
3:07:42
from. So, we've got the media collection
3:07:45
from. So, we've got the media collection
3:07:45
from. So, we've got the media collection app again, but it's been enhanced a
3:07:46
app again, but it's been enhanced a
3:07:46
app again, but it's been enhanced a little
3:07:48
little
3:07:48
little bit. Let's launch
3:07:52
bit. Let's launch
3:07:52
bit. Let's launch this. We've got a couple of extra
3:07:54
this. We've got a couple of extra
3:07:54
this. We've got a couple of extra buttons at the bottom when this opens
3:07:56
buttons at the bottom when this opens
3:07:56
buttons at the bottom when this opens up.
3:08:02
So, we don't have the
3:08:04
So, we don't have the
3:08:04
So, we don't have the uh special title bar here. It's got the
3:08:06
uh special title bar here. It's got the
3:08:06
uh special title bar here. It's got the standard title bar that you get out of
3:08:08
standard title bar that you get out of
3:08:08
standard title bar that you get out of the box, but we do have some new buttons
3:08:10
the box, but we do have some new buttons
3:08:10
the box, but we do have some new buttons down here for notifications. So, we can
3:08:13
down here for notifications. So, we can
3:08:13
down here for notifications. So, we can send a notification or we can send a
3:08:15
send a notification or we can send a
3:08:15
send a notification or we can send a notification that will also have a text
3:08:18
notification that will also have a text
3:08:18
notification that will also have a text box for a reply. So, let's try the
3:08:20
box for a reply. So, let's try the
3:08:20
box for a reply. So, let's try the initial regular notification.
3:08:24
initial regular notification.
3:08:24
initial regular notification. You can see pops up a toast. And if your
3:08:28
You can see pops up a toast. And if your
3:08:28
You can see pops up a toast. And if your app is behind something, I can click
3:08:30
app is behind something, I can click
3:08:30
app is behind something, I can click open app and it brings it to the
3:08:32
open app and it brings it to the
3:08:32
open app and it brings it to the front and I get a popup saying we
3:08:35
front and I get a popup saying we
3:08:35
front and I get a popup saying we received this
3:08:37
received this
3:08:37
received this notification to open the
3:08:39
notification to open the
3:08:39
notification to open the app. We'll hit okay there. I'm also
3:08:42
app. We'll hit okay there. I'm also
3:08:42
app. We'll hit okay there. I'm also using a status bar to show the uh
3:08:44
using a status bar to show the uh
3:08:44
using a status bar to show the uh current
3:08:45
current
3:08:45
current status. Last thing that happened was a
3:08:47
status. Last thing that happened was a
3:08:47
status. Last thing that happened was a notification was
3:08:48
notification was
3:08:48
notification was received. The next notification we'll
3:08:51
received. The next notification we'll
3:08:51
received. The next notification we'll send will have that text box.
3:08:54
send will have that text box.
3:08:54
send will have that text box. Here's our toast. And now I can enter a
3:09:08
reply. So I've received that. If your
3:09:11
reply. So I've received that. If your
3:09:11
reply. So I've received that. If your app was in the back, it would have
3:09:12
app was in the back, it would have
3:09:12
app was in the back, it would have brought it to the front again, but our
3:09:13
brought it to the front again, but our
3:09:13
brought it to the front again, but our app was at the
3:09:15
app was at the
3:09:15
app was at the front. Here's the uh reply. It says
3:09:18
front. Here's the uh reply. It says
3:09:18
front. Here's the uh reply. It says input received was hello C# TV.
3:09:22
input received was hello C# TV.
3:09:22
input received was hello C# TV. and we click okay
3:09:24
and we click okay
3:09:24
and we click okay there. So let's take a quick look at how
3:09:27
there. So let's take a quick look at how
3:09:27
there. So let's take a quick look at how that code is implemented. But um there's
3:09:30
that code is implemented. But um there's
3:09:30
that code is implemented. But um there's a link in my uh list of links in GitHub
3:09:34
a link in my uh list of links in GitHub
3:09:34
a link in my uh list of links in GitHub that points you to the Microsoft learn
3:09:36
that points you to the Microsoft learn
3:09:36
that points you to the Microsoft learn article that could walk you through all
3:09:37
article that could walk you through all
3:09:37
article that could walk you through all of this step by
3:09:39
of this step by
3:09:39
of this step by step. So we have a few extra classes
3:09:42
step. So we have a few extra classes
3:09:42
step. So we have a few extra classes here. Let's go to the helpers. We've got
3:09:46
here. Let's go to the helpers. We've got
3:09:46
here. Let's go to the helpers. We've got toast with text and toast with avatar.
3:09:48
toast with text and toast with avatar.
3:09:48
toast with text and toast with avatar. These are two different uh they're like
3:09:50
These are two different uh they're like
3:09:50
These are two different uh they're like templates for creating your
3:09:54
toast. So here when I send the
3:09:58
toast. So here when I send the
3:09:58
toast. So here when I send the toast I'm adding arguments
3:10:02
toast I'm adding arguments
3:10:02
toast I'm adding arguments for the different scenarios I have. Um
3:10:05
for the different scenarios I have. Um
3:10:05
for the different scenarios I have. Um I'm telling
3:10:07
I'm telling
3:10:07
I'm telling it to use this
3:10:10
it to use this
3:10:10
it to use this icon cropping the image to a circle when
3:10:13
icon cropping the image to a circle when
3:10:13
icon cropping the image to a circle when it appears on the toast. Here's the text
3:10:17
it appears on the toast. Here's the text
3:10:17
it appears on the toast. Here's the text that will appear on the
3:10:19
that will appear on the
3:10:19
that will appear on the toast. And this is the uh text box.
3:10:22
toast. And this is the uh text box.
3:10:22
toast. And this is the uh text box. We're adding a text box to it. And this
3:10:25
We're adding a text box to it. And this
3:10:26
We're adding a text box to it. And this is the
3:10:27
is the
3:10:27
is the pre-populated text that will show in the
3:10:29
pre-populated text that will show in the
3:10:29
pre-populated text that will show in the text box for the
3:10:31
text box for the
3:10:31
text box for the user. And there's a button. So the
3:10:33
user. And there's a button. So the
3:10:33
user. And there's a button. So the button on the toast says reply. And the
3:10:37
button on the toast says reply. And the
3:10:37
button on the toast says reply. And the action is reply. And that's what we got
3:10:38
action is reply. And that's what we got
3:10:38
action is reply. And that's what we got back in the message that appeared on the
3:10:41
back in the message that appeared on the
3:10:41
back in the message that appeared on the screen.
3:10:43
screen.
3:10:44
screen. If we look at the other one, the one
3:10:45
If we look at the other one, the one
3:10:45
If we look at the other one, the one without the text box, it looks pretty
3:10:47
without the text box, it looks pretty
3:10:47
without the text box, it looks pretty similar, but we don't
3:10:49
similar, but we don't
3:10:49
similar, but we don't have we just go from text to button. We
3:10:51
have we just go from text to button. We
3:10:52
have we just go from text to button. We don't have the text box in this
3:10:57
one. And then we've got a notification
3:11:03
manager. This is where we register to
3:11:06
manager. This is where we register to
3:11:06
manager. This is where we register to receive notifications.
3:11:12
So in the initialize
3:11:14
So in the initialize
3:11:15
So in the initialize here, we're setting up an event handler
3:11:17
here, we're setting up an event handler
3:11:17
here, we're setting up an event handler to find out when notifications are
3:11:20
to find out when notifications are
3:11:20
to find out when notifications are invoked and calling this register on the
3:11:23
invoked and calling this register on the
3:11:23
invoked and calling this register on the the
3:11:24
the
3:11:24
the handler. When messages are received,
3:11:27
handler. When messages are received,
3:11:27
handler. When messages are received, we're going to process them
3:11:30
we're going to process them
3:11:30
we're going to process them here. Send the notification out to
3:11:33
here. Send the notification out to
3:11:33
here. Send the notification out to Windows. And then this is this
3:11:36
Windows. And then this is this
3:11:36
Windows. And then this is this notification
3:11:40
shared. These are all the updates that
3:11:42
shared. These are all the updates that
3:11:42
shared. These are all the updates that we received in that status bar. So the
3:11:45
we received in that status bar. So the
3:11:45
we received in that status bar. So the status bar in the app gets updated based
3:11:46
status bar in the app gets updated based
3:11:46
status bar in the app gets updated based on which one of these we've called from
3:11:48
on which one of these we've called from
3:11:48
on which one of these we've called from the manager
3:11:51
class. And
3:11:54
class. And
3:11:54
class. And finally notification
3:11:57
finally notification
3:11:57
finally notification received. If there's any issues, we just
3:12:01
received. If there's any issues, we just
3:12:01
received. If there's any issues, we just pop up a message saying there was some
3:12:03
pop up a message saying there was some
3:12:03
pop up a message saying there was some uh
3:12:05
uh
3:12:05
uh unrecognized message that was
3:12:10
received. And like I said, this is all
3:12:12
received. And like I said, this is all
3:12:12
received. And like I said, this is all out on learn. Uh this is my speaking
3:12:15
out on learn. Uh this is my speaking
3:12:16
out on learn. Uh this is my speaking repo, but this is the page within this
3:12:19
repo, but this is the page within this
3:12:19
repo, but this is the page within this conferences stuff. So I've got all the
3:12:21
conferences stuff. So I've got all the
3:12:21
conferences stuff. So I've got all the links for all this. And if you go to the
3:12:26
links for all this. And if you go to the
3:12:26
links for all this. And if you go to the notifications here, Windows App SDK app
3:12:32
notifications. So, this overview gives
3:12:34
notifications. So, this overview gives
3:12:34
notifications. So, this overview gives you a little info, but then there's a a
3:12:36
you a little info, but then there's a a
3:12:36
you a little info, but then there's a a quick start that walks you through all
3:12:39
quick start that walks you through all
3:12:39
quick start that walks you through all of this on how to set up the uh
3:12:42
of this on how to set up the uh
3:12:42
of this on how to set up the uh notifications for your own
3:12:49
apps. All right. Next, we don't probably
3:12:53
apps. All right. Next, we don't probably
3:12:53
apps. All right. Next, we don't probably have time to go through all the interop
3:12:55
have time to go through all the interop
3:12:55
have time to go through all the interop uh demos, but there are a couple
3:12:57
uh demos, but there are a couple
3:12:57
uh demos, but there are a couple different ways that you can do
3:13:00
different ways that you can do
3:13:00
different ways that you can do interop. So, there's ZAML islands. So,
3:13:03
interop. So, there's ZAML islands. So,
3:13:03
interop. So, there's ZAML islands. So, this was added in Windows App SDK 1.4
3:13:06
this was added in Windows App SDK 1.4
3:13:07
this was added in Windows App SDK 1.4 four. And uh right now they're still
3:13:09
four. And uh right now they're still
3:13:09
four. And uh right now they're still working on enhancing this, but you can
3:13:11
working on enhancing this, but you can
3:13:11
working on enhancing this, but you can only use the ZAML islands to uh
3:13:15
only use the ZAML islands to uh
3:13:15
only use the ZAML islands to uh show uh Windows app SDK Win UI stuff
3:13:18
show uh Windows app SDK Win UI stuff
3:13:18
show uh Windows app SDK Win UI stuff within a C++ app. So you can't use this
3:13:21
within a C++ app. So you can't use this
3:13:21
within a C++ app. So you can't use this in other uh Windforms or WPF apps yet.
3:13:25
in other uh Windforms or WPF apps yet.
3:13:25
in other uh Windforms or WPF apps yet. Um but there there's a sample up on
3:13:27
Um but there there's a sample up on
3:13:27
Um but there there's a sample up on GitHub from the team that shows you how
3:13:29
GitHub from the team that shows you how
3:13:29
GitHub from the team that shows you how to implement this in a C++ app. And I do
3:13:31
to implement this in a C++ app. And I do
3:13:31
to implement this in a C++ app. And I do also have the code in my repo.
3:13:37
And we don't have time to walk through
3:13:38
And we don't have time to walk through
3:13:38
And we don't have time to walk through the code, but I can run this quickly and
3:13:40
the code, but I can run this quickly and
3:13:40
the code, but I can run this quickly and show you how it
3:13:49
works. Let's run this. So, this is a a
3:13:52
works. Let's run this. So, this is a a
3:13:52
works. Let's run this. So, this is a a C++ project and it's within here it's
3:13:56
C++ project and it's within here it's
3:13:56
C++ project and it's within here it's got a couple of Win32 buttons. These are
3:13:58
got a couple of Win32 buttons. These are
3:13:58
got a couple of Win32 buttons. These are C++
3:14:00
C++
3:14:00
C++ buttons. And then within there, it's
3:14:02
buttons. And then within there, it's
3:14:02
buttons. And then within there, it's also got some Win UI content. So
3:14:05
also got some Win UI content. So
3:14:05
also got some Win UI content. So everything from this toolbar down is all
3:14:09
everything from this toolbar down is all
3:14:09
everything from this toolbar down is all WinUI content. So we've got a web view
3:14:11
WinUI content. So we've got a web view
3:14:11
WinUI content. So we've got a web view control that's when UUI. It's got some
3:14:14
control that's when UUI. It's got some
3:14:14
control that's when UUI. It's got some uh WinUI
3:14:17
uh WinUI
3:14:17
uh WinUI buttons, text
3:14:20
buttons, text
3:14:20
buttons, text box. So all this is embedded within the
3:14:23
box. So all this is embedded within the
3:14:23
box. So all this is embedded within the C++
3:14:29
app. And the other way that you can do
3:14:32
app. And the other way that you can do
3:14:32
app. And the other way that you can do interop, let's go back to PowerPoint.
3:14:35
interop, let's go back to PowerPoint.
3:14:35
interop, let's go back to PowerPoint. So you can use the web view control to
3:14:37
So you can use the web view control to
3:14:37
So you can use the web view control to embed uh web content within your WinUI
3:14:41
embed uh web content within your WinUI
3:14:41
embed uh web content within your WinUI apps. And I have a sample that embeds a
3:14:44
apps. And I have a sample that embeds a
3:14:44
apps. And I have a sample that embeds a Blazer app inside there. So let's run
3:14:48
Blazer app inside there. So let's run
3:14:48
Blazer app inside there. So let's run that quickly just to show you what that
3:14:50
that quickly just to show you what that
3:14:50
that quickly just to show you what that looks
3:14:51
looks
3:14:51
looks like. So I've got two projects in here.
3:14:54
like. So I've got two projects in here.
3:14:54
like. So I've got two projects in here. I've got a Blazer project that uses web
3:14:57
I've got a Blazer project that uses web
3:14:57
I've got a Blazer project that uses web assembly and I have that running out on
3:14:59
assembly and I have that running out on
3:14:59
assembly and I have that running out on the web so we don't have to kick that
3:15:00
the web so we don't have to kick that
3:15:00
the web so we don't have to kick that off here. This is my WinUI project. And
3:15:03
off here. This is my WinUI project. And
3:15:03
off here. This is my WinUI project. And this will just load up our Blazer
3:15:06
this will just load up our Blazer
3:15:06
this will just load up our Blazer content from the
3:15:09
web. Let's run
3:15:14
this. And when this opens, it's just
3:15:17
this. And when this opens, it's just
3:15:17
this. And when this opens, it's just going to be a WinUI shell with your
3:15:19
going to be a WinUI shell with your
3:15:19
going to be a WinUI shell with your basic uh Blazer Hello World app. This is
3:15:23
basic uh Blazer Hello World app. This is
3:15:23
basic uh Blazer Hello World app. This is what you get when you create a new
3:15:25
what you get when you create a new
3:15:25
what you get when you create a new Blazer project. Most of you are probably
3:15:27
Blazer project. Most of you are probably
3:15:27
Blazer project. Most of you are probably familiar with this.
3:15:29
familiar with this.
3:15:29
familiar with this. This is all running in the
3:15:32
This is all running in the
3:15:32
This is all running in the web. Take a look at this code
3:15:37
quickly. Crl
3:15:40
quickly. Crl
3:15:40
quickly. Crl C. So the only thing in here is the web
3:15:42
C. So the only thing in here is the web
3:15:42
C. So the only thing in here is the web view control. And I'm just pointing it
3:15:44
view control. And I'm just pointing it
3:15:44
view control. And I'm just pointing it out to where my Blazer app is running
3:15:48
online. Nothing else here. Nothing in
3:15:50
online. Nothing else here. Nothing in
3:15:50
online. Nothing else here. Nothing in the code behind. It's just loading up
3:15:52
the code behind. It's just loading up
3:15:52
the code behind. It's just loading up the Blazer app.
3:15:57
Let's jump back to the slides and see if
3:15:59
Let's jump back to the slides and see if
3:15:59
Let's jump back to the slides and see if we can get through a couple more quick
3:16:01
we can get through a couple more quick
3:16:01
we can get through a couple more quick things. Uh deployment options. So there
3:16:05
things. Uh deployment options. So there
3:16:05
things. Uh deployment options. So there are different ways that you can package
3:16:06
are different ways that you can package
3:16:06
are different ways that you can package your app, your WinUI apps. Um you can
3:16:08
your app, your WinUI apps. Um you can
3:16:08
your app, your WinUI apps. Um you can make them framework dependent or
3:16:11
make them framework dependent or
3:16:12
make them framework dependent or self-contained. So framework dependent
3:16:13
self-contained. So framework dependent
3:16:13
self-contained. So framework dependent apps depend on the Windows app SDK
3:16:16
apps depend on the Windows app SDK
3:16:16
apps depend on the Windows app SDK runtime being on the client machine.
3:16:19
runtime being on the client machine.
3:16:19
runtime being on the client machine. um and self-contained apps you when you
3:16:21
um and self-contained apps you when you
3:16:21
um and self-contained apps you when you deploy your app you're deploying the
3:16:23
deploy your app you're deploying the
3:16:23
deploy your app you're deploying the Windows app SDK runtime with your app.
3:16:25
Windows app SDK runtime with your app.
3:16:25
Windows app SDK runtime with your app. So you have more control over uh the
3:16:28
So you have more control over uh the
3:16:28
So you have more control over uh the size of or you have more control over
3:16:30
size of or you have more control over
3:16:30
size of or you have more control over the versioning of your package that your
3:16:33
the versioning of your package that your
3:16:33
the versioning of your package that your app has. Uh but the the size is going to
3:16:35
app has. Uh but the the size is going to
3:16:35
app has. Uh but the the size is going to be obviously much bigger when you're
3:16:37
be obviously much bigger when you're
3:16:37
be obviously much bigger when you're deploying the uh whole runtime along
3:16:39
deploying the uh whole runtime along
3:16:39
deploying the uh whole runtime along with your
3:16:40
with your
3:16:40
with your app. Uh you can deploy out to the
3:16:42
app. Uh you can deploy out to the
3:16:42
app. Uh you can deploy out to the Microsoft store. Uh you can deploy
3:16:46
Microsoft store. Uh you can deploy
3:16:46
Microsoft store. Uh you can deploy through winget. So up on the wingget
3:16:48
through winget. So up on the wingget
3:16:48
through winget. So up on the wingget repository, you can put your app up
3:16:50
repository, you can put your app up
3:16:50
repository, you can put your app up there. Uh there's ways that you can
3:16:52
there. Uh there's ways that you can
3:16:52
there. Uh there's ways that you can sideloadad. Um I've got a link here for
3:16:55
sideloadad. Um I've got a link here for
3:16:55
sideloadad. Um I've got a link here for instructions of how Net Maui Windows
3:16:58
instructions of how Net Maui Windows
3:16:58
instructions of how Net Maui Windows apps can be sideloaded and that same
3:17:01
apps can be sideloaded and that same
3:17:01
apps can be sideloaded and that same process works for any WinUI
3:17:03
process works for any WinUI
3:17:03
process works for any WinUI app. And there are also thirdparty
3:17:06
app. And there are also thirdparty
3:17:06
app. And there are also thirdparty installers. So install shield, uh
3:17:09
installers. So install shield, uh
3:17:09
installers. So install shield, uh advanced installer, all those things can
3:17:10
advanced installer, all those things can
3:17:10
advanced installer, all those things can work with your WinUI apps.
3:17:16
And we won't be able to get into Uno
3:17:19
And we won't be able to get into Uno
3:17:19
And we won't be able to get into Uno platform but uh I can explain quickly.
3:17:22
platform but uh I can explain quickly.
3:17:22
platform but uh I can explain quickly. So UNO platform is um multiplatform
3:17:26
So UNO platform is um multiplatform
3:17:26
So UNO platform is um multiplatform solution kind of like Net Maui but they
3:17:28
solution kind of like Net Maui but they
3:17:28
solution kind of like Net Maui but they can also run on Linux and on the web
3:17:31
can also run on Linux and on the web
3:17:31
can also run on Linux and on the web with web assembly. So you can create a
3:17:33
with web assembly. So you can create a
3:17:33
with web assembly. So you can create a single codebase that runs on iOS,
3:17:35
single codebase that runs on iOS,
3:17:35
single codebase that runs on iOS, Android, Windows, Linux uh just about
3:17:38
Android, Windows, Linux uh just about
3:17:38
Android, Windows, Linux uh just about any platform all from the single uh
3:17:40
any platform all from the single uh
3:17:40
any platform all from the single uh codebase. And the ZAML used in UNO
3:17:43
codebase. And the ZAML used in UNO
3:17:43
codebase. And the ZAML used in UNO platform is WinUI ZAML. uh in my book in
3:17:46
platform is WinUI ZAML. uh in my book in
3:17:46
platform is WinUI ZAML. uh in my book in the one chapter where I show an UNO
3:17:48
the one chapter where I show an UNO
3:17:48
the one chapter where I show an UNO platform demo. I just take my Win UI
3:17:50
platform demo. I just take my Win UI
3:17:50
platform demo. I just take my Win UI code and I copy and paste it into an Uno
3:17:53
code and I copy and paste it into an Uno
3:17:53
code and I copy and paste it into an Uno solution and it's the exact same code
3:17:55
solution and it's the exact same code
3:17:55
solution and it's the exact same code that I can now run on any
3:17:58
that I can now run on any
3:17:58
that I can now run on any platform. And the latest releases of Uno
3:18:01
platform. And the latest releases of Uno
3:18:01
platform. And the latest releases of Uno also have a hot design which lets you um
3:18:04
also have a hot design which lets you um
3:18:04
also have a hot design which lets you um drag and drop design your apps at
3:18:07
drag and drop design your apps at
3:18:07
drag and drop design your apps at runtime. So while you're running your
3:18:09
runtime. So while you're running your
3:18:09
runtime. So while you're running your app, you can open up this designer and
3:18:11
app, you can open up this designer and
3:18:11
app, you can open up this designer and make changes and it'll save those
3:18:12
make changes and it'll save those
3:18:12
make changes and it'll save those changes back to your project. and see
3:18:15
changes back to your project. and see
3:18:15
changes back to your project. and see them uh at
3:18:20
runtime and we're not doing the demo of
3:18:23
runtime and we're not doing the demo of
3:18:23
runtime and we're not doing the demo of Uno. Uh final thing here, the WinUI road
3:18:27
Uno. Uh final thing here, the WinUI road
3:18:27
Uno. Uh final thing here, the WinUI road map. So, Windows App SDK 1.7 was just
3:18:30
map. So, Windows App SDK 1.7 was just
3:18:30
map. So, Windows App SDK 1.7 was just released and 1.8 is up next. Uh they
3:18:34
released and 1.8 is up next. Uh they
3:18:34
released and 1.8 is up next. Uh they just released the first experimental
3:18:36
just released the first experimental
3:18:36
just released the first experimental release of 1.8.
3:18:39
release of 1.8.
3:18:39
release of 1.8. Uh the new things in 1.7 were a lot of
3:18:42
Uh the new things in 1.7 were a lot of
3:18:42
Uh the new things in 1.7 were a lot of things that people had in UWP that were
3:18:45
things that people had in UWP that were
3:18:45
things that people had in UWP that were missing. Um background task manager is
3:18:48
missing. Um background task manager is
3:18:48
missing. Um background task manager is now available in WinUI. Uh camera
3:18:50
now available in WinUI. Uh camera
3:18:50
now available in WinUI. Uh camera capture UI so you can use the camera in
3:18:53
capture UI so you can use the camera in
3:18:53
capture UI so you can use the camera in your PC to capture images. Uh the new
3:18:56
your PC to capture images. Uh the new
3:18:56
your PC to capture images. Uh the new title bar we saw and the OOTH manager so
3:18:59
title bar we saw and the OOTH manager so
3:18:59
title bar we saw and the OOTH manager so you can do OOTH authentication in your
3:19:02
you can do OOTH authentication in your
3:19:02
you can do OOTH authentication in your apps. And they're working on a ZAML
3:19:05
apps. And they're working on a ZAML
3:19:05
apps. And they're working on a ZAML designer. Right now there's no UI
3:19:09
designer. Right now there's no UI
3:19:09
designer. Right now there's no UI designer for WinUI apps. You have to
3:19:11
designer for WinUI apps. You have to
3:19:11
designer for WinUI apps. You have to handcode all your ZAML. Uh but they have
3:19:13
handcode all your ZAML. Uh but they have
3:19:13
handcode all your ZAML. Uh but they have started work on a ZAML designer in 1.7
3:19:16
started work on a ZAML designer in 1.7
3:19:16
started work on a ZAML designer in 1.7 and they'll continue that work in
3:19:19
and they'll continue that work in
3:19:19
and they'll continue that work in 1.8. And this QR code goes out to the
3:19:22
1.8. And this QR code goes out to the
3:19:22
1.8. And this QR code goes out to the road map for Windows app
3:19:26
road map for Windows app
3:19:26
road map for Windows app SDK. And let's see if we have a minute
3:19:30
SDK. And let's see if we have a minute
3:19:30
SDK. And let's see if we have a minute left. I have one other demo that's not
3:19:32
left. I have one other demo that's not
3:19:32
left. I have one other demo that's not part of the slides, but it's pretty
3:19:33
part of the slides, but it's pretty
3:19:33
part of the slides, but it's pretty cool. Um, in the current experimental
3:19:36
cool. Um, in the current experimental
3:19:36
cool. Um, in the current experimental releases of Windows App SDK, there's
3:19:38
releases of Windows App SDK, there's
3:19:38
releases of Windows App SDK, there's some AI stuff that you can
3:19:40
some AI stuff that you can
3:19:41
some AI stuff that you can do. So, this Windows Copilot
3:19:47
runtime, this uh project can only run if
3:19:50
runtime, this uh project can only run if
3:19:50
runtime, this uh project can only run if you have a Copilot Plus PC that's got
3:19:52
you have a Copilot Plus PC that's got
3:19:52
you have a Copilot Plus PC that's got the local uh Fi Silica AI model on
3:19:56
the local uh Fi Silica AI model on
3:19:56
the local uh Fi Silica AI model on it. So, what this
3:19:59
it. So, what this
3:19:59
it. So, what this has, let's just run it and you'll see
3:20:02
has, let's just run it and you'll see
3:20:02
has, let's just run it and you'll see what we've got.
3:20:04
what we've got.
3:20:04
what we've got. So, this is going to use the local model
3:20:05
So, this is going to use the local model
3:20:05
So, this is going to use the local model on my
3:20:06
on my
3:20:07
on my machine. And if I pop up task manager,
3:20:10
machine. And if I pop up task manager,
3:20:10
machine. And if I pop up task manager, we can
3:20:11
we can
3:20:11
we can watch the uh MPU do its work. So, here's
3:20:16
watch the uh MPU do its work. So, here's
3:20:16
watch the uh MPU do its work. So, here's my MPU, my neural processing unit on my
3:20:22
machine. And you'll be able to see the
3:20:24
machine. And you'll be able to see the
3:20:24
machine. And you'll be able to see the uh the GPU and CPU activity as well as
3:20:28
uh the GPU and CPU activity as well as
3:20:28
uh the GPU and CPU activity as well as we run this demo. Let's see if we can
3:20:30
we run this demo. Let's see if we can
3:20:30
we run this demo. Let's see if we can resize this a little bit to get
3:20:31
resize this a little bit to get
3:20:31
resize this a little bit to get everything to fit.
3:20:42
All
3:20:43
All
3:20:43
All right. So here I have a prompt provide
3:20:46
right. So here I have a prompt provide
3:20:46
right. So here I have a prompt provide the molecular formula for gl glucose and
3:20:48
the molecular formula for gl glucose and
3:20:48
the molecular formula for gl glucose and explain its properties. And we're asking
3:20:51
explain its properties. And we're asking
3:20:51
explain its properties. And we're asking it to please uh give us some markdown
3:20:53
it to please uh give us some markdown
3:20:53
it to please uh give us some markdown formatting to make it easy to
3:20:55
formatting to make it easy to
3:20:55
formatting to make it easy to read. So in these APIs there are
3:20:58
read. So in these APIs there are
3:20:58
read. So in these APIs there are different kinds of queries that you can
3:20:59
different kinds of queries that you can
3:20:59
different kinds of queries that you can run against the local model. You can do
3:21:01
run against the local model. You can do
3:21:01
run against the local model. You can do a general query which is just uh you
3:21:03
a general query which is just uh you
3:21:03
a general query which is just uh you know your usual questions that you'd ask
3:21:05
know your usual questions that you'd ask
3:21:05
know your usual questions that you'd ask the AI. Um you can ask it to rewrite
3:21:07
the AI. Um you can ask it to rewrite
3:21:07
the AI. Um you can ask it to rewrite your text. Summarize text. If you have a
3:21:10
your text. Summarize text. If you have a
3:21:10
your text. Summarize text. If you have a multi-page item that you'd um paste into
3:21:13
multi-page item that you'd um paste into
3:21:13
multi-page item that you'd um paste into here, you can ask it to summarize it.
3:21:15
here, you can ask it to summarize it.
3:21:15
here, you can ask it to summarize it. And you can also do text to table which
3:21:17
And you can also do text to table which
3:21:17
And you can also do text to table which will create a table of items from
3:21:19
will create a table of items from
3:21:19
will create a table of items from whatever you paste in there. But we just
3:21:22
whatever you paste in there. But we just
3:21:22
whatever you paste in there. But we just do a general query quickly here. And
3:21:24
do a general query quickly here. And
3:21:24
do a general query quickly here. And it's
3:21:26
it's
3:21:26
it's thinking. And we should see the MPU
3:21:29
thinking. And we should see the MPU
3:21:29
thinking. And we should see the MPU start to take off a little bit. Starting
3:21:31
start to take off a little bit. Starting
3:21:31
start to take off a little bit. Starting to get busy. There it
3:21:34
to get busy. There it
3:21:34
to get busy. There it goes. Meanwhile, my CPU is pretty flat.
3:21:37
goes. Meanwhile, my CPU is pretty flat.
3:21:37
goes. Meanwhile, my CPU is pretty flat. Not much going on there. GPU is also not
3:21:40
Not much going on there. GPU is also not
3:21:40
Not much going on there. GPU is also not working. Everything's happening on the
3:21:43
working. Everything's happening on the
3:21:43
working. Everything's happening on the MPU. And in the code
3:21:45
MPU. And in the code
3:21:45
MPU. And in the code here, I'm telling it to read the data
3:21:49
here, I'm telling it to read the data
3:21:49
here, I'm telling it to read the data back to me as it's being generated. So
3:21:51
back to me as it's being generated. So
3:21:51
back to me as it's being generated. So we don't have to wait a long time for
3:21:52
we don't have to wait a long time for
3:21:52
we don't have to wait a long time for the whole whole thing to be created
3:21:54
the whole whole thing to be created
3:21:54
the whole whole thing to be created before I show you the output. We're
3:21:57
before I show you the output. We're
3:21:57
before I show you the output. We're getting this streamed back to the app
3:22:02
asynchronously. So we'll wait for this
3:22:04
asynchronously. So we'll wait for this
3:22:04
asynchronously. So we'll wait for this to finish up. There should just be a
3:22:05
to finish up. There should just be a
3:22:05
to finish up. There should just be a couple more lines and then I'll show you
3:22:08
couple more lines and then I'll show you
3:22:08
couple more lines and then I'll show you the code and we'll wrap
3:22:15
up. This checkbox show progress. This is
3:22:18
up. This checkbox show progress. This is
3:22:18
up. This checkbox show progress. This is what controls whether it feeds it back
3:22:20
what controls whether it feeds it back
3:22:20
what controls whether it feeds it back as it's going or if it just does one
3:22:24
as it's going or if it just does one
3:22:24
as it's going or if it just does one call and wait for everything to come
3:22:28
back. And while we wait Oh, there we go.
3:22:31
back. And while we wait Oh, there we go.
3:22:31
back. And while we wait Oh, there we go. It's finished. The other thing I have
3:22:33
It's finished. The other thing I have
3:22:33
It's finished. The other thing I have here is a checkbox to say use a strict
3:22:34
here is a checkbox to say use a strict
3:22:34
here is a checkbox to say use a strict content filter. So that will filter
3:22:37
content filter. So that will filter
3:22:37
content filter. So that will filter content
3:22:38
content
3:22:38
content um has violence filters, has different
3:22:41
um has violence filters, has different
3:22:41
um has violence filters, has different filters that I'll show you in the code
3:22:43
filters that I'll show you in the code
3:22:43
filters that I'll show you in the code here super quick.
3:22:45
here super quick.
3:22:45
here super quick. Let's close that.
3:22:50
So, here's where I'm checking if we want
3:22:53
So, here's where I'm checking if we want
3:22:53
So, here's where I'm checking if we want to
3:22:54
to
3:22:54
to um show progress. So, if we want to show
3:22:57
um show progress. So, if we want to show
3:22:57
um show progress. So, if we want to show progress, it uses this generate response
3:23:00
progress, it uses this generate response
3:23:00
progress, it uses this generate response with progress. And then we've got a call
3:23:03
with progress. And then we've got a call
3:23:03
with progress. And then we've got a call back to show the results as they're
3:23:07
back to show the results as they're
3:23:07
back to show the results as they're coming in. If I want to see everything
3:23:09
coming in. If I want to see everything
3:23:09
coming in. If I want to see everything at once, I just make a single call to
3:23:11
at once, I just make a single call to
3:23:11
at once, I just make a single call to generate response async and I get
3:23:14
generate response async and I get
3:23:14
generate response async and I get everything in the result and populate
3:23:16
everything in the result and populate
3:23:16
everything in the result and populate that at the end.
3:23:18
that at the end.
3:23:18
that at the end. Uh the other thing I've got is the like
3:23:21
Uh the other thing I've got is the like
3:23:21
Uh the other thing I've got is the like I mentioned content
3:23:23
I mentioned content
3:23:23
I mentioned content filters and I've got
3:23:25
filters and I've got
3:23:25
filters and I've got a thing down here apply content filters.
3:23:28
a thing down here apply content filters.
3:23:28
a thing down here apply content filters. So if the check box is checked it's
3:23:31
So if the check box is checked it's
3:23:31
So if the check box is checked it's setting all these filter options for
3:23:32
setting all these filter options for
3:23:32
setting all these filter options for violence uh hate content sexual content
3:23:36
violence uh hate content sexual content
3:23:36
violence uh hate content sexual content self harm content. So all of that can be
3:23:37
self harm content. So all of that can be
3:23:38
self harm content. So all of that can be filtered out with these
3:23:42
filters and this is all running locally.
3:23:45
filters and this is all running locally.
3:23:45
filters and this is all running locally. nothing pinging the web for this AI
3:23:50
call. So, like I said, that's in the
3:23:52
call. So, like I said, that's in the
3:23:52
call. So, like I said, that's in the experimental release. Um, hopefully
3:23:54
experimental release. Um, hopefully
3:23:54
experimental release. Um, hopefully it'll make it out to a stable release
3:23:56
it'll make it out to a stable release
3:23:56
it'll make it out to a stable release very
3:24:00
soon. And that's all I've got. Do we
3:24:04
soon. And that's all I've got. Do we
3:24:04
soon. And that's all I've got. Do we have any questions in the chat?
3:24:09
Uh, hi Alvin. Yeah, we have we have a
3:24:11
Uh, hi Alvin. Yeah, we have we have a
3:24:11
Uh, hi Alvin. Yeah, we have we have a few questions. Uh, first is is a
3:24:13
few questions. Uh, first is is a
3:24:13
few questions. Uh, first is is a compliment come from Deepak. He says
3:24:15
compliment come from Deepak. He says
3:24:15
compliment come from Deepak. He says it's really amazing and I yeah I I I I
3:24:18
it's really amazing and I yeah I I I I
3:24:18
it's really amazing and I yeah I I I I agree with him. Uh it was really nice to
3:24:20
agree with him. Uh it was really nice to
3:24:20
agree with him. Uh it was really nice to have those those demos there. We have a
3:24:22
have those those demos there. We have a
3:24:22
have those those demos there. We have a few one. Let's start with Tomar is
3:24:24
few one. Let's start with Tomar is
3:24:24
few one. Let's start with Tomar is asking what best practices do you
3:24:26
asking what best practices do you
3:24:26
asking what best practices do you recommend for structuring a win UI app
3:24:29
recommend for structuring a win UI app
3:24:29
recommend for structuring a win UI app to keep it maintainable and scalable.
3:24:32
to keep it maintainable and scalable.
3:24:32
to keep it maintainable and scalable. So I would definitely recommend uh using
3:24:35
So I would definitely recommend uh using
3:24:35
So I would definitely recommend uh using some type of MVVM whether you roll your
3:24:37
some type of MVVM whether you roll your
3:24:37
some type of MVVM whether you roll your own or you use the toolkit. I prefer the
3:24:39
own or you use the toolkit. I prefer the
3:24:40
own or you use the toolkit. I prefer the toolkit to reduce the amount of code. Um
3:24:42
toolkit to reduce the amount of code. Um
3:24:42
toolkit to reduce the amount of code. Um but I would do that. Um also uh using
3:24:46
but I would do that. Um also uh using
3:24:46
but I would do that. Um also uh using dependency injection. Um in my projects
3:24:49
dependency injection. Um in my projects
3:24:49
dependency injection. Um in my projects I just use the built-in uhnet host for
3:24:52
I just use the built-in uhnet host for
3:24:52
I just use the built-in uhnet host for the the DI container. Um and in some of
3:24:56
the the DI container. Um and in some of
3:24:56
the the DI container. Um and in some of the projects I've got some services like
3:24:59
the projects I've got some services like
3:24:59
the projects I've got some services like I've got a navigation service for doing
3:25:01
I've got a navigation service for doing
3:25:01
I've got a navigation service for doing that page navigation. Um that's in the
3:25:04
that page navigation. Um that's in the
3:25:04
that page navigation. Um that's in the DI container. Um I've got some other
3:25:07
DI container. Um I've got some other
3:25:07
DI container. Um I've got some other services for calling different um online
3:25:10
services for calling different um online
3:25:10
services for calling different um online APIs. So, by using DI and MVVM, um those
3:25:14
APIs. So, by using DI and MVVM, um those
3:25:14
APIs. So, by using DI and MVVM, um those are the best ways to uh keep your app
3:25:17
are the best ways to uh keep your app
3:25:17
are the best ways to uh keep your app scalable. Um I also recommend using the
3:25:20
scalable. Um I also recommend using the
3:25:20
scalable. Um I also recommend using the theme resources unless you're branding
3:25:22
theme resources unless you're branding
3:25:22
theme resources unless you're branding your app. Um people like to see the
3:25:25
your app. Um people like to see the
3:25:25
your app. Um people like to see the their Windows colors and dark mode,
3:25:27
their Windows colors and dark mode,
3:25:27
their Windows colors and dark mode, light mode picked up automatically.
3:25:31
light mode picked up automatically.
3:25:31
light mode picked up automatically. Perfect. Thanks for asking that and
3:25:33
Perfect. Thanks for asking that and
3:25:33
Perfect. Thanks for asking that and thanks Roy for your question. Let's take
3:25:35
thanks Roy for your question. Let's take
3:25:35
thanks Roy for your question. Let's take another one from Scott. He's asking can
3:25:37
another one from Scott. He's asking can
3:25:37
another one from Scott. He's asking can you explain the differences between
3:25:38
you explain the differences between
3:25:38
you explain the differences between various deployment options like
3:25:41
various deployment options like
3:25:41
various deployment options like Microsoft Store and Windgate and when to
3:25:43
Microsoft Store and Windgate and when to
3:25:43
Microsoft Store and Windgate and when to use which?
3:25:45
use which?
3:25:45
use which? Um so Microsoft Store your app will only
3:25:48
Um so Microsoft Store your app will only
3:25:48
Um so Microsoft Store your app will only be available through the store. Um with
3:25:51
be available through the store. Um with
3:25:51
be available through the store. Um with Windet you can make it um available at
3:25:53
Windet you can make it um available at
3:25:53
Windet you can make it um available at the command line. So people can just uh
3:25:56
the command line. So people can just uh
3:25:56
the command line. So people can just uh install at the command line just say
3:25:58
install at the command line just say
3:25:58
install at the command line just say winget and the name of your package. Um
3:26:01
winget and the name of your package. Um
3:26:01
winget and the name of your package. Um for enterprises there are also some
3:26:03
for enterprises there are also some
3:26:03
for enterprises there are also some enterprise deployment that's where you
3:26:05
enterprise deployment that's where you
3:26:05
enterprise deployment that's where you can deploy your workstations through
3:26:07
can deploy your workstations through
3:26:07
can deploy your workstations through intoune and other uh enterprise
3:26:09
intoune and other uh enterprise
3:26:09
intoune and other uh enterprise deployment solutions. Um so it depends
3:26:12
deployment solutions. Um so it depends
3:26:12
deployment solutions. Um so it depends if you are targeting um say if you have
3:26:16
if you are targeting um say if you have
3:26:16
if you are targeting um say if you have a consumer app you definitely want to go
3:26:17
a consumer app you definitely want to go
3:26:17
a consumer app you definitely want to go to the store. You have something more
3:26:19
to the store. You have something more
3:26:19
to the store. You have something more for focused toward developers maybe go
3:26:21
for focused toward developers maybe go
3:26:21
for focused toward developers maybe go up through winget and then through one
3:26:23
up through winget and then through one
3:26:23
up through winget and then through one of the other uh installers or the uh in
3:26:26
of the other uh installers or the uh in
3:26:26
of the other uh installers or the uh in tune option if you're doing enterprise
3:26:28
tune option if you're doing enterprise
3:26:28
tune option if you're doing enterprise deployments.
3:26:30
deployments.
3:26:30
deployments. Perfect. Let's take final one that's
3:26:32
Perfect. Let's take final one that's
3:26:32
Perfect. Let's take final one that's coming from Khan Singh. He's asking how
3:26:35
coming from Khan Singh. He's asking how
3:26:35
coming from Khan Singh. He's asking how seamless is it to use both net and
3:26:37
seamless is it to use both net and
3:26:37
seamless is it to use both net and vinati APIs together in a modern VUI
3:26:40
vinati APIs together in a modern VUI
3:26:40
vinati APIs together in a modern VUI application. Are there any caveats?
3:26:43
application. Are there any caveats?
3:26:43
application. Are there any caveats? Um yeah, it can be tricky knowing when
3:26:46
Um yeah, it can be tricky knowing when
3:26:46
Um yeah, it can be tricky knowing when to use what. You can use all of these
3:26:48
to use what. You can use all of these
3:26:48
to use what. You can use all of these together.
3:26:50
together.
3:26:50
together. Um, some of the there's some things in
3:26:54
Um, some of the there's some things in
3:26:54
Um, some of the there's some things in the WinRT stuff that you can't use
3:26:56
the WinRT stuff that you can't use
3:26:56
the WinRT stuff that you can't use anything that's like u tied to the UI
3:26:59
anything that's like u tied to the UI
3:26:59
anything that's like u tied to the UI like WinRT has a lot of uh UI specific
3:27:02
like WinRT has a lot of uh UI specific
3:27:02
like WinRT has a lot of uh UI specific stuff in it that was tied to UWP. You
3:27:05
stuff in it that was tied to UWP. You
3:27:05
stuff in it that was tied to UWP. You obviously can't use any of those, but uh
3:27:07
obviously can't use any of those, but uh
3:27:07
obviously can't use any of those, but uh anything else like for um file access.
3:27:10
anything else like for um file access.
3:27:10
anything else like for um file access. So you've got access to the uh the file
3:27:13
So you've got access to the uh the file
3:27:13
So you've got access to the uh the file APIs both in WinRT and.net. Um, if you
3:27:17
APIs both in WinRT and.net. Um, if you
3:27:17
APIs both in WinRT and.net. Um, if you wanted your app to be more uh like a
3:27:19
wanted your app to be more uh like a
3:27:19
wanted your app to be more uh like a sandbox app like UWP, um, and you just
3:27:23
sandbox app like UWP, um, and you just
3:27:23
sandbox app like UWP, um, and you just want to have it have access to local uh,
3:27:26
want to have it have access to local uh,
3:27:26
want to have it have access to local uh, storage, you would use those WinRT APIs.
3:27:29
storage, you would use those WinRT APIs.
3:27:29
storage, you would use those WinRT APIs. If you want to have full access to
3:27:30
If you want to have full access to
3:27:30
If you want to have full access to everything, you you know, it's an
3:27:32
everything, you you know, it's an
3:27:32
everything, you you know, it's an unrestricted app. Uh, you can use the
3:27:34
unrestricted app. Uh, you can use the
3:27:34
unrestricted app. Uh, you can use the net file API. So, it really depends how
3:27:38
net file API. So, it really depends how
3:27:38
net file API. So, it really depends how restrictive you want to be.
3:27:41
restrictive you want to be.
3:27:41
restrictive you want to be. Perfect. So, maybe maybe uh, uh, okay.
3:27:45
Perfect. So, maybe maybe uh, uh, okay.
3:27:45
Perfect. So, maybe maybe uh, uh, okay. Do we have let's Okay, Kam Singh says
3:27:47
Do we have let's Okay, Kam Singh says
3:27:47
Do we have let's Okay, Kam Singh says thank you. Let's take one more question
3:27:49
thank you. Let's take one more question
3:27:49
thank you. Let's take one more question then we'll just wrap it up, right? I
3:27:50
then we'll just wrap it up, right? I
3:27:50
then we'll just wrap it up, right? I think the question will keep on flowing
3:27:52
think the question will keep on flowing
3:27:52
think the question will keep on flowing as long as you are on the screen. Um um
3:27:55
as long as you are on the screen. Um um
3:27:55
as long as you are on the screen. Um um for developers completely new to bin UI
3:27:58
for developers completely new to bin UI
3:27:58
for developers completely new to bin UI and Windows app SDK. What are the first
3:28:00
and Windows app SDK. What are the first
3:28:00
and Windows app SDK. What are the first key steps to get project off the ground?
3:28:04
key steps to get project off the ground?
3:28:04
key steps to get project off the ground? Um so it's important I would say to
3:28:06
Um so it's important I would say to
3:28:06
Um so it's important I would say to learn uh the ZAML if you've never used
3:28:09
learn uh the ZAML if you've never used
3:28:09
learn uh the ZAML if you've never used um ZAML with WPF or one of the other
3:28:12
um ZAML with WPF or one of the other
3:28:12
um ZAML with WPF or one of the other frameworks Maui. They're all pretty
3:28:14
frameworks Maui. They're all pretty
3:28:14
frameworks Maui. They're all pretty similar. They are slightly different
3:28:15
similar. They are slightly different
3:28:15
similar. They are slightly different schemas when you go between WPF, WinUI,
3:28:18
schemas when you go between WPF, WinUI,
3:28:18
schemas when you go between WPF, WinUI, Maui. Um like I mentioned earlier, UWP
3:28:21
Maui. Um like I mentioned earlier, UWP
3:28:21
Maui. Um like I mentioned earlier, UWP is almost exactly the same as WinUI. So
3:28:23
is almost exactly the same as WinUI. So
3:28:23
is almost exactly the same as WinUI. So if you're coming from there, there
3:28:25
if you're coming from there, there
3:28:25
if you're coming from there, there shouldn't be much of a learning curve.
3:28:26
shouldn't be much of a learning curve.
3:28:26
shouldn't be much of a learning curve. Um but without the visual designer, it's
3:28:29
Um but without the visual designer, it's
3:28:29
Um but without the visual designer, it's important to understand how ZAML works.
3:28:31
important to understand how ZAML works.
3:28:31
important to understand how ZAML works. And um there are a lot of good resources
3:28:33
And um there are a lot of good resources
3:28:33
And um there are a lot of good resources up on Microsoft Learn um some different
3:28:36
up on Microsoft Learn um some different
3:28:36
up on Microsoft Learn um some different books out there, including mine that get
3:28:38
books out there, including mine that get
3:28:38
books out there, including mine that get you started.
3:28:39
you started.
3:28:39
you started. Um yeah, that's the biggest part. And if
3:28:43
Um yeah, that's the biggest part. And if
3:28:43
Um yeah, that's the biggest part. And if you're familiar with net, the rest of it
3:28:44
you're familiar with net, the rest of it
3:28:44
you're familiar with net, the rest of it should be pretty simple.
3:28:47
should be pretty simple.
3:28:47
should be pretty simple. Perfect, Elvin. So that is it. So thank
3:28:51
Perfect, Elvin. So that is it. So thank
3:28:51
Perfect, Elvin. So that is it. So thank you so much. I think we have a few
3:28:52
you so much. I think we have a few
3:28:52
you so much. I think we have a few questions, but I think we'll have to
3:28:53
questions, but I think we'll have to
3:28:53
questions, but I think we'll have to wrap it up. Right, Elvin? Any any final
3:28:56
wrap it up. Right, Elvin? Any any final
3:28:56
wrap it up. Right, Elvin? Any any final words before we wrap up uh your session
3:28:59
words before we wrap up uh your session
3:28:59
words before we wrap up uh your session and actually this conference. Um just uh
3:29:02
and actually this conference. Um just uh
3:29:02
and actually this conference. Um just uh thanks for having me. I really
3:29:03
thanks for having me. I really
3:29:03
thanks for having me. I really appreciate it. It's great to uh get the
3:29:05
appreciate it. It's great to uh get the
3:29:05
appreciate it. It's great to uh get the word out there about WinUI. Yeah, thank
3:29:07
word out there about WinUI. Yeah, thank
3:29:07
word out there about WinUI. Yeah, thank you. Thank you so much, Alvin, for your
3:29:09
you. Thank you so much, Alvin, for your
3:29:09
you. Thank you so much, Alvin, for your time. I really I really appreciate it
3:29:11
time. I really I really appreciate it
3:29:11
time. I really I really appreciate it and we all love Microsoft learn. So
3:29:13
and we all love Microsoft learn. So
3:29:13
and we all love Microsoft learn. So thank you so much for you know
3:29:15
thank you so much for you know
3:29:15
thank you so much for you know maintaining it or having it up there you
3:29:17
maintaining it or having it up there you
3:29:18
maintaining it or having it up there you know I often go there for the
3:29:19
know I often go there for the
3:29:19
know I often go there for the certifications or you know often time to
3:29:22
certifications or you know often time to
3:29:22
certifications or you know often time to time there are some challenges you know
3:29:25
time there are some challenges you know
3:29:25
time there are some challenges you know uh so thank you so much for that. Uh
3:29:28
uh so thank you so much for that. Uh
3:29:28
uh so thank you so much for that. Uh yeah, sure. Yeah. Oh, one other thing
3:29:30
yeah, sure. Yeah. Oh, one other thing
3:29:30
yeah, sure. Yeah. Oh, one other thing that all everything up on learn all the
3:29:32
that all everything up on learn all the
3:29:32
that all everything up on learn all the documentation is all open source. So if
3:29:34
documentation is all open source. So if
3:29:34
documentation is all open source. So if you ever see mistakes or have ideas, you
3:29:35
you ever see mistakes or have ideas, you
3:29:36
you ever see mistakes or have ideas, you can submit issues on GitHub or submit a
3:29:38
can submit issues on GitHub or submit a
3:29:38
can submit issues on GitHub or submit a PR if you want to change something.
3:29:39
PR if you want to change something.
3:29:40
PR if you want to change something. Yeah. And get and get your and get your
3:29:41
Yeah. And get and get your and get your
3:29:41
Yeah. And get and get your and get your avatar there on the on the page. You can
3:29:43
avatar there on the on the page. You can
3:29:43
avatar there on the on the page. You can see yourself as a contributor, which is
3:29:45
see yourself as a contributor, which is
3:29:45
see yourself as a contributor, which is super cool. Thank thanks for bringing
3:29:47
super cool. Thank thanks for bringing
3:29:47
super cool. Thank thanks for bringing that up. Right. I remember even back in
3:29:49
that up. Right. I remember even back in
3:29:49
that up. Right. I remember even back in MSDN, they always had it. So it's good
3:29:51
MSDN, they always had it. So it's good
3:29:51
MSDN, they always had it. So it's good that this thing is open source. I love
3:29:53
that this thing is open source. I love
3:29:53
that this thing is open source. I love it. Uh yeah, Elvin, thank you so much
3:29:55
it. Uh yeah, Elvin, thank you so much
3:29:55
it. Uh yeah, Elvin, thank you so much for your time. have a great day ahead
3:29:58
for your time. have a great day ahead
3:29:58
for your time. have a great day ahead and yeah, hope to see you soon in some
3:29:59
and yeah, hope to see you soon in some
3:29:59
and yeah, hope to see you soon in some other virtual events. All right, thanks
3:30:01
other virtual events. All right, thanks
3:30:01
other virtual events. All right, thanks Simon. All right, thank
3:30:03
Simon. All right, thank
3:30:03
Simon. All right, thank you. All right, ladies and gentlemen,
3:30:05
you. All right, ladies and gentlemen,
3:30:05
you. All right, ladies and gentlemen, that is it. We wrap up the two-day
3:30:07
that is it. We wrap up the two-day
3:30:07
that is it. We wrap up the two-day virtual conference that was on net by
3:30:09
virtual conference that was on net by
3:30:09
virtual conference that was on net by Cap Corner. We returned back after
3:30:11
Cap Corner. We returned back after
3:30:11
Cap Corner. We returned back after almost two years maybe. It's it's it's
3:30:13
almost two years maybe. It's it's it's
3:30:13
almost two years maybe. It's it's it's been a while we did a net conference. Uh
3:30:15
been a while we did a net conference. Uh
3:30:15
been a while we did a net conference. Uh this was too a short and sweet one but I
3:30:18
this was too a short and sweet one but I
3:30:18
this was too a short and sweet one but I want to give a shout out to all the
3:30:19
want to give a shout out to all the
3:30:20
want to give a shout out to all the speakers for you know uh joining uh this
3:30:23
speakers for you know uh joining uh this
3:30:23
speakers for you know uh joining uh this conference. I know everybody's busy. So,
3:30:24
conference. I know everybody's busy. So,
3:30:24
conference. I know everybody's busy. So, thank you so much for taking out their
3:30:26
thank you so much for taking out their
3:30:26
thank you so much for taking out their time. Everybody uh for for who tuned in,
3:30:29
time. Everybody uh for for who tuned in,
3:30:29
time. Everybody uh for for who tuned in, all the folks in the chats and on the
3:30:32
all the folks in the chats and on the
3:30:32
all the folks in the chats and on the social media, thanks for joining in the
3:30:34
social media, thanks for joining in the
3:30:34
social media, thanks for joining in the conversation and your lovely questions
3:30:35
conversation and your lovely questions
3:30:35
conversation and your lovely questions and also some of my team members. We
3:30:38
and also some of my team members. We
3:30:38
and also some of my team members. We have uh Rohit behind the scenes who's
3:30:40
have uh Rohit behind the scenes who's
3:30:40
have uh Rohit behind the scenes who's taking all the lovely screenshots. I'm
3:30:42
taking all the lovely screenshots. I'm
3:30:42
taking all the lovely screenshots. I'm going to I'm going to I'm going to You
3:30:44
going to I'm going to I'm going to You
3:30:44
going to I'm going to I'm going to You know what? Perhaps hold on. Uh I'm going
3:30:46
know what? Perhaps hold on. Uh I'm going
3:30:46
know what? Perhaps hold on. Uh I'm going to say thank you so
3:30:50
to say thank you so
3:30:51
to say thank you so much so much
3:30:54
much so much
3:30:54
much so much everyone. See you next
3:31:02
[Music]
3:31:04
[Music]
3:31:04
[Music] uh conference
3:31:06
uh conference
3:31:06
uh conference 2026. Uh thank you so much. See you are
3:31:09
2026. Uh thank you so much. See you are
3:31:09
2026. Uh thank you so much. See you are at net
3:31:12
at net
3:31:12
at net conference at
3:31:16
conference at
3:31:16
conference at the nobody's watching us so I can take
3:31:18
the nobody's watching us so I can take
3:31:18
the nobody's watching us so I can take as much time as I
3:31:20
as much time as I
3:31:20
as much time as I want. Yeah. So I'm going to put this up
3:31:23
want. Yeah. So I'm going to put this up
3:31:23
want. Yeah. So I'm going to put this up on the screen right and be be and keep a
3:31:26
on the screen right and be be and keep a
3:31:26
on the screen right and be be and keep a very happy
3:31:32
face. And that was actually for Rohit
3:31:35
face. And that was actually for Rohit
3:31:35
face. And that was actually for Rohit who was doing all the social media why
3:31:36
who was doing all the social media why
3:31:36
who was doing all the social media why he was bugging me to actually post. Uh
3:31:39
he was bugging me to actually post. Uh
3:31:39
he was bugging me to actually post. Uh so thank you so much for Rohit for doing
3:31:41
so thank you so much for Rohit for doing
3:31:41
so thank you so much for Rohit for doing all the social media. Adi for doing all
3:31:42
all the social media. Adi for doing all
3:31:42
all the social media. Adi for doing all the graphics. Deepak is up here in the
3:31:45
the graphics. Deepak is up here in the
3:31:45
the graphics. Deepak is up here in the chat. Thank you Deepak for for being
3:31:47
chat. Thank you Deepak for for being
3:31:47
chat. Thank you Deepak for for being active. I know he was there behind the
3:31:48
active. I know he was there behind the
3:31:48
active. I know he was there behind the scenes the other day helping us with the
3:31:50
scenes the other day helping us with the
3:31:50
scenes the other day helping us with the streams and other live streams that we
3:31:52
streams and other live streams that we
3:31:52
streams and other live streams that we have. Thank you so much everyone. That
3:31:54
have. Thank you so much everyone. That
3:31:54
have. Thank you so much everyone. That is it boys and girls. That was your net
3:31:57
is it boys and girls. That was your net
3:31:57
is it boys and girls. That was your net conference 205. I'll see you in some
3:31:59
conference 205. I'll see you in some
3:31:59
conference 205. I'll see you in some other events. Until then, take good care
3:32:01
other events. Until then, take good care
3:32:01
other events. Until then, take good care of yourself and uh enjoy your day and
3:32:05
of yourself and uh enjoy your day and
3:32:05
of yourself and uh enjoy your day and night on wherever you're joining us
3:32:07
night on wherever you're joining us
3:32:07
night on wherever you're joining us today from. Good luck.
3:32:11
today from. Good luck.
3:32:11
today from. Good luck. [Music]
3:32:24
You
3:32:28
are feeling
3:32:33
[Music]