►
Description
Join members from the ASP.NET teams for our community standup covering great community contributions for ASP.NET, ASP.NET Core, and more.
Community links for this week: https://www.theurlist.com/aspnet-standup-2020-05-26
A
A
Hey
things
happen,
it
goes,
okay,
we
appear
to
be
live.
I
watch
and
make
sure
it
pops
up
on
on
here.
All
right,
I
always
ask,
are
you
okay,
audio
is
good.
I
didn't
even
have
to
ask
welcome
ray
well,
this
is
the
community
stand
up
for
May,
26
2020
and
we're
welcoming
the
blazer
team-
and
we
are
this-
is
the
blazer
webassembly
released
party?
This
is
awesome,
there
was
I,
was
I,
actually
hired
a
mariachi
band
and
they
had
to
cancel.
B
A
Awesome
well,
congratulations,
I'm,
gonna,
jump
in
and
do
my
Community
Links,
because
I
love
the
community
and
I
love
to
show
off
the
stuff
they're
doing
I
have
some
cool
blazer
links
this
week
as
well
will
pop
over
into
that.
This
is
our.
This
is
the
URL
list,
so
this
will
be
in
the
show,
notes
and
everything,
but
these
are
links.
A
C
A
Welcome
Sofia,
so
okay,
of
course,
Steve
the
original
inventor
of
blazer
and
and
has
been
on
ASP
net
and
been
building
all
kinds
of
crazy
stuff,
including
back
to
knockout
and
a
bunch
of
other
stuff
and
Roth
p.m.
on
the
team,
of
course,
and
then
safiya
welcome.
So
software
you're
gonna
be
showing
some
buggin
stuff.
Yes,
and
you
are
new
to
Microsoft
and
the
team.
E
Ish
to
Microsoft
I've
been
king
at
Microsoft
for
a
year
and
a
half
now
gosh,
okay,
I
fit
on
the
blazer
team
for
all
of
ten
weeks,
so
Wow.
And
what
were
you
working
on
before
that?
So
before
I
was
on
the
blazer
team
at
Microsoft,
I
was
working
on
a
product
called
Azure
notebooks,
which
is
kind
of
in
the
jupiter
notebook
sphere
of
things.
A
lot
of
the
open-source
work
that
I
do
in
my
spare
time
is
around
Jupiter
notebooks
of
interactive
computing.
So
that's
my.
A
Hobby,
very
cool
and,
and
so
then
you've
been
focused
on
and
so
you're
focused
on,
plays
or
debugging.
Do
you
work
just
on
that
or
do
you
work
on
a
lot
of
different
blazer
stuff?
Oh.
E
A
E
Work
on
a
little
bit
of
everything,
it
happens
that,
as
of
recently
I've,
been
doing
a
lot
of
stuff
around
debugging
and
vs
code.
But
you
know
whenever
you
join
a
new
team
at
a
company,
you
kind
of
like
dive
in
headfirst
and
you're
learning
about
all
sorts
of
things,
so
I've
contributed
to
blazer
blazer
of
assembly
now
doing
some
stuff
on
our
tooling,
with
this
debugging
work,
so
I'm
all
over
the
place
and
had.
E
Only
in
name
and
Bey
kind
of
notion
that
oh,
this
is
something
out
of
Microsoft
it's
kind
of
new
on
the
scene
but
had
never
used
it
before
I'm.
Actually,
not
a
big
dotnet
developer
I
spend
most
of
my
time
writing
JavaScript
and
Python.
So
this
is
all
completely
new
to
me
and
it's
been
very
fun.
Learning
about
everything
and
kind
of
examining
things
from
a
fresh
kind
of
new
perspective,
so
I
mean
I'm.
Definitely
the.
A
New
kid
on
the
block,
awesome
I
am
very
much
looking
forward
to
your
demos.
That's
gonna
be
fun
all
right.
Okay,
so
apologies
fruit,
III
we'd,
been
talking
for
a
bit
and
before
the
call
and
I
had
already
done
our
personal
introductions,
thanks
for
pointing
that
out,
Dan.
So
all
right,
so
here's
what
we
have
today.
First
of
all,
this
is
week.
This
is
a
21st
week.
Ahead
has
been
doing
these
series
where
he
goes
a
through
Z,
and
so
this
he's
looking
at
unit
testing
asp
net
core
3-1.
A
So
for
this
he
did
a
Twitter
poll
and
people
wanted
to
see
X
unit,
and
so
he
went
through
and
you
know
it
showed
off
how
it
is
set
up
X
unit.
So
some
of
the
things
I
want
to
point
out
in
here
one
is
that
he
is
using.
The
he's
got
his
own
net
learner
project
that
he's
been
using
on
these,
and
so
he's
been
using
that
as
kind
of
the
the
example
code
that
he's
using
on
these
different
series.
A
So
one
thing
he
goes
through
is
the
difference
between
a
fact
and
a
theory
which
is
very
useful,
with
X
unit
being
able
to
parameterize
your
test.
So
he
shows
how
to
set
that
up.
We
did
that
on
the
community
stand-up
page
when
we
built
that
out
the
original
prototype
for
that
we
used
X
unit
and
we
use
these
theories
and
parameterize
tests
or
all
of
our.
We
had
a
bunch
of
service
code
that
we
had
to
test
and
that
was
really
useful
to
I'm
to
go
through
and
test
it
like
that.
A
So
I
think
the
one
other
thing
that
I
just
want
to
point
out
that
I
well,
two
other
things.
One
is
I
like
that.
He
goes
through
and
points
out
different
ways
to
do
your
testing
so,
of
course,
in
the
visual
studio
interface
also
dot
in
that
test,
and
this
is
really
useful
to
be
able
to
test
that
way,
and
he
mentions
also
that
there's
live
unit
tests
in
enterprise
version
of
visual
studio
and
then
one
thing
I
loved
it
ahead
does
on
his
post.
A
Is
he
has
a
really
nice
references
section
at
the
end,
so
he
goes
through
and
just
you
know
shows
his
work
and
shows
where
you
can
go
and
read
more
information,
good
stuff.
Okay,
Fernando
has
an
app
full
stack
demo
and
here
he's
using
angular
material
and
he's
using
react
native
and
and
then
asp
net
core
3-1
as
the
backend.
So
I've
been
featuring
more
of
these
lately.
These
projects,
where
people
kind
of
put
a
bunch
of
stuff
together
and
show
a
kind
of
you
know
combining
different
things.
So
here
he
explains
how
it
works.
A
He's
got
a
running
demo
that
you
can
go
out
and
look.
He
does
also
have
this
react
native
mobile
and
then
he
he
spells
out
at
the
end
that
this
is
something
where
in
his
license.
He
specifically
says
you
know
you
can
use
this
for
a
real-world
application
and
companies
can
use
this
as
well.
This
was
nice.
Alright
project
ties
so
Amy
blogging
about
this.
This
is
this.
A
Is
the
announcement
post
from
build
last
week
and
really
cool
to
see
this,
so
this
is
a
full
walkthrough
using
project
I
showing
how
to
create
an
application
using
project,
I
and
then
walking
through.
This
is
based
on
the
tutorials
that
they've
written
up
and
I
love
the
project.
Hi
tutorials,
really
I'm,
really
nice
and
I
feel
like
they
did
a
great
job
of
writing
the
tutorials
very
early
in
the
project
and
that
kind
of
drove
it
felt
like
to
me
as
going
through
the
tutorials.
A
It
felt
like
the
tutorials
helped
drive
the
design
of
the
project,
so
here
they're
walking
through
building
building
the
application,
adding
multiple
services
running
the
services
and
then
some
other
more
advanced
things
like
creating
a
registry
further
down
and
then
also
a
nice
thing.
I'll
skip
down
towards
the
end
here
is
they're
they're
also
taught
our
Amy's
talking
about
some
of
the
backlog
and
plan
things
coming
up
in
the
roadmap.
So
it's
exciting
to
see
as
well.
Things
like
you
know,
dapper
and
Zipkin
and
and
support
for
other
things,
pretty
cool.
A
Another
thing
announced
was
yarby.
Arp
has
yet
another
reverse
proxy
and
we're
definitely
going
to
need
a
full
show
on
this
too,
and
and
we're
already
getting
that
lined
up.
I.
Think
it's
in
in
a
couple
of
weeks,
and
so
this
is.
This
is
exciting
to
see
this.
This
is
ready
and
also
explaining,
what's
in
and
what's
out
for
a
preview
one.
A
So
pretty
quick
walk
through
in
here
showing
how
to
bring
this
in
bringing
in
Microsoft
reverse
proxy
configuring
it
pulling
in
from
a
configuration
section
and
then
mapping
it,
and
that's
that's
really,
that's
really
pretty
much
it.
The
configuration
looks
pretty
straightforward
to
me
so
I'm,
looking
forward
to
a
full
show
on
this
to
dig
in
more
yeah.
A
And
you
know
it's
interesting
to
me
too,
that
this
came
up,
because
multiple
teams
at
Microsoft
were
building
reverse
proxies,
and
so
that's
good
news
to
me,
because,
if
they're
all
using
this,
this
is
like
you
said
this
is
something
that's
going
to
be
used
in.
You
know
probably
some
AI
scale
applications
and
dogfood
by
Microsoft,
so
yeah.
C
A
A
A
To
the
laser
links
portion
of
the
show,
this
is
a
long,
in-depth,
post
and
I,
like
some
things
in
here.
First
of
all,
Jeremy
said
I
followed
on
Twitter
that
he
had
not
seen
something
where
it
was
just
well
documented
the
whole
kind
of
process
of
how
to
do
this,
so
he
wanted
to
go
through
and
kind
of
write
it
up.
As
a
you
know,
here
is
how
to
do
it
he's
been
doing
some
more
sketching
and
I
like
his
sketches
in
his
in
his
posts.
This
is
cool,
so
he's
got.
A
You
know
a
lot
of
those
and
he
explains
some
things
like,
of
course
using
Azure
ad
for
the
authentication,
and
then
he
digs
in
deep
he's
working
on
the
data
story
for
dotnet
and
so
he's
he
writes
up
how
to
connect
to
cosmos
from
any
framework,
and
so
he,
you
know
and
explaining
all
the
token
management
etc.
So
so.
B
A
Yeah
yeah
so,
and
you
know,
I
haven't,
run
it,
but
I
believe
he's
got
the
source
code
posted
and
I
like
to
pop
this
open
and
just
run
it
and
I
think
the
code
Dody
so
he's
written
hundreds
of
samples
for
dotnet
and
it
keeps
them
up
to
date,
so
these
are
updated
for
the
release.
Webassembly
three
two,
oh
and
here
he's
got
all
his
samples,
including
some
very
one
thing.
A
That's
really
cool
at
30
samples
is
they're
very
focused
on
one
specific
scenario,
so
he
has
some
very
like
starting
with
a
very
tiny
hello
world
and
then
just
some
very
kind
of
lightweight
there's.
You
know,
for
instance,
components
calling
into
each
other
child
components,
etc.
So
this
is
really
cool
and
just
huge
props
to
Dodi
for
updating
these
things
consistently,
and
this
is
just
I'm
linking
directly
to
Dodie's
blazer
ones,
but
his
whole.
If
you
look
at
his
entire
thing,
it's
just
hundreds
of
them.
So
it's
a
machine.
A
A
So
I
went
through
and
explained
how
to
how
to
build
this
out
and
I'm,
starting
on
a
series
here,
where
I'm
building
a
to-do
application
so
I'm
using
the
to
do
sample,
that's
in
the
docs
and
then
I'm
going
to
be
adding
in
more
PWA
support,
so
Syed
I'm
on
my
team.
We
were
kind
of
brainstorming,
some
things
we
could
do
things
like
offline
support
and
push
notifications.
A
When
you
have
a
to
do
task,
do
and
things
like
that,
so
I
went
through
and
you
know,
did
the
kind
of
simple
create
the
to-do
application
then
worked
on
installing
and
I
wanted
to
try.
Also
installing
and
testing
with
mobile
support
and
Steve.
You
pointed
out
the
easy
way
that
I,
you
know
and
the
the
docs
point
this
out
to
is
the
easy
way
to
test
out
offline
support
is
just
in
the
browser
tools
you
can
simulate
offline
support.
A
I
also
wanted
to
play
with
offline
support
in
mobile
and
so
I
went
through
and
I
used.
The
end.
Grok
tool,
so
you
can
do
the
free
level
works,
just
fine
for
that,
and
so
I
ran
in
grok,
and
that
gave
me
a
HTTP,
URL
and
then
I
tested
installing
that
from
Android
simulator
and
and
played
with
that.
So
ya
need
stuff
and
I'm
looking
forward
to
building
more
on
this,
alright
two
more
links
and
then
I'll
pass
over
to
you
I
got
a
you
know,
got
to
repeat
this.
A
One
awesome
Glazer
is
amazing,
updated
yesterday,
just
you
know
tons
of
great
stuff,
so
is
a
community
link.
This
is
one
that
you
know.
This
is
a
huge.
This
is
just
the
place
to
keep
an
eye
on.
You
know
star
or
follow
the
repository
and
keep
an
eye
on
this
people
like
dan
during
our
session,
where
we're
helping,
Proctor
and
and
people
were
asking
questions.
There
repeatedly
pointed
people
over
to
this.
You
know
they
would
say
you
know
I'm
looking
for
information
about
this
or
that
and
I
would
point
them
to
that.
C
Component
libraries
or
JavaScript
Interop
libraries
test
frameworks
like
the
there's
quite
a
bit
of
stuff
that
gets
produced
by
the
glazier
community
to
help
you
out
with
building
your
app
and
that's
where
you
can
find
a
lot
of
that
stuff,
and
we
encourage
you
if
you
have
a
project
that
you
have
built
in
the
blazer
space
like
send
them
of
PR
set
up
your
today.
Awesome
blaze,
a
repro
so
that
other
people
can
can
find
it
easier.
Well,.
A
There's
one
that
I
don't
have
open
here
there.
It
is
almost
missed
this
one.
Ed
Charbonneau
pointed
this
out
to
me,
so
this
is
week
of
blazer,
so
this
is
coming
up,
and
this
is
1st,
through
the
5th
of
June
and
they've,
got
people
scheduled,
including
this
Dan,
Roth,
dude,
so
yeah
anything
else
to
say
about
this.
Damn
it's.
A
C
A
A
C
Okay,
so
we
have
finally
shipped
and
it
has,
as
we
were
talking
earlier,
it's
been
a
bit
of
a
journey
I
think
we've
had
17
preview
releases
of
a
blazer,
webassembly
ish
round
that
map
down
on
that
number.
So
it's
you
know
it's
gone
gone
through
a
few
rounds.
It's
had
lots
of
great
community
feedback
contributions
and
we
have
finally
made
it
available
for
for
production
use
so
definitely
go
and
check.
C
Let
me
let
me
share
slide
if
that's
alright
pop
up
this
is
the
announcement
slide
that
we
we
showed
it
build
that
place
assembly
is
now
released.
It's
part
of
the.net
core
3.1
SDK
now,
so,
if
you
have
the
latest
version
of
the
dot
in
the
core
SDK
three
one,
three
hundred,
then
you've
got
blazer
webassembly.
It's
the
templates
just
included.
It's
also
ships
with
visual
studio.
If
you
have
sixteen
six
visual
studio,
20,
1916,
six
and
also
Visual
Studio
for
Mac
8.6
has
it
in
the
box.
C
So
if
you
have
those
you
can
just
file
new
project,
your
first
place
or
webassembly
app
right
away.
It
is
fully
supported
one
well
one
point
that
we
want
to
make
sure
people
understand
that,
because
this
is
the
first
release
of
blazer
web
assembly,
we
didn't
want
to
make
it
an
LTS
release
right
off
the
bat
like
we
tend
to
like
to
ship
something
at
least
once
before.
C
We
bless
it
with
an
LTS
support
cycle,
so
this
release
does
not
inherit
the
LTS
status
of
3.1,
even
though
it
ships
in
the
3.1
SDK
I
know
that
can
be
a
little
confusing
to
try
to
make
that
a
little
clearer.
That's
we
revved
the
version
of
blazer
webassembly
to
3.2,
so
that's
kind
of
separate.
This
is
a
current
release
of
blazer
webassembly.
C
That
just
means
that
when
we
ship
blazer
webassembly
again
with
dotnet
5
that
you'll
need
to
upgrade
to
that
to
that
that
version
relatively
soon
after
it
ships,
but
that
should
be
a
highly
compatible
release.
So
the
upgrade
should
be
relatively
painless,
but
it
is
fully
supported,
ready
for
production
ships
with
the
SDK
and
Visual
Studio,
it's
loaded
with
all
sorts
of
goodies.
C
These
are
the
features
that
we
listed
out
in
the
blog
post
support
for
dotnet
standard.
You
can
use
your
existing
don''t
libraries
on
the
client
and
the
server
you
can
host
an
asp.net
core.
You
can
deploy
your
app
as
a
standalone,
static
site.
We
support
authentication
out-of-the-box
using
ASP
net
core
identity
with
identity
server,
or
you
can
use
Azure
ad
as
your
ad
b2c
or
any
Open
ID
Connect
provider.
We
have
out-of-the-box
support
for
progressive
web
apps
that
you
showed
earlier
and
your
in
your
blog
post.
C
You
can
just
create
a
progressive
web
app
right
from
the
beginning,
with
whipped
laser
web
assembly
support
offline
support
native
OS
integration.
We
have
enabled
support
for
debugging,
both
in
the
browser
and
in
Visual
Studio
and
sathyas,
going
to
show
of
the
Visual
Studio
code
experience
as
well.
Today,
some
of
the
improvements
we've
been
working
on
there
il
trimming
and
pre
compression
to
reduce
the
the
app
size
as
much
as
possible,
out-of-the-box
support
for
configuration
as
well
as
globalization
and
and
localization.
C
So
it's
a
pretty
feature-rich
release
and
we're
super
thrilled
that
we've
been
able
to
make
it
available
for
folks,
the
the
uptick
spin.
It's
been
nice
to
watch
as
people
who
have
been
downloading
it
installing
it.
If
you
want
to
get
started
with
it,
just
head
on
over
to
blazer
net
and
download
the
latest
SDK
or
just
update
your
visual
studio
version,
and
you
should
you
should
have,
it
should
be
all
set
to
go
and
I
think
what
we're
gonna
do
is
Steve's
gonna
gonna
show
it
to
us.
C
B
Just
take,
let's
do
it
all
right,
so
Dan
just
had
this
massive
list
of
features
in
laser
webassembly
and
as
part
of
this
release,
we
wanted
to
have
a
new
sample
app.
That
would
give
a
demonstration
of
just
about
all
of
those
features
in
one
application,
and
so
that's
what
I'm
going
to
use
to
to
show
off
some
of
this
stuff
to
you
now.
Let
me
just
start
sharing
this
screen
and
then
hopefully
we
can
go
and
see
some
of
this.
B
So
we've
got
this
application
here
called
car
checker,
which
is
it's
a
blazer
webassembly
application.
It's
also
got
an
Espeon
out
core
server
back-end
and
it's
got
quite
a
lot
of
functionality
in
it.
So
let
me
just
show
you
a
little
bit
of
what
this
app
can
do
and
then
we'll
dig
into
the
code
and
see
how
it
Ellis
traits
some
of
the
features.
B
So
when
I
pop
this
up
in
my
browser,
you
can
see
the
first
and
only
thing
that
a
user
can
do
initially
is
login,
so
you
might
think
okay
well,
like
who's
gonna
login,
what
kind
of
users
this
thing
is!
Does
this
app
anyway?
Well,
the
scenario
for
this
app
is
a
car
rentals
company.
So
the
idea
is
people
hire
cars
from
you
and
then
later
on.
Obviously
they
bring
those
cars
back
and
your
staff
need
to
check
that
the
cars
have
been
returned
in
good
condition.
B
They
need
to
know
that
the
fuel
level
is
right
and
they
need
to
check
for
any
damage
that
the
user
might
have
left
on
the
vehicle.
So
the
user
for
this
application
would
be
an
employee
at
the
car
rental
company,
so
they
would
come
along,
maybe
on
a
desktop
device
or
most
likely
on
some
kind
of
mobile
device
that
they
can
take
out
into
the
parking
lot
and
the
first
thing
they
would
have
to
do
is
login.
B
So
this
is
illustrating
some
of
the
built
in
off
and
login
features
that
is
part
of
the
blazer
webassembly
release.
So
when
I
click
on
login,
you
can
see
it
takes
me
to
this
server
rendered
login
page.
This
is
a
SP
net
cause
existing
built-in
login
system
and
I've
already
registered
a
user
account
for
myself
on
there.
B
So
I'm
just
going
to
assign
myself
in
and
when
I
do
become
sign,
then,
obviously,
instead
of
seeing
that
login
screen
I'm
gonna
see
a
different
UI
and
the
thing
that
the
user
needs
to
do
next
is
type
in
the
license
number
of
a
vehicle
that
our
customer
is
returning.
So
let's
say
they
start
typing.
You
can
see.
B
We've
got
an
autocomplete
kind
of
thing
going
on
there
and
I'm
going
to
choose
one
of
these,
and
that
will
take
me
into
the
details
for
a
particular
vehicle
that
we
know
about
so
I
find
the
staff
member.
Maybe
the
first
thing
I'll
do
is
update
the
mileage
that
we
know
about
so
maybe
I'm
gonna
bit
crazy
and
I'll
type
in
a
an
absolutely
mad
number
that
can't
possibly
be
right
and
you
can
see
that
we've
got
validation
showing
up
there.
Okay,
so
that's
a
good
thing.
B
Maybe
I'll
change
the
fuel
tank
level
to
reflect
whatever
the
customer
has
returned,
and
you
might
notice
that
this
Save
button
has
appeared
up
on
the
right.
That's
because
this
forms
system
is
keeping
track
of
the
state
of
what
has
been
edited
in
the
form,
and
we
know
that
there's
a
change,
so
we
can
prompt
the
user
to
click
on
save
now.
B
We've
also
got
this
cool-looking
3d
view
down
here,
I'll
explain
more
about
how
that's
been
implemented
later,
but
if
you're
an
employee,
you
could
go
out
and
walk
around
the
car
and
check
for
any
damage
that
might
be
on
it
and
compared
with
what
damage
has
already
been
recorded
on
the
database.
So
you
might
come
in,
and
you
might
say,
oh
dear
there's,
some
really
bad
scratching
on
this
front
corner
here.
So
I'll
click
on
that
and
then
I'll
tap
on
ad
note
and
maybe
I
just
tried
to
hit,
save
without
doing
anything.
B
Okay
and
then
I'll
hit
save,
and
then
we
can
see.
We've
now
got
these
three
items
very
good
and
I'll
hit
save
again
and
that
will
all
get
saved
back
to
the
server
okay.
So
there's
a
lot
of
functionality
in
this
application.
We've
got
the
auth
system
that
I
just
mentioned.
We've
also
got
the
forms.
Validation.
We've
got
some
JavaScript
Interop
going
on.
We've
got
a
local
client-side
database
that
I'll
show
you
in
a
minute.
We've
got
full
PWS
support,
so
this
can
be
installed
and
used
offline
and
we've
got
internationalization
as
well.
B
B
This
is
not
going
to
be
a
super
polished
and
formal
demo,
so
I'm
very
happy
for
to
take
questions
as
we're
going
along.
So
if
any
of
the
other
speakers
on
the
call
want
to
just
jump
in
and
talk
about
stuff,
you're
very
welcome
to
do
so,
and
if
questions
get
posted,
then
by
all
means
interrupt
me
as
well
as
that
son
all
right,
yeah.
A
B
All
right,
so,
while
people
are
thinking
of
questions,
let
me
start
off
with
the
first
feature
area
to
show
you,
which
is
to
do
with
authorization.
Now
I
already
showed
you
that
I
had
to
log
in
in
order
to
get
into
the
application,
but
let's
think
about
going
beyond
just
knowing
what
a
person's
name
is
and
think
about
actually
protecting
some
data
or
some
api's
that
are
on
the
backend
server,
so
I'm
going
to
go
into
my
code
and
have
a
look
inside
the
server
project
here
so
well.
Firstly,
let's
talk
about
these
three
projects.
B
Okay,
so
we've
got
client-server
and
shared
I
know
that
most
people
on
the
call
have
probably
seen
this
by
now,
but
just
for
anyone
who's
new
by
default
with
Blaser
webassembly,
you
don't
have
to
have
an
asp
net
core
server,
if
you
don't
want
to,
but
you
can
and
of
course
they
work
really
great.
If
you
do
and
now
in
this
case,
I
do
so
I've
got
my
client
project
wizard,
which
is
a
blazer
web
assembly
up
and
that
works
completely
independently
of
the
server.
B
If
we
want
it
to,
we've
got
a
server
which
is
an
asp
net
core
server
and
that's
dealing
with
some
api's
and
various
bits
of
security
stuff
and
then
I've
also
got
this
shared
project
with
code.
That's
shared
between
them
and
we'll
talk
about
more
about
that
in
a
minute,
but
on
the
server
inside
my
controllers,
folder
I've
got
this
vehicle
controller,
and
that
is
where
most
of
the
backend
API
s
are.
B
So
this
is
where
the
client
can
fetch
a
list
of
the
changed
vehicles
or
the
details
of
a
particular
vehicle
and-
and
things
like
that
now
at
the
moment
it
there's
no
actual
access
control.
Anybody
in
the
world
can
just
hit
it
without
even
being
logged
in
so
I
want
to
change
that
and
I'm
going
to
put
the
authorize
attribute
there
on
the
server-side
code.
B
Now
I
could
apply
things
like
rules
around
roles
and
policies
and
things
like
that,
but
for
now
I'm
just
going
to
say
authorize,
which
means
in
order
to
access
this
controller,
you
just
have
to
be
logged
in
now.
I
am
logged
in,
but
let's
see
what
happens
when
I
hit
reload,
let's
see
if
we
can
still
interact
with
the
backend
API,
so
you'll
see.
Now
we
get
this
error.
B
All
your
real
enforcement
has
to
happen
on
the
server.
So
that's
what
I've
just
done:
I've
restricted
access
to
the
API
to
logged
in
users.
Now
you
might
be
thinking
well,
I
am
logged
in
as
you
can
see.
So
why
didn't
it?
Let
me
access
that.
Well,
it's
because
I
disabled
some
code-
that
is
needed
and
I
only
did
this
just
so
that
I
can
demonstrate
the
code
to
you,
because
by
default,
when
you
are
talking
to
a
back-end
API,
that's
been
nominated
by
your
code.
B
We
automatically
include
the
access
tokens
with
all
the
requests
and
that's
what's
needed
for
the
server
to
accept
your
requests,
but
just
so
I
can
demonstrate
that
to
you,
I
commented
this
out,
which
is
normally
not
commented
out
by
default.
So
what
this
code
means
is
whenever
we
are
talking
to
using
it,
making
HTTP
requests
to
the
server
which
is
on
the
same
base
address
that
the
client
is
being
served
from.
B
B
There
is
this
authorization
header
which
includes
this
bearer
token,
which
is
what
we
got
from
the
server
when
we
signed
in
so
the
point
of
all.
This
is
just
to
show
you
that
out
the
box.
Blazer
webassembly
knows
how
to
integrate
with
a
spinet
cause
conventions
around
access
tokens,
and
you
can
automatically
have
the
server
and
client
know
who
the
user
is
and
enforce
access
control.
Does
that
make
sense?
Were
there
any
questions
that
came
up
at
this
point?
B
B
B
B
So
that's
a
sort
of
general
industry
standard
way
of
dealing
with
acquiring
access
tokens
and-
and
you
know
the
whole
mechanism
for
describing
who
a
user
is,
but
a
different,
slightly
older
form
of
Earth
mechanism
would
just
be
plain
old,
cookie
based
off
you
log
in
some
way
or
another,
the
server
issues,
the
user.
With
a
cookie.
B
You
send
that
cooking
with
the
your
requests
and
that's
how
the
server
knows,
who
you
are:
that's
really
easy
to
set
up
with
Blaser
webassembly
when
it's
hosted
on
an
ASP
Knut
core
server,
because
it's
all
on
a
single
domain.
So
by
default,
your
cookies
will
just
be
sent
with
all
the
requests,
and
so
it
pretty
much
just
works
out
of
the
box.
We
don't
include
a
template
for
it,
because
it's
not
really
the
absolutely
the
recommended
way
to
set
up
off
these
days.
B
I'm,
not
perhaps
the
most
the
best
expert
to
talk
to
about
that.
But
cookie
based
earth
does
have
some
additional
complications
to
do
with
cross-site,
request
forgery
and
dealing
with
things
like
Terkel,
renewal
and
and
various
other
things.
That
can
be
a
little
awkward
with
it.
So
we
prefer
the
slightly
more
modern
OAuth
base
system
in
the
templates,
but
it's
not
very
difficult
to
to
turn
it
on.
If
you
prefer
regular
cookie
based
off,
but
I,
don't
have
a
specific
sample
for
you.
So
any
more.
A
B
It's
not
what
server
rendered
so
this
part
is
all
client
rendered
in
web
assembly.
But
if
I
go
over
here
into
my
managed
account
you'll
see
that
everything
that's
under
this
identity
prefix
in
the
URL
space.
This
is
all
coming
from
asp
net
cause.
Traditional
server
ended
UI
for
logins,
which
is
a
really
nice
system.
It's
very
extensible,
you
know,
we've
got
all
their
like
things
like
2
factor,
auth
and
such
in
there,
and
you
can
change
how
its
styled
and
everything.
B
That
is,
it's
considered
a
poor
practice
to
integrate
a
login
system
into
a
spa,
because
it
means
that
the
user
doesn't
really
know
where
they're
given
their
password
to
I
I'm,
not
going
to
get
into
that
into
much
detail
because,
like
I,
say
I'm,
not
the
I'm,
not
an
expert
about
that.
But
you
can
go
and
search
and
read
the
whole
debate
online
about
whether
it's
good
or
bad
to
to
have
a
separate
login
system
when
it
comes
to
a
spa.
But
the
main
reason
we
didn't
do.
It
is
just
that
we
didn't
have
time.
B
A
E
B
So
when
you
create
your
blazer
web
assembly
project,
you
can
choose
between.
Let
me
just
show
you
so
I'm
sure
many
people
will
have
seen
this
by
now,
but
when
you
create
your
blazer
project,
you
choose
between
the
server
and
the
web
assembly
app
model
and
oh
I,
don't
have
a
slide
for
it.
Okay,
so
the
next
thing
that
it
asks
you
is
how
you
want
it
to
be
hosted
whether
you
want
it
to
be
stand-alone
on
earth.
If
you
choose
the
hosted
on
SP
Annette
core,
then
it
is
hosted
on
an
MVC
side.
B
Well,
you
know
we
don't
really
distinguish
between
MVC
and
raiser
pages
or
other
flavors
of
SP
net
anymore.
So
it's
just
a
nice
peanut
core
server
which
can
host
MVC
controls.
If
you
want
to
and
inside
this
card
checker
project,
that's
exactly
what
I've
got
here.
You
see,
I've
got
a
controller,
so
it's
kind
of
pretty
much
an
out-of-the-box
default
to
Hearst
on
vc
x,.
B
Okay,
so
we
just
looked
at
some
auth
stuff.
Let's
talk
about
the
next
thing,
which
is
co-chairing
all
right
now,
there's
a
few
different
angles
to
talk
about
yeah
and
the
first
one
is
to
do
with
how
solutions
tend
to
be
structured
with
Blaser
webassembly.
I
already
mentioned
this.
This
three
project
system
is
a
very
common
convention
and
we
do
have
a
project
Templer
even
for
it,
even
though
you
don't
have
to
do
it
this
way
and
within
the
three
project
system,
it's
very
normal
to
have
a
shared
project
and
there's
nothing
magic
about
this.
B
It's
just
a
nest
under
class
library
which
gets
used
by
the
client
and
the
server,
and
it
gets
used
for
quite
a
lot
of
stuff.
Typically,
people
put
things
like
their
domain
model
classes
in
there,
as
you
can
see
in
this
case,
I've
got
its
classes
to
represent
a
vehicle
and
parts
of
a
vehicle,
or
that's
just
an
enum
and
know
that
someone's
been
added
to
have
added
to
a
vehicle,
and
this
gets
used
for
quite
a
lot
of
stuff.
B
In
this
particular
example,
it
gets
used
to
define
the
actual
data
schema
of
an
underlying
server-side
database
that
gets
inferred
directly
using
F
from
all
of
these
attributes
and
the
relationships
between
classes.
So
it's
the
database
schema.
It's
also
used
to
define
the
validation
rules
that
the
server
will
enforce
on
every
single
request
to
the
API
controllers.
It's
also
used
to
define
the
validation
rules
that
are
used
on
the
client
and
it's
also
used
to
define
the
shape
of
the
JSON
traffic
that
is
exchanged
between
the
server
and
the
client.
B
So
there's
a
huge
amount
of
different
stuff,
that's
all
being
driven
from
the
metadata
within
this
project.
Everything
is
is
built
on
this
shared
project,
so
there's
a
huge
opportunity
to
share
things
that
way,
which
is
really
nice
and
to
give
you
just
another
example
of
that.
Let's
have
a
go
at
adding
an
extra
valid
a
so
that
I
can
show
you
a
bit
more
forms
and
validation
stuff.
B
So
if
I
go
back
to
my
site
here
and
I
go
back
into
that
car
that
we
had
before
so
when
I
did
this
last
time,
I
didn't
actually
add
a
photo.
Let's
say
that
I
want
it
to
be
required
that
you
must
add
a
photo
when
you're
adding
a
new
item
of
damage,
so
I
can
simply
go
to
this
photo
URL
and
so
that
it's
required
and
I'm
going
to
give
an
error
message.
Let's
say
all
damage
must
be
food
to
carafe,
okay,
all
right!
B
So
that's
a
new
rule
and
that's
going
to
be
enforced
by
both
the
server
side
logic
when
requests
go
to
the
server,
as
well
as
the
client
side
logic.
So
now,
if
I
reload
stuff
in
the
browser
and
I
go
back
into
that
thing
and
now
I
try
to
save
it,
what
we
get
now
we
get
an
error.
You
know
we
get.
This
all
damaged
must
be
photographed.
You
simply
can't
save
that,
and
it's
also
true,
of
course,
if
I
treat
choose
to
add
some
new
damage.
B
So
if
I
click
Save
there
you'll
see
that
we've
got
the
text
field
is
required
there
and
damage
must
be
photographed.
So
we've
immediately
been
able
to
share
that
logic
between
server
and
client,
but
the
there's
a
bit
of
a
problem
right
now,
which
is
that
I
don't
have
any
way
of
actually
adding
a
photo.
If
I
click
on
this
take
new,
it
doesn't
do
anything
I'm
clicking
on
it,
but
nothing
happens.
So
why
is
that?
Let's
have
a
look
I'm
gonna
go
into.
My
vehicle
note
editor.
B
So
this
is
a
razor
component
which
I
I
know.
Most
viewers
will
be
familiar
with.
This
is
how
Blazer
cut
Burnet
so
written.
It's
a
combination
of
HTML
and
see
sharp
code
mixed
together
in
one
delightful
recipe
there
and
down
here.
This
part
of
the
form
here
is
where
the
photo
is
dealt
with.
So
we're
dealing
with
the
label.
We'll
talk
about
this
localized
thing
later.
This
is
where
we're
displaying
the
existing
photo.
B
If
there
is
one-
and
there
isn't,
this
is
where
we
display
the
validation
message
for
air
and
we'll
talk
about
damage
detection
in
a
little
bit.
But
right
now
nothing
actually
reacts
when
you
click
on
this
label.
So
you
know
nothing.
I
can't
add
a
photo.
So
this
brings
me
to
the
second
form
of
code
sharing
that
I
want
to
talk
about,
which
is
sharing
code
from
third
parties
or
particularly
getting
stuff
from
NuGet
packages,
which
is
one
of
the
strengths
of
the
dotnet
ecosystem.
B
So
now
that's
been
added,
I
can
say:
okay,
let's
say
I
want
an
input
file
component.
What
is
it
called?
I?
Don't
think
it's
updated.
Yet
let's
try
this
again
blazer!
Okay,
there
we
go
so
at
the
moment.
I
have
to
give
this
prefix,
which
I
don't
really
like
very
much
so
I'm,
going
to
take
this
prefix
like
that
and
I'm
going
to
add
a
using
statement
for
it.
Okay,
so
now,
I
won't
need
the
prefix
anymore.
I
can
now
just
start
adding
an
input
file,
and
that
is
going
to.
Let
me
upload
a
photo.
B
Okay,
now
I've
already
prepared
a
bit
of
logic
that
I
need
so
I'm
going
to
say,
I'm
configuring,
the
browser
to
say
I
only
want
the
user
to
choose
image
files,
and
this
also
prompts
mobile
devices
to
use
the
camera
UI.
When
you
click
on
it
and
then,
when
you
do
choose,
one
I
want
to
call
this
C
shop
method
handle
photo
selected
which
doesn't
exist
and
hence
I'm
getting
an
error
message.
So
let's
put
that
in
I've
got
all
these
different
event.
B
Handlers
here,
which
I'm
not
going
to
explain
I'm
just
going
to
add
a
method
called
handle,
photo
selected
and
that's
going
to
receive
all
the
files
that
the
user
is
chosen
because
we
support
multiple
selection,
except
in
this
case
we're
only
going
to
support
one
so
we'll
just
take
whichever
the
first
one
is,
that
you've
picked
we're
going
to
convert
it
to
a
JPEG
file
with
a
certain
maximum
resolution
and
we're
going
to
set
that
as
the
URL
of
the
photo
on
this
particular
note.
So
I
hope
that
makes
sense.
B
Let's
see
if
we
can
now
actually
add
photos
to
our
notes
that
we
are
adding
for
the
vehicles,
so
I'm
recompiling
that
and
then
I'll
go
back
to
the
browser
and
I
will
reload
and
when
the
server
comes
back
up,
okay,
I'm
now
going
to
tap
on
that
this
time,
I'll
click
on
the
photo
and
you'll
see
that
this
time
we
get
a
file
picker.
Now
you
get
different
kind
of
UI,
depending
on
what
device
you're
using
it's
very
different.
B
B
I
haven't
added
photos
for
these
other
things,
so
the
server
is
actually
going
to
reject
a
request
if
I
try
to
save
it
with
these
other
things,
so
I'm
going
to
delete
these
other
things
just
to
save
myself,
the
trouble
of
dealing
with
that
and
I'll
hit
save
and
that
all
gets
saved
back
to
the
server.
Now
you
might
be
wondering
what
this
detect
damage
thing
was
going
to
be
if
I
click
on
that,
that
is
kind
of
an
unrelated
demo,
but
it's
cool.
B
It
uses
ml
now
on
the
server
to
look
at
the
photo
that
you've
uploaded
and
detect
whether
it
believes
that
the
vehicle
is
damaged
enough
to
charge
the
customer
for
the
damage,
so
it's
kind
of
unrelated
to
blazer,
but
it's
a
cool
thing,
so
I
thought
I
would
just
show
you
anyway.
So
there
you
go.
That's
a
few
different
code
sharing
things
any
questions
or
observations
about
that.
Well,.
B
A
B
Yeah,
okay,
so
let's
have
a
look.
That's
another
example
of
code
sharing,
I
suppose,
but
it's
also
an
example
of
JavaScript
interrupts.
So
in
the
vehicle
editor,
you
will
see
that
we've
got
this
component
here
called
scene
view.
Now
that
is
coming
from
an
external
NuGet
package,
the
that's
another
blazer
component,
it's
a
very
simple
3d
viewer,
it's
quite
limited.
B
So
that's
how
the
this
side
of
the
vehicle
is
highlighted
there,
because
we've
got
some
damage
on
it
right.
It's
not
a
super
interesting
component.
I
haven't
actually
published
the
sources
for
it.
I
will
do
but
no
one's
going
to
be
very
excited
when
they
say
it's
really
simple,
but
yeah
I
use
the
three
J
s
on
the
inside,
which
is
kind
of
an
example
of
the
JavaScript
Interop
feature.
B
Which
conveniently
is
the
next
thing
to
talk
about
awesome
all
right,
so
I've
just
shown
you
an
example
of
how
we
can
call
out
to
a
third-party
JavaScript
library.
So
this
is
using
the
three
J's
library
behind
the
scene
and
it's
all
wrapped
up
inside
a
new
get
package,
and
that's
really
the
easiest
way
to
do.
Javascript
Interop
is
just
to
not
do
it
is
to
like
use
someone
else's
work
that
you
just
pull
in
from
a
new
get
package,
and
then
you
don't
have
to
deal
with
it.
You
can
just
do
coding
in.net.
B
So
that's
really
easy,
but
there
are,
of
course
cases
where
you
want
to
write
your
own
JavaScript
code
and
interrupt
with
it
and
an
example
of
that
within
this
project.
Is
the
database
because
one
of
the
business
requirements
of
this
product
this
car
checker
app
is
that
it
needs
to
support
full
offline
use
because
the
employees
who
are
out
in
a
parking
lot
checking
vehicles.
B
It's
got
three
different
tables
in
it,
one
to
track
edits
that
we
haven't
synchronized
with
the
server
one
to
track
just
general
metadata
about
stuff,
and
then
we've
got
the
the
data.
That's
come
from
the
server,
so
this
is
all
incrementally
synchronized,
so
we
don't
mind
even
if
it's
a
giant
database
and
and
that
contains
all
the
vehicles
that
are
known
at
this
particular
location
and
like
lots
of
information
such
as
all
the
notes
that
we've
got
about
them,
so
that
is
all
implemented
inside
the
little
javascript
file
and
it's
using
the
index.
Db
api's.
B
It's
not
that
this
one!
Okay!
So
within
this
file,
it's
it
might
look
a
little
scary
if
you've
not
seen
this
kind
of
code
before,
but
it's
not
too
bad.
It's
only
36
lines
of
code
and
that
36
lines
is
enough
to
define
the
actual
data
schema
for
our
database.
So
we've
got
these
three
tables
that
I
showed
you
before.
B
So
if
we
want
to
get
all
of
the
outstanding
local
edits
that
haven't
been
synchronized
to
the
server,
we
can
tell
the
JavaScript
Interop
system
to
call
this
function.
Local
vehicle
store,
get
all
and
then
we'll
get
everything
from
that
particular
table.
And
similarly,
we've
got
some
logic
for
synchronizing
stuff
to
the
server,
which
is
quite
straightforward.
We're
just
going
to
iterate
over
all
the
outstanding
edits
and
for
each
one
of
them
we're
going
to
send
a
put
request
to
the
server
to
send
the
Edit
up
to
the
server.
B
We'll
check
that
the
server
agrees
that
that's
successful.
There
were
no
validation
errors,
and
if
that
works,
then
we
can
delete
the
local
edit
and
then
ultimately,
we
can
ask
the
server
to
give
us
a
list
of
changes
that
other
people
of
submitted
as
well.
So
it's
pretty
simple
stuff.
It's
just
a
nice
way
of
wrapping
up
some
JavaScript
API
is
in
a
dotnet
shape
so
that
you
can
consume
it
as
a
nice
service
through
our
application
that
sound
good.
C
B
Alright,
then
so,
okay,
so
there's
actually
two
different
ways
that
images
get
uploaded
in
this
application
and
if
we
haven't
know
if
we've
really
got
time
to
dig
into
this
stuff,
but
since
you've
asked
inside
the
vehicle,
wait
was
that
code
that
we
had
before
is
the
vehicle.
Note
editor
all
right.
So
when
you
choose
a
photo,
the
way
I've
set
it
up
in
this
case
is
quite
simplistic,
we're
just
converting
it
to
a
data
URL.
B
So
that's
a
big
base64,
encoded
representation
of
the
image
that
we're
just
sticking
into
a
string
property
on
the
vehicle,
and
now
that's
really
convenient.
Given
the
way
this
offline
store
works
because
it
all
just
becomes
part
of
this
index
DB
database
and
we
don't
have
to
do
anything
special
about
it
and
it's
part
of
the
normal
validation
system
and
such
so
for
sufficiently
small
images.
This
works
great
and
in
this
case
we've
got
JPEGs
of
this
resolution,
so
they'll
only
be
about
50
kilobytes
and
it
works
fine
for
that.
B
If
you
want
to
deal
with
much
larger
images,
then
you
might
want
to
look
at
a
different
way
of
uploading
images
in
them.
In
a
more
of
a
binary
way-
and
we've
got
that
an
example
of
that
in
this
damage
detection
component,
so
you
remember
when
I
chose
that
picture
of
the
scratched
vehicle
and
I
clicked
on
detect
damage.
Well,
what
that
did
is
it
called
this
method
here
performed
damage
detection,
and
that
gets
the
image
as
a
byte
array,
in
this
case
it's
having
to
convert
it
back
from
the
dirty
or
Albert.
B
If
you
didn't
use
the
data
URL
in
the
first
place,
you
would
already
have
had
a
byte
array,
and
then,
with
that
byte
array,
we
can
just
do
an
HTTP
POST
to
an
endpoint
on
the
server
just
sending
it
as
pure
binary
content,
and
then
the
server
can
receive
that
byte
array
and
do
whatever
it
wants
with
that.
So
that's
the
low
overhead
way
of
sending
images
to
the
server.
Does
that
answer
the
question
I.
C
B
So
that's
going
to
open
up
a
new
browser
instance
and
I,
don't
actually
know
whether
I'm
going
to
be
logged
in
or
not
when
this
comes
up
because
it's
working
on
a
separate
profile
and
that's
all
because
we
need
the
browser
to
open
its
remote
debugging
pot
so
that
we
can
connect
to
it
from
visual
studio.
So
when
that
comes
up,
let's
see!
Yes,
we
are
logged
in
that's
good
all
right.
So
let's
go
back
to
that
car
that
we
wanted
to
check
the
damage
on
the
forms.
B
With
this
picture
of
the
scratches
I'm
going
to
set
some
breakpoints
now
I'm
going
to
set
breakpoints
first
in
the
client-side
code,
that's
running
on
webassembly,
so
I'll
go
into
this
damage.
Detection
component,
where
we
already
are
in
fact
and
I'll,
set
a
breakpoint
here
before
we
send
the
image
to
the
server
and
I'll
set
another
breakpoint
after
we
get
the
result
back
from
the
server
and
to
show
that
this
is
really
full
stack.
Debugging
I'm
also
going
to
set
a
breakpoint
on
the
server
side
code
here
inside
my
MVC
controller,
like
that.
B
Ok,
so
we've
got
breakpoints
on
both
sides
of
the
wire
now
within
a
single
debugging
session
and
I'll
hit,
detect
damage
and
we'll
see
that
immediately
we
hit
the
client-side
code.
So
this
is
running
on
webassembly
and
vs
is
connecting
to
that
in
the
browser,
and
we
can
inspect,
we
can
see
the
is
detecting.
Damage
is
initially
false,
but
if
I
press
f10,
then
is
detecting,
damage
becomes
true
and
we
can
follow
through
that
chain
of
execution.
B
That's
come
back
and
we
can
see
that
the
damage
detection
result
is
damaged.
True
with
this
94
percent
confidence
and
I
can
press
f5
one
more
time
and
we
will
end
up
back
in
the
browser
and
you'll
see
the
result
in
the
UI.
So
I
hope
people
agree
that
this
is
a
pretty
cool
experience.
Now
the
fact
that
we
can
just
set
breakpoints
wherever
we
want
in
both
server
and
client
side
code
and
step
between
them.
It
makes
for
a
very
fluid
full
stack,
dev
experience.
B
Now
that's
just
visual
studio,
though,
which
obviously
is
limited
to
well.
Vs
for
windows
is
limited
to
windows,
but
we
know
a
lot
of
people
want
to
do
that
everything
in
Visual
Studio
code.
Now
we
do
already
have
some
support
for
that,
but
it's
going
to
get
a
lot
cooler
very
soon
and
Sophia
is
going
to
give
you
a
demo
of
that.
So
can
I
hand
over
to
you
Sophia.
For
that
you
know
all.
E
Cool,
can
everyone
see
my
BS
code
window
yeah
great,
so
what
you're
going
to
see
here
is
the
current
debugging
experience
for
Blazer
web
assembly
on
vs
code
whenever
I
open
a
blazer
web
assembly
application
you'll
be
prompted
to
create
a
launch
configuration,
which
is
how
vyas
code
determines
what
kinds
of
things
it
should
run
when
you
start
a
debugging
session.
This
is
what
the
launch
configuration
looks
like
now.
The
key
thing
to
notice
about
it
is
it's
a
two-step
process.
E
So
the
first
thing
that
you
have
to
do
is
you
have
to
launch
the
blazer
application
as
a
standalone
app,
so
I'm
going
to
go
ahead
and
run
that
and
it's
going
to
start
running
my
application
and
the
next
thing
I
have
to
do
is
I
have
to
launch
the
debugger,
the
chrome
debugger
for
my
application.
So
it's
going
to
go
ahead
and
do
that
now.
E
Now
that
I've
got
this
application,
open
I
can
actually
start
to
hit
some
breakpoints
that
I've
set
in
my
application
here,
I'm
inside
a
breakpoint
and
then
an
event
handler
and
I
can
go
ahead
and
do
what
I
might
typically
expect
to
do.
I
can
view
the
value
of
properties
in
the
debug
console
hover
over
and
view
the
value
of
properties.
Things
like
that.
So
that's
what
the
debugging
experience
looks
like
that,
once
I'm
done
I'm
going
to
shut
down
the
debugging
session.
E
Of
course,
I
have
to
shut
down
two
debugging
sessions,
because
it's
a
two-step
process.
Now
you
might
notice
that
I'm
on
a
Mac,
not
on
Windows,
so
there's
another
thing
that
I
have
to
do,
which
is
I,
have
to
clean
up
some
lingering
processes
that
were
created
but
weren't
cleaned
up
after
I
finished
my
debugging
session,
so
I'm
gonna
hop
over
to
my
terminal
and
do
that
now.
E
So
this
is
the
dahle
business
that
you
have
to
get
into
to
make
sure
that
things
are
cleaned
up
properly
when
you're
debugging
with
the
previous
vs
code
experience
now,
there's
a
lot
going
on.
There
launch
configuration
was
just
so
complicated
the
fact
that
I
have
to
do
it
in
two
steps
and
the
fact
that
I
have
to
go
out
and
clean
up
some
processes
that
were
still
running
on
my
machine
after
I
finished
the
debugging
session.
E
But
trust
me
that
I'm
about
to
start
debugging-
and
you
can
see
here
that
now
I'm,
prompted
to
select
an
environment
I've
got
some
options
like
don''t,
core
and
nodejs.
But
then
there's
also
this
blazer
webassembly
debug
option,
so
I'm
going
to
go
ahead
and
select
that
and
what's
going
to
happen
is
that
my
application
is
going
to
be
launched
and
a
browser
is
going
to
be
open.
So
I
can
debug
into
my
application.
Let's
go
ahead
and
do
that
we
can
go
through
the
same
process.
E
We
can
help
her
overvalues
inspect
the
property
in
our
debug
console,
and
this
works,
for
you
know,
event
handlers.
It's
also
going
to
work
for
lifecycle
methods
on
your
components.
So,
if
I
open
another
page
that
I
have
here,
I've
set
another
breakpoint
that
is
going
to
be
hit
when
I
open
the
application
once
the
component
is
initialized,
so
I
can
hit
that
as
well.
I
can
hover
over
values
step
over
the
whole
shebang.
It's
really
cool
about
this.
E
E
The
S
code
has
a
debug
adapter
extension,
which
essentially
allows
programming
languages
like
Python
or
C,
sharp
or
node
to
define
what
happens
when
a
user
starts
a
debug
session
steps
through
code
yadda
yadda,
now
that
we
have
a
blazer,
wasm,
debug
adapter,
the
debugging
experience
for
blazer
on
vs
code
is
now
a
first-class
experience.
So
as
we
continue
to
improve
it
and
ship
out
new
features,
you'll
be
able
to
see
all
of
that
under
this
debug
adapter.
E
It's
kind
of
unique
in
the
fact
that
blazer
is,
you
know,
justice
first-class
as
Python
or
C
sharp
in
the
debugging
experience
in
vs
code.
This
is
going
to
be
shipping
in
the
upcoming
release
of
the
Omni
sharp
extension,
which
you
should
expect
to
see
you
within
the
week
or
so,
and
you
can
start
to
use
this
right
away
for
debugging
standalone
and
hosted
applications
on
vs
code
across
all
platforms.
This
includes
Windows,
Mac
and
Linux.
So
that's
some
of
the
coolness.
E
C
A
B
Are
some
limitations
there,
and
so
we
are
aiming
to
cover,
like
you
know,
90%
of
what
anyone's
ever
going
to
do.
Realistically
we're
not
going
to
have
100%
coverage
anytime
soon,
because
if
you
can
imagine
what
that
means,
it
means
like
being
able
to
compile
arbitrary
c-sharp
and
since
the
the
compiler
doesn't
actually
exist
at
this
point
within
the
whole
Devon
execution
cycle,
there's
only
so
much.
We
can
go
with
that,
but
yeah.
It
should
be
the
vast
majority
of
things
that
people
need
to
do.
B
B
Cool
all
right,
then,
so,
where
are
we
now
I'm
gonna
I'm
gonna
move
a
bit
quicker
through
these
next
two
things,
because
I
think
we've
we've
been
taking
a
long
time.
So
next
one
internationalization
not
to
suggest
it's
not
important.
Of
course
it
is
it's
just
so
effortlessly
simple
that
you,
you
know,
you'll
barely
need
to
see
it
you'll,
just
all
right.
B
So
right,
my
application
is
in
English,
as
you
can
see,
actual
English
British
English,
but
let's
say
that
I
don't
want
to
speak
English
anymore,
I
want
to
speak
a
different
language,
so
I'm
gonna
move
change
my
browser
settings,
so
how
do
I
do
that?
Let's
go
to
settings
and
then
languages
and
then
I'm
in
a
wrong
browser.
Oh
yeah,
they're,
on
toilets,
why
that
was
confusing.
To
me,
this
is
my
normal
browser
here
and
I'll
have
to
restart
my
application.
Server
there
we
go
could
have
done
all
that.
B
What
way
well
stuff
he
was
talking
all
right.
So
here
I
am
back
in
my
normal
browser
and
it's
in
English
and
I'm
gonna
go
to
the
language
settings
here
and
I'm
going
to
change
my
preference
to
Spanish,
like
that.
So
then
I
come
back
and
I
hit
reload
on
what
happens?
Is
it's
now
all
Spanish
now
not
just
the
front
page,
but
all
the
different
parts
of
it,
apart
from,
of
course,
things
that
users
have
entered,
and
so
why
is
that?
And
what's
actually
going
on
there?
Well
what's
going
on?
B
Is
that
we've
integrated
the
normal
res
x,
based
string
localization
of
the
localization
feature
that
SP
net
developers
will
recognize
from
server-side
code
into
blazer
web
assembly
so
to
see
that
in
actual
code
form,
let's
have
a
look
at
some
of
the
stuff
on
the
index,
appraiser
page,
which
is
the
home
page
and
you'll,
see
that
we're
injecting
a
nice
string
localizer,
that's
something!
We've
got
support
for
now.
It's
not
actually
turned
on
in
the
services
by
default.
You
have
to
go
to
your
di
configuration
and
add
a
localization
in
this
case
I've.
B
Also
given
a
path
to
some
resource
files,
I'll
show
you
in
a
sec,
so
you
can
install
you
can
inject
your
string
localizer
and
then,
whenever
you
want
to
have
a
string,
you
read
it
as
a
property
out
of
localize
like
that,
and
you
can
use
formatting
strings
if
you
want
to
inject
other
bits
of
text
into
it,
and
you
can
see
I've
done
that
everywhere
throughout
my
application
and
then
at
runtime,
the
the
Blaser
webassembly
runtime
knows
about
the
satellite
assemblies
that
get
generated
by
the
compiler.
So
here
I've
got
an
app
dot.
B
Yes,
dr.
ozox
and
if
I
open,
that
you'll
see
that
I've
got
Spanish
translations
for
all
of
these
different
strings,
helpfully
provided
by
Javier
on
our
team.
So
thanks
Javier
for
that,
and
so
that's
where
all
these
strings
are
coming
from
and
one
of
the
nice
things
about
this
design
is
that
you
don't
have
to
localize
everything
up
front.
You
can
do
it
incrementally.
So
as
an
example
of
that,
if
I
open
this
you'll
see
that
these
two
strings
manage
account
and
log
out,
they're,
not
localized.
Why
is
that?
B
Well,
let's
have
a
look
at
the
login
status
and
the
main
reason
why
they're
not
localized
is
just
that
they're
hard-coded
right,
but
if
I
wanted
to
localize
them,
I
could
start
doing
the
same
thing
that
we
had
before
at
localize
and
then
read
this
as
a
string
like
that,
and
if
I
do
that
and
I
don't
actually
have
translations
for
these
things.
In
my
res
Excel,
which
I
don't
then,
is
that
going
to
be
an
error?
The
answer
is
no.
B
Okay,
so
that's
a
good
question:
I,
don't
think
we've
really
got
any
features
around
localizing
URLs.
It
depends
I'd,
be
interested
to
know
what
the
requirements
are.
What
features
are
being
requested
here?
We've
got
the
ability
to
have
multiple,
different
URL
formats,
so
you
could
take
whatever
the
Spanish
for
vehicle
is.
Let's
see
if
I
can
find
it.
I
don't
know
whatever
Spanish
car.
B
So
you
could
add
multiple
URL
patterns,
I,
don't
suppose
that's
really
a
particularly
scalable
technique.
You
I,
don't
really
know
what
is
being
requested.
Yet
if,
if
the
person
posting
the
question
wants
to
file
an
issue
on
get
up
and
talk
about
the
requirements,
I
would
be
really
interested
in
getting
into
that
and.
A
B
So
it's
not!
It's
not
got
anything
to
do
with
query
strings
because
for
server-side
SP
net
core,
the
only
way
you
can
know
about
the
user's
culture
is
well.
The
the
main
way
to
know
about
is
the
the
languages
header
that
comes
with
the
requests,
but
also
you
could
set
up
a
custom
scheme
around
query
strings
when
you're
running
client-side.
There
there's
a
different
way
to
know
about
it,
which
is
a
built
in
JavaScript
API
inside
browsers,
which
corresponds
to
the
user
settings
and
that's
what
we
use
by
default.
B
If
you
want
to
customize
it
in
a
different
way
than
the
way
you
would
do
it
is,
you
would
go
into
your
program
main
and
you
would
write
something
like
system
threads
kernel
right.
Oh
no,
dear,
through
current
threats,
current
culture
equals
and
then
you
would
use
whatever
logic
you
want,
for
example,
based
on
URLs
or
you
could
read,
you
could
use
JavaScript
Interop
to
read
stuff
out
of
local
storage
or
or
anything
else
that
you
want
to
determine
what
culture
this
user
should
be
in,
and
you
would
say
it
that
way:
great.
B
Okay,
all
right,
then
final
area
progressive
web
apps.
So
this
is
one
of
the
really
nice
places
where
all
the
features
within
a
client-side
technology,
like
blazer
web
assembly,
come
together
to
give
you
this
the
ability
to
build
different
kinds
of
apps
that
you
couldn't
have
built
five
years
ago.
So
let's
say
that
we
want
this
application
to
look
and
feel
more
like
a
desktop
application.
Well,
that's
something
that
is
available
for
progressive
web
applications.
B
They
can
be
installed
into
the
users
operating
system,
they
can
work
offline
and
they
can
access
other
capabilities,
such
as
the
ability
to
receive
notifications
from
the
server,
even
when
the
users
not
on
the
site
and
to
do
things
like
upgrading
themselves
in
the
background
and
things
things
that
only
native
applications
would
normally
be
able
to
do,
and
that
is
something
that
we've
got
built
in
to
blaze.
A
web
assembling,
because
we've
got
a
PWA
template
in
the
box
and
what
that
gives
you
is
some
files
that
tell
the
browser
how
to
behave.
So.
B
We've
got
things
like
this
manifest
file
here
that
defines
what
the
name
of
the
app
is
and
it's
icon
and
colors,
and
things
like
that
and
the
fact
that
we've
got
that
file.
There
causes
the
browser
to
display
this
plus
button
yeah.
You
can
see
it's
prompting
the
user
to
install
car
checker.
So
if
I
click
that
I
get
this
option
to
install
the
application
and
I'll
do
that
and
you'll
see
it
now
pops
up
in
its
own
separate
window
with
its
own
color
scheme.
B
It's
not
doesn't
look
like
a
browser
anymore
and
you
can
launch
this
directly
from
the
Start
menu.
So
if
I
close,
that
down
and
I
start
typing
car
check
that
you
can
see,
it
shows
up
on
the
Start
menu.
Now,
if
I
was
on
a
Mac,
it
might
be
on
my
dock.
If
I
was
on
a
mobile,
it
might
be
on
my
home
screen
and
for
some
interesting
reason,
I
seem
to
have
somehow
broken.
B
I
know
there
is
anyway,
so
there
we
go
it's
working
and
it
respects
all
my
preferences
around
languages
and
things
like
that
and
the
other
nice
thing
is
that
it
can
work
off.
So,
let's
see
if
this
does
work
offline,
shall
we
I'll
give
you
a
clue?
It's
not
going
to
just
yeah.
Let's
just
go
through
the
process
of
finding
out
in
my
browser,
I'm
going
to
simulate
being
offline
like
that,
okay,
so
now
I'm
going
to
right-click
and
choose
refresh,
which
is
equivalent
to
starting
up
the
application.
B
When
you
don't
have
any
network
connection
and
we'll
see
if
it
can
successfully
work
offline,
and
the
answer
is
no,
it
cannot.
We've
just
got
an
error
because
we're
not
connected
okay.
So
why
is
that
I've
just
been
saying
that
PWA
is
work
offline?
So
why
doesn't
this
one?
The
answer
is
that
by
default
we
only
enable
offline
support
for
published
applications
and
the
reason
for
that
is
because
offline
and
capable
applications
update
themselves
asynchronously.
B
In
the
background-
and
if
that
was
the
case
during
development,
it
would
be
incredibly
annoying
because
every
time
you
make
a
change,
you
want
to
see
that
change
immediately.
You
don't
want
to
wait
for
some
kind
of
background
update
process
to
go
through,
so
we
only
enable
off
on
offline
support
for
published
applications
so
to
demonstrate
that
I'm
going
to
have
to
publish
my
application
and
I
will
do
that
on
the
command
line.
B
B
So,
let's
log
back
in
okay-
and
here
we
go
right
great,
so
I'm
logged
in
now-
you
can
see
that
glass
should
change
back
to
English,
otherwise
everyone's
going
to
get
confused
apart
from
Spanish
people
right
right
and
there
we
go.
So
you
can
see
that
the
updates
are
going
through
right
now
we're
online.
That's
all
good.
Let's
say
I
now
go
offline
using
the
same
technique
that
I
did
before
so
simulate
being
offline
and
I'll
hit
reload.
Do
we
get
an
error
message
this
time?
The
answer
is:
no.
We
don't
get
an
error
message.
B
It
comes
up.
You
can
see
all
these
red
things
on
the
right
which
shows
that
we're
failing
to
talk
to
the
server,
and
you
can
see
the
message
in
the
UI
saying
that
we
can't
sync
at
the
moment,
but
the
page
loads,
and
we
can
go
in
and
we
can
start
making
changes.
Let's
change
this
to
half-full
and
I'll,
hit
save
now,
of
course,
I'm
offline.
B
So
we
can't
synchronize
this
to
the
server
as
one
of
the
nice
things
of
having
the
local
database,
we
can
store
the
unsynchronized
edits
and
even
if
the
user
goes
away
and
comes
back
later,
which
I
can
simulate
by
reloading
the
page,
the
edits
are
still
there
waiting
to
be
synchronized.
So
if
our
staff
member
walks
back
over
to
the
office
now
where
they
get
within
range
of
Wi-Fi,
so
we'll
simulate
that
by
going
online,
they
can
hit
retry
and
now
the
update
actually
goes
through.
B
So
we've
got
a
really
nice
way
of
interacting
with
our
data.
Even
when
we
are
offline
and
then
the
final
way
that
I
want
to
show
you,
the
experience
around
PWA
is
is
to
do
with
a
real
mobile
device.
So,
let's
see,
if
I
can
show
you
my
mobile
phone,
let's
see
here
it
is
okay,
so
this
is
my
phone
and,
as
you
can
see,
I've
installed
a
car
checker
app
onto
my
home
screen.
It's
the
same
app
that
you're,
seeing
in
my
browser
there
with
a
mic
and
everything.
B
It's
obviously
the
same
thing
and
when
I
open
that
it
comes
up
in
a
screen
all
of
its
own,
it
doesn't
have
the
Safari
UI
around
it.
You
can
see
it
Falls
up
the
whole
area
in
the
curved
areas
and
everything
like
that,
and
it
just
behaves
the
same
thing
in
the
same
way
as
before.
So
everything
works
exactly
as
before.
I
can
be
fully
offline
if
I
want
to
and
synchronize
my
changes
back
later.
B
So
the
only
point
of
me
showing
you
that
is
just
to
show
that
you
know
things
can
actually
show
up
in
a
nice
way
on
users,
home
screens
and,
like
I,
said
when
you
change
your
application.
Updates
are
pushed
asynchronously
in
the
background
to
your
users.
Okay,
so
I
think
that's
all
I
am
going
to
cover,
which
means
that
I
will
hand
back
to
our
emcee
now
for
any
questions,
or
where
else
are
we
going
to
go
from
here?
So.
A
C
Coming
I'm
gonna
share
my
screen
real
fast.
This
is
the
slide
we
shared
it
billed
as
well.
This
is
the
set
of
stuff
that
we're
looking
at
in
the
don''t
5
and
donÃts
6
wave
first,
things
first
is
that
we
are
moving
Blaser
webassembly
into
dotnet
5
if
you've
been
following
with
dotnet
5,
there's
no
blazer
webassembly
in
the
box,
yet
that
will
be
coming
in
a
soon
to
be
released
preview.
So
we'll
move
blazer
webassembly
into
donna
5,
and
then
we
have
a
whole
bunch
of
improvements
that
we
want
to
do.
C
What
we
call
that,
like
the
the
workflow
of
how
you
make
changes
and
see
them
in
the
browser
in
the
UI
as
quickly
as
possible,
CSS
isolation
is,
is
something
we're
looking
at
right
now,
as
well
as
a
bunch
of
web
assembly
related
enhancements
like
support
for
multi-threading
lazy,
loading
of
different
parts
of
the
app
and,
of
course,
performance
improvements.
Right
now
we
are
running
on
an
IL
interpreter
which
is
very
functional,
but
not
not
the
fastest
thing
on
the
planet.
C
If
you,
you
know,
people
ask
sometimes
ask
us
about
comparisons
with
the
blazer
webassembly
versus
like
a
JavaScript
implementation,
and
it
is,
it
is
quite
a
bit
slower.
It's
not
not
a
great
setup
right
now
for
like
CPU
intensive
workloads,
but
one
of
the
things
we're
looking
at
and
dawn
in
five
Don
at
6:00.
He
is
improving
that
performance
with
support
for
things
like
ahead
of
time,
compilation
or
other
performance
improvements.
So
these
are
things
that
were
we're
looking
at
them
that
you
can
look
forward
to
in
the
future
release.
A
C
Where
you
go
to
get
started
to
get
the
bits
go
to
blazer
dotnet,
download
ins.
Try
out
blazer
web
assemblies,
it's
ready
for
production
use
if
you
have
feedback
that
you'd
like
to
share
with
us,
as
always
we're
on
github
just
post
issues
on
the
github
repo
and
let
us
know
what
you're
interested
in
I
think
the
last
area
that
people
were
also
asking
about
was
like
well
what
about
beyond
the
web
like
what
about,
like?
C
You
know,
desktop
scenarios
and
mobile
app
scenarios
for
fur
blazer
Ibou,
if
you're,
if
you've
been
following
along
with
the
mobile
blazer
bindings
experimental
project,
encourage
you
to
continue
to
do
so.
That's
where
we're
planning
to
do
release
more
innovations
in
that
space
like
enabling
support
not
only
for
native
UI,
but
also
like
hybrid
UI
scenarios
like
working
with
web
and
HTML
CSS
within
native
app
scenarios,
so
follow
along
with
that
project,
and
hopefully
you'll
see
some.
Some
cool
updates
coming
coming
out
soon.
They're.