Hey everybody, and welcome back to another episode of Adventures in Angular y'ah.
I record so many of these I almost lost track of which one I was
on. This week on our panel, we have super at Meishra. Hello.
Hello, I'm Charles Maxwood from top End Devs, and this week we're
talking to Maria Corneva. Is that how you say that? Yeah? All
right, Maria. Do you want to tell us who you are and why
you're awesome and all that stuff? Why not? Yess. I am a
front end technology lead at a small German company. I'm developing some web applications
by day and I'm writing some blocks by night here and now. I also
have some talks at meetups and conferences. Yes, and I also like drawing,
so I tried to illustrate my blocks with some drawings. That's it,
I guess. Cool. So looking at this blog post that we found on
medium, did you draw that? Yes? That illustration? That's awesome,
thank you. Yeah. Mine would be like a little stick figure. It'd
be like that. Is that a human stick figure? So I'm impressed?
Thank you? Very cool? Well we got you on to talk about it.
It says how to proxy AHGTP request in angular, and it was interesting
because I mean, I remember using proxy servers when I was in college and
stuff to get around the filtering that the university did. Don't tell anybody.
I guess it's been forty years so it doesn't matter anymore. But you know,
just stuff like that. You know, we all kind of think about
different proxies and maybe have used something like Charles Proxy or something like that,
but it looks like you're not really doing that so much as actually building in
kind of a proxy on your own end where you have like a fake back
end and stuff. So you do you want to kind of give us a
ten thousand foot view on what you're talking about when you're talking about proxy and
the requests, and then we can dive into why, and then we can
dive into how. Sure. Actually, I was really surprised that you addressed
this topic because and I was really surprised by myself when I discovered this topic
for myself when I started to write this blog, because I joined the project
and everything was working fine, and then I started to dig deeper and deeper,
and then I discovered that they're using those proxies as a proxy configurations,
and then I started to explore this topic and trying to understand why do we
need those proxies at all, because actually, in the basic tutorial Angular you
won't hear about it. But this is so element so basic and so well
really useful that I think everyone should know how to proxy those requests, to
work with back end, to work with local hosts back end, to work
with different environments, to work with fake back end, et cetera. So
there's so many use cases and the functionality is really elementary. So that was
my motivation why I wrote this, And then I was really surprised that you
discovered it and they wanted to talk about it. That's for the teasing for
as a teaser, as the motivation for the talk. Yeah, well it
makes sense and if you kind of read through it, you'll you'll get an
idea. Oh, this is pretty useful, but but why don't you tell
us, you know, what, what do you use this for? Like,
what where does this approach come in for you? Actually, in the
current project where I'm ausly using this with a fake backhand, we're using library
called Jason Server. This is pretty a pretty well known one and this is
actually a very useful one. I recommended h every for it to everyone.
This is not like a commercial or something, and it's really just my favorite
library on this in the sense. And once you fake backhand, you also
want to have a switch because you don't want to occasually deliver this to production
with some fake back end connections. I guess you won't, and that's why
you need something which which is pretty easy to switch to to use so that
say, okay, once I start my application without some particular flag, I'm
using the fake back end. And once I start the application normally without any
flax, then I just go to the normal server. And this is how
the proxy works. In this use case. We set an environment variable to
true, which like fake back end variable, and in my proxy, if
we would get we'll read this variable and if it's such true, then the
proxy gets activated and then all my requests go to the fake back end.
And if the variable is set to false, then it's not proxy to some
fake back end. It goes to the server. The advantage of this approach
is that I don't have to care about like I don't have to worry about
those switches and production because they're just not there and I don't have to change
anything in my code, like in the code that I write for the application.
It's just the configuration of the proxy which comes additionally to the application,
right, Yeah, that makes sense to me. You you run it in
production without any flags and so it just connects to the regular back end.
But yeah, on your machine, you can stand up the fake back end
and then you just tell it, hey, use this config yes, and
yeah, you know this is something that I think we all run into at
one point or another in our career, right where it's hey, look,
you know, I need to be able to control what I'm getting, you
know, out of a database or from a back end, or from some
service or some API, or you know whatever whatever you want it to be,
right, I need to know how this behaves under this circumstance, the
other circumstance and the other circumstance. And so if you can stand up a
fake back end that has all of your different use cases in it, then
yeah, you can just move move around your app and make it behave in
the way that you want and make sure that you're what you're seeing is what
you're expecting. Yes, absolutely, well, I've considered several approaches. Of
course, you can just mark your data in your component or in your server
a service to me, but then you change your code. You can also
have some switches in your code checking for the environment, but again those are
this is the functionality which does not contribute to the app functionality. This is
not a business logic that you're writing, and any switch, any additional check
for some development environments introduces in security threat. So I prefer not to have
any switches in my code directly in my code, but rather solve with via
some configurations. Yeah, that makes sense. I could also see this as
a convenient way too. For example, if I'm running into a bug in
production, right, I can effectively copy the payload into this fake back end
and then say do your thing right and just see what happens. Yes,
there are a couple of more use cases for fake back onto. In my
current project, we have some really rare test user combinations, and to get
there we need to wait for so that real test users for weeks, which
will slows down the development tremendously. That's why we just can configure those test
users in our fake back and and get them immediately. The same is a
valid for some days that we want to test, so that we just get
some really rare combinations the twenty nine of February, February in September, right,
Yeah. The other one I can see that you could play with is
time zones. Yeah, go ahead. You know what I was saying is
I got to work with the finger fake back and or mocking stutypy server.
As you start the board, the front and the back end at the same
time, so there is no request present for the back end to serve,
then you know that this is the response which you'll get going to get And
that's how we started started using that. But later it gives us a lot
of flexibility, like if we need some extra functionality which you need to test
in the front end, if it is fine, then it will be implemented
in the back end. So this is like you told, isn't just a
black thing and that you're going to work. That's a pretty pretty handy handy
scenario. Like if the both the front and back and you're starting together,
it's a pretty good use case to go. But I think there are a
lot of framework. What I have used is not at all depend on any
call. It's all all stayed in stage in Angular. You just need to
switch the used class to a different service and that that will work it as
the interceptor or something. Yeah, test the interceptors to However, I know
myself, I always forget to comment it out and to change the change this
to switch to the real interceptor, and then I'm always afraid to deliver something
to production which just doesn't do what it's supposed to do. Yeah. Yeah,
but you're right that using the fake backhand is a way to decouple those
two. And I don't have to wait for the real implementation. I don't
have to wait for my colleagues to ship the back end. I can work
with it. If I have this vaguar definition, that's enough for me.
Then I can spin out of a fake back and then just work with this
till it's ready. Yeah. But one thing, it's not a negative though,
but I think if you're using TEG fakeback end or any flag, we
should have a documentist and it properly. I mean documented properly, because one
one is like the scenario happened in my team was in my past experience that
new in New I game. We forgot him to inform that we are using
this and he started using APA call and see why it's not why it's not
working because he haven't gone then we came into the Okay, if we are
using this is not hitting the SABA then so I think if you're using this,
then it should be in the initial of the documentary and that there is
a flag which will use fakeback end to the real back end. Then it
will not be a creator chaos for a newcomer. Yeah, that's true,
and the threat is also it's also a certain risk to derive too far away
from the real data. Once you stay with some desired values, you develop
differently. You don't check for news, you don't check for anti fines because
in your data you always get something and then then there is a big surprise
when you switch to the real real server service and then you get some other
data which you haven't predicted. But yeah, those are the downsides of fake
back end yep. I think nowadays if you're in mon NX, then that
is solved. If both the front end we can rely use the same interface
or same class as a model. But yeah, but currently it is a
lot of projects are different as the independent project. But I think two podcasts
back, I think we have someone from an next so that we discuss like
how it is useful to have a single interface and use it in both that
the pretty life they front and back and integration. Yeah, obviously that will
also help in this scenario. Yeah, that's so, especially if you use
notes and jazz and back end and ceas really easy to use the same type
definitions for both front and and back end. But proxying, like we were
talking about proxying in the beginning, actually working with a fake back end is
just one of those use cases. This is the one that charles you.
You ask me what I'm using now, So this was the major use case
in my project. So working with the fake back end. However, it's
also useful for effortless switching between the environments because normally you wouldn't introduce the whole
your well in your HDP requests, would work rather with the relative paths,
so that you have your test environment, staging environment and production environvironment slash API
slash users for example, and proxying to the particular environment allows you to get
your data when working on local hosts. This is also what we use in
our current project setup, so that when we work on local hosts, when
I'm developing some features and proxy my requests to the test environment and I get
the real data from our service which is un deployed there. And then once
I'm ready, I deploy my application in the test environment. And since I'm
using the relative paths, that's still working. And once the tests are through
and once I deliver it to the staging environment, I don't have to change
the code of the application itself because I still like the code still has those
relative urals, so then again there's no changes needed and the only thing that
I have to set up is the angle adjacent file where I say that for
the development mode you use another a proxy configuration and for the staging another one
on for production one more so, yeah, nice, Now you mentioned something
about swagger, so we're using open API slash swagger set up for this,
And does this work for other types of things like graft you wel or some
other crazy setup where I'm just making up my own endpoints dot Jason at the
end, Yes, you have the possibility to define some endpoints using wild cards,
so that you say, all the requests that have API in the path,
or all the requests that have some particular values there will be proxit somewhere
else, So you have the opportunity to filter. You can use just a
list of them. You can also have some as I said, some regax
expressions. You have even the opportunity to rewrite the path. So let's say
you can work locally with something like slash API, slash fu, slash bar,
and then you have the option to rewrite food slash bar and remove it
from the path to proxy to some server, so you also have more options
what to do with your requests. That makes sense, so effectively, then
I can say yeah, proxy to my crazy setup where I just made up
the path names and this little map that however I tell it to yes.
And if you're even more crazy, you can set secure to falls, and
then you can even switch off HTPS off, which is particular relevant if you
are working on local hosts and plan to send your requests to the server to
the service which is deployed in the test environment, because usually they won't like
it if they get some cross origin requests from local hosts. But if you
proxyed with the configuration of secure set to falls, then you can effectively switched
off. Makes sense to me. Yeah, that's another use case. As
I said, like when developing on local hosts, I usually have the following
the configuration of setting it to secure two foals and then setting the context like
putting all the APIs, all the URLs that I need for my request in
the context, and then specifying the target which is the environment where I want
to proxy my request to. And when you're running your test, do you
stand up a big back end for that too then or do you is that
only on the end to end tests or yeah, do you use this in
testing at all? For the unit test, we have the HDP testing a
module which Angler provides or usually take this one. And for anti end tests,
the application is already deployed in the development or staging environment and there there's
usually proxy to the same origin, so I don't have to proxy there.
Basically, it's you need a proxy always when you are not in the same
environment where your service is okay, like mostly in local most Yeah, so
we've covered the local development and proxying this to some deployed service, but sometimes
you also have your back ends with you, so in the same in the
same Mona repo, and then you have your back end running on local hosts
three thousand and your Angular app running a local host four thousand and genred and
you can also proxy your requests to the back end your well, because you
need to change the port otherwise it wouldn't work. So this one is another
use case where you can use proxy. So what do you mean is your
back end pot can be dynamic and that can also be handled through the proxy
if that is the scenario. Yeah, like maybe if if you vacuant is
running in a doctor and it's running dynamic proxy, and that you can grab
that proxy maybe in a content or something, and that you can club club
together. I think this use case will be helpful in test continents as well,
Like may have use test continents and that's how help us to create to
run the test by creating differently and doctal images, and it creates possible in
the runtime we can set the up. So one thing that I was going
to ask is what what are the other approaches to solve this problem and why
did you pick this one over the other ones? Well, the straightforward approach
for the forproxying the request to the local host back end or in general what
others general? In general? Yeah, yeah, to kind of get some
sanity and control on your back end. What you can also do you can
work with the environment files in Angular because this are these are also configurations that
you can and they are meant to store your environmental configurations so that you can
place your uryal environment specific uryal in there and references in your GTP request so
that you will just import you know, a product uryl based URL and then
slash API slash users. That would be another option how to do this and
this is also what Angler offers. This will solve the problem with deploying the
same code in different environments. However, it won't help with fake back end
and it won't help. It will help with start with working with back on
local house. That's not a problem, but it's a said it's then well
for the fake back end, you will steal and it still need to proxate
somewhere, right. It will solve some problems there is in the last use
case and this is really rare, but we are also facing those problems or
this is our use case in the current project too. We have a huge
mono repo and we have different styling of our applications. We have several brands
which belong to the same company and we have to style them according to the
corporate identity of this brand, and that's why our styling comes from different end
points. And that's again the option for us to configure the proxy for this
for each particular app to go to the relevant to go to the respective style
source and get the respective styling. That's another option how we can have the
same code and then style it in a different way depending on the proxy configuration.
Gotcha, That's why, as I said, it was so I was
surprised by myself when I discovered that we're doing this, but like, we're
implementing those proxies and using this configuration which is so basic, and it took
me so long to discover this concept, and that this concept does not come
in the very beginning of the Angler setup. It is mentioned in the documentation
it is part of building and serving Angular apps under Angular Tools, but it
took me a while to discover the section in the documentation. Yeah, so,
I mean, are there other tricks to this or is it just as
straightforward as it looks? You know, you set up your adjacent server,
you you set up your configued point stuff to it, and then you know,
make sure your back ends are giving you what you need. I mean,
is it really that simple or are there other tricks that make it,
I guess, more robust or give it more hump. I don't know.
Actually it is that simple. It is some native capability of Angler, so
we are not talking about some workaround. This is the solution that the Angler
team offers Angler. I use this webpack and webpack relies on the HDP middle
of ware package under the hood, which means this is also something which works
out of the box, which is need to configure it properly to set up
the file to reference it in the Angler Jason, and then where good to
go? Cool? Now? Suber was trying to ask a question when he
dropped off, so brought what was your question? Yeah, it's if maybe
integation test which run our doctor on the from the goal while learning our tests.
So one question, is it possible to set the boat the run time
in the proxy to which boat it is going to hit while you are running
the test. I'm just checking the documentation because in all examples as said that
the target and we are talking about the target target of our proxy, that
was the string that they used. So they just provided this sthetically, I
need to double check if it's possible to provide a function instead of target and
if it is possible, if it works, than then that should work with
different ports too. As of now, I don't see any example of the
function being called on there. But since this is a normal package, which
is which provides a lot of options, I'm actually quite positive that you should
be able to configure it like this. So you just need a function which
you'll get the port and then we'll return the whole target URL which you provide
in the configuration. Oh interesting, Yeah, usually I'm using doctor composed,
so I would imagine that you could also put it into an environment variable and
then just yeah, that would work too. That's actually a very good point
because in your ap proxy configuration you can read the environment and variables and then
you can just use this part of the target problem solved, right, Yeah,
so then you just say, hey, use this other container on this
port in the environment variable. But yeah, it'd be interesting to see if
you could, yeah, make it dynamic. So very cool. So anything
else that you're working on that you want to tell us about before we move
on to the next segment of the show. Maybe just to mention we were
talking about all this fake back end stuff which is relevant for developers. But
I noticed that we have this privileged position of faking our data as we want
being front and developer or testers don't. And that's usually like it's just it's
it's a pity, like you know, I was able to test it,
but for you, you have to wait for your test users and you have
to wait till you can you can test my application. That's why I really
like the solution my colleagues came up with where they wrote the script which runs
on some middle laya let's say UPIC or anything that you have between your servers
and outer world, and there's script runs there and checks for the headers or
for the cookies. It's up to you what to check, and then you
can set those setters or cookies in your browser. Like the tester can do
this and configure the desired outcome or the desired response of the server, being
it four or four or some mock data which is required for this test use
case. Uh, And the script does the following. It looks like the
cookies or the heather, and if it sees some particular value in there,
it the script knowws that this description should not be proxy to the server.
To the actual server, it will directly response with the values that are provided
in this cookie, so that it looks for the application, it looks as
if the server request a response with the with the error response or with some
desired data. And I think this is also really important because we're it's being
able to develop fast to mock data as a developers just one half of the
whole process. And that's what I really like about this script and or this
idea that you can also give your testers some more options and the same as
well as for some proxy. Another colleague of me of mine wrote a proxy
in a different context. We're out of the Angular application there, but it
doesn't matter, and there was a proxy who would check, which would check
the headers and do the same, so it wouldn't even re any middle HI
layers out there. It would just stop at the application layer in the browser
and go back with some desired response. So this is another aspect of the
whole marketing data story. Yeah, yeah, there. I've seen a couple
of approaches to this. I mean one is you know kind of what you're
talking about, where you either intercept the signal coming in and you know,
just give the response that you want. I've also seen systems I mostly do
backend development actually reviey on rails and so we have a seeds file the little
seed data into your database, and so you could set up basically a testing
seed and then you know, based on your environment, you just run the
seed and it just populates the data you want. You have to maintain that,
you have to maintain any other automation or script that you run anyway.
But yeah, I mean, however that works, there are a lot of
ways to do it. It's it's interesting though, just kind of think about,
Yeah, you know, you could slide something in that middleware and manage
what you need. I've also seen people do it with like an actual proxy
system like Charles proxy or something, because then again they can put the response
that they expect to send back that doesn't quite get your end to end because
your back end may have a bug, you know, may do something you
don't expect, but if you're just making sure that the front end reacts properly,
Yeah, there are a lot of ways to do it, but it
sounds like you've got an elegant solution there. I really like it because our
tests are so happy and the more the testers can test during the test phase,
the less box and production we have the better I can sleep on Friday
night, makes sense? Yeah, I write bugs all the time. Superrot
never does. But you know it's a constant battle for me. My box
always come. I don't know. There you go. It will alway like
well, once you thought that this weekend will be good, and someone will
call it. Yeah, we ordered your favorite pizza. Get into the office.
Oh all right, well, let's go ahead and wind down. I'm
really curious before we do that. If people want to follow anything else that
you're writing or ask you questions about this, how do they connect with you
online? I can pring me on Twitter. I'm at browser person on Twitter,
so drop my line. If it's more professionally, you can connect via
LinkedIn. It's Maria minus Carneva, so I'd be happy to connect. Very
cool. All right, well let's go ahead and do some pics then.
Now, picts are just things that we're shouting out about, and so I'll
have Subrot go first, Subro, you have some pics. Yeah, this
week be also a book I have tacted reading. It's a famous book,
Le Sapiens, bas History of Humankind. It's a bitty take book. I've
started. Uh, how how am my kids that evolved? And so I
think that's sorta be someone getting time apart from coding. Then you'll go and
read it's a good book. Apart from that, I will try to pick
another book, which I already picked maybe twice. It's a Psychology of Money.
It's a pretty pretty good book. I keep coming back to the book
just to thought about, like how it's to think about money. It's not
everything. Times matter, money matters. Everything matters in life. So that's
how the perspective towards money will change. That's a two pick for this pick
Awesome. I'm going to jump out there with a couple of picks. I
usually do a board game pick, but I haven't really been playing board games
much lately, trying to get my group of guys that I play with back
together to play, and so I don't know that I have a new game
to throw out that I haven't already picked. So I'm just going to forego
that for a minute. I'm going to put up a couple of other picks
that I have. First of all, I've been talking to a friend of
mine and he's been helping me kind of get some branding stuff together, which
has been awesome, and so I've kind of gotten back on the email bandwagon
and stuff like that. So I'm going to throw out some of the things
and I'm using to connect with people, and I'm going to be integrating all
this into top end devs. So if you want to get some of the
stuff that I'm talking about, that we'll have it there. One of them
is active Campaign, which is an email system so that I can send emails
out. I'm planning on, you know, just putting out content and putting
that stuff together. I've also basically gotten things together for top end devs so
that I can start doing video series and courses, and so I'm going to
be putting out a course on how to stay current because I get asked that
all the time, how do I stay current? On the other thing that
I'm also going to be putting out as a course on or a series rather.
So. One of the things that really helped me when I was coming
up as a developer was there was a series called Railscasts and what it was
was what's his name, It'll come to me in a minute. Anyway,
the guy that was putting it together, he did a video every week about
some aspect of Rails, and I'd like to do that for all the different
shows that we have right so, I'd like to have one for Angular or
one for React and one for Ruby and one for JavaScript. And I'm probably
gonna do something, probably going to be enlisting people to do the rest of
them. So if you're interested in doing it for React or for Angular,
sorry not React, i haven't been on the reaction for a while, a
long while. But if you're interested in doing it for for Angular, let
me know. We're also doing an Angular remote conference in November, so if
you want to speak at that, the CFP is open and you can buy
tickets for it right now. And it's a good time to kind of go
to your boss and say, hey, look, this is a great way
for me to kind of connect with other people and level up and know what's
going on in Angular and stuff like that, especially if you couldn't make it
to Anti comp which actually is going on as we speak. But yeah,
you know, it's just another opportunity for you to get to interact with people.
The system we're using allows you to actually join conversations with people and talk
to them kind of like how we're talking from Utah India and Germany right over
a video. It has tables and allows like eight people to get on into
a video voice chat talk like this. So we're gonna have a robust hallway
track. And then if your company is hiring or something and you want to
sponsor and kind of get your name out there, that's a good way to
go too. But anyway, that's just kind of the stuff I'm used in
there. Like I said, the email marketing system is Active Campaign. The
texting system that I'm setting up is on community dot com, and the phone
number will also be on the website. You have to have a US number,
I think US or Canada. I think they're working on getting into texting
systems for the other countries, but I don't think you're there yet. And
then the system we're using for the conferences is called air meet. That's air
a air Meet, And like I said, we're you know, we're gonna
have networking sessions in the whole nine yards. But I'm really excited about all
this stuff. It feels like it's finally coming together. I've got I've got
this vision of where we can get to with this stuff. And ultimately what
I'm about is I really just want to help people. Hey, look,
you know whatever your career is that you're kind of dreaming of, you know,
whether it's I want to be the CTO of a startup that goes big,
or you know, I just want to be a senior developer and then
go hiking in the afternoon and anything in between. Right. I want to
be an influencer with a podcast or a blog, and I want to help
people that way. I want to give you the resources that you need in
order to do that, and I feel like kind of serving some of these
technical skills needs is there. But then the other thing is is I want
to provide people with the coaching and content that's going to help them go Okay.
I know I need to level up on how I talk to my coworkers,
so I'm going to do a course on that, right, Or I
need to know how to lead a team, right because I'm kind of at
that place where I'm starting to become a team leader, and I want to
put that stuff together so that whatever it is that you're dreaming you want,
you can have. And in the meantime, I'm also doing some coaching.
So if you go to top endev dot com, slash coaching. You can
sign up for some of that stuff. What it'll do is it'll actually fill
in the form and then you'll get a link where you can schedule or a
half hour call with me and we'll just talk through what you need and then
we'll figure out how we can do weekly follow up to get you where you
want to go. Plus any other content that I'm making for people. You
know, a lot of that will be focused around the questions people are asking
and the coaching because I know how to address that. So anyway, and
I've helped people through this stuff for years, and I'm excited to be able
to do it in a more focused way. But anyway, I have rambled
long enough. But yeah, one of the things he did is he walked
me through that visioning stuff and I've just I've been fired up every ever since
then because i just keep thinking about kind of what it feels like and what
it looks like. So anyway, Maria, what are your picks? Wow,
I'm still so enchanted by this inspirational talk. So I've prepared two picks
because I actually I really like those life coding sessions with my business colleagues where
they come with some ideas to me, like, you know, once they
see the buttons, they want to change the buttons. So we got to
go sit together and I just shift those buttons, change the color and change
the phone size, et cetera, so that we are co creating our application.
And then I realized, why not give them this opportunity to do this
by themselves. So my business colleagues have learned how to work with def tools,
which is a huge step forward, so they can change there. Yes,
there are huge respects on them because this way they can change some texts
on the website because they can edit it in the developer tools. And recently
I've learned that actually we have a browser API which enables this for everyone,
which is called document Design Mode. So once you switch design mode to on,
like there is on and off and off is default, then you can
change all the text data all. You can delete all the elements from the
website. And fortunately you cannot add more buttons by yourself, but at least
you can change all the text on a website without any additional tools. So
it's quite easy to switch on this mode, and then the business guys can
work with a website change their wording. That's one pick that i'd like to
introduce also in my team, and another one has been recommended to me today
by one Hour testers. This is a Chrome extension which is called tweak Mark
can modify HDDP requests which fits to our topic. And I find it really
cool that our testers recommended this to me because he was so excited that this
tool, this extension helped him a lot working with HDP requests and doing what
we were discussing before. So this is something which enables test our testers to
test my software and gives me more time to focus on my coding instead of
supporting the testers and providing something some tooling for them how to mock requests.
They have this extension and they can work with us by the links to both
of my picks, the documentation of the API and the link to this extension.
But those tools are for me something which helps my team members to be
in the whole development process, and I like it. That's awesome. I
might have to pick your brain and share it with people on how you get
the business people into because you know, because that level of collaboration is really
hard to get and you know, not that they have to learn how to
code necessarily, but just so that they can kind of then get their fingers
on what's actually going on. Yeah, it helps a lot, It helps
read a lot. Yeah yeah, I mean that's ultimately what it's about,
right, It's that communication, that the level of communication yet very cool.
Well we'll go ahead and wrap it up. This was awesome, Maria,
Thank you so much for coming and sharing with us. And yeah, I
had no idea that this proxy stuff was even built into Angular, so thank
you for having me. It was fun. All right, Well we'll wrap
it up here. Until next time, folks max out