►
From YouTube: ASP.NET Community Standup - Feb 6, 2018 - Blazor Update
Description
Community links: https://www.one-tab.com/page/JahpzyGnRYusZ58HpiuzqA
Blazor repo: https://github.com/aspnet/blazor
Blazor FAQ: https://github.com/aspnet/Blazor/wiki/FAQ
Mono WebAssembly announcement:
http://www.mono-project.com/news/2017/08/09/hello-webassembly/
Mono WebAssembly update: http://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation/
Live Blazor app: https://blazor-demo.github.io/
B
B
C
A
A
C
C
A
A
D
A
C
A
A
C
A
A
All
right,
okay,
first
of
all,
Shane
Boyer,
so
we
have
had
this
workshop
that
we've
done
several
times:
NDC
conferences
to
have
intersection,
etc.
So
this
is
this
app
server,
build
sorry
build
a
website.
It's
a
conference
planner
using
ASP
net
core
uses,
uses
API
back-end,
so
what's
cool
in
here
is.
This
has
been
updated
to
use
the
new
ASP
angular
CLI
based
spa
front-end,
and
it's
also
got
a
cool
docker
deployment.
So
this
is
Shane's
we
just
merged
just
this
past
week.
A
This
is
Shane's
updates
to
this
thing,
so
it's
an
entire
lab
that
takes
you
from
file
new
project
to
building
and
out
an
entire
thing,
with
a
website,
a
single
page,
app,
front-end
and
deploying
with
docker
and
helm,
so
very
cool
high
quality
work
from
from
Shane,
of
course.
So
that's
exciting,
and
this
is
a
relatively
quick
blog
post,
the
actual
what
you're
not
seeing-
and
you
will
see
when
you
click
through-
is
there's
a
ton
of
markdown
in
here
to
explaining
now
you'll
do
this.
This
is
what
this
next
step
does,
etc.
So.
A
A
Cool,
so
there's
that
the
next
one
is
Steve,
Gordon
and
Steve.
Gordon
is
continuing
a
series
he's
done
on
deep
dive,
so
this
is
going
way
deep
into
the
the
code.
How
things
are
actually
working
here
he's
talking
about
how
you
start
up
works,
so
this
is
a
long,
very
meaty
post
talking
about
you
know
how
things
are
registered,
which
things
are
registered,
which
things
are
convention
based.
A
So
this
is
by
the
time
you
finish
this
or
if,
for
some
reason,
you
need
to
do
something
complex
book,
you
know
with
startup
applications,
startup
the
web
host
builder,
all
that
stuff
bookmark
this
and
come
back
later.
This
is
this,
is
you
know,
really
in-depth
and
stepping
through
exactly
how
and
why
things
are
working
the
way
they
are
some
very,
very
nice
post,
here's
another
one
on
oh
I
DC!
This
is
from
this
is
from
Damien
Bowden
and
he
was
talking
about
securing
asp
net
core
MVC
application
with
secure
API.
A
A
B
A
B
B
A
No
no
worries,
okay,
so
this
is.
This
is
interesting.
This
is
a
new,
a
new
kind
of
front.
Sorry
why
my
words
are
not
working
well
for
me
today.
This
is
a
web
front-end
for
F
sharp
in
asp
net
core.
This
is
the
MVC
pattern
implementation.
This
is
called
saturn,
so
we've
talked
before
about
suave
and
giraffe
and
what
I'm
gonna
mangle
his
name?
Oh
so
it's
just
Kristoff.
So
Kristoff
has
said
that
he
would
like
to
see
something
working
at
a
higher
level
of
abstraction
to
him.
A
Suave
and
giraffe
are
little
too
low
level
and
it
feels
like
he's
building
an
MVC
application
using
middleware
and
he'd,
really
like
a
higher
level
of
abstraction.
So
that's
what
Saturn
is
so
it's
a
new
web
framework
with
f-sharp
and
asp
net
core.
So
here's
an
example
of
some
of
the
code
and
then,
of
course,
the
the
code
itself
is
all
out
on.
So
this
is
Saturn
framework.
They've
got
a
separate
org
for
that
separate
saturn
framework
saturn.
A
So
this
is
very
cool.
This
is
from
bad
Adams.
This
is
something
which
is
hitting
into
one
I
believe
it
is
something
he
did.
That's
cool
that
affects
all
of
dotnet
core,
but
asp
net
course
is
one
that's
impacted
as
well.
This
is
stacktrace
improvements,
so
the
problem
was
that
your
stack
traces
in
the
past
had
all
these
things
like
method,
async,
d4,
blah
blah
blah.
It
was
always
right
there
just
not
easy
to
read
so.
B
A
A
And
and
it
effects
exactly
and
it
effects
everything
you
know
it's
all
of
dotnet
core
so
but
you'll
actually
be
able
to
read
your
async
stack
traces,
Thank,
You,
Ben,
hey
Ben,
okay
yeah,
so
here
we've
got
three
blog
posts.
These
will.
You
know
we
share
these
links
out
afterwards,
and
so
people
can
dig
in
in
detail.
This
is
the
dotnet
Core
2
1
roadmap,
so
rich
Lander
talking
about
this.
This
is
just
high
level
and
then
he
you
know
talking.
A
You
know
some
some
highlights
with
the
build
time
performance,
global
tools,
I'm,
pretty
excited
about
the
global
tools.
That'll
be
neat
spam,
key
memory,
tea,
etc.
Entity
framework.
Two
one
talking
about
things
from
you
know:
lazy
loading
down
to
there's
the
cosmos
DBE
support,
which
is
pretty
neat.
There
is
data
seating
link
group
by
etcetera,
so
some
neat
stuff
there
and
then
the
asp
net
core
q1
roadmap
post.
So
this
is
written
by
this.
Damn
roth
guy,
a
lot
of
good
stuff
in
here
we'll
be
digging
through
these
in
in
upcoming.
A
You
know
stand
ups,
so
that
is
neat
and
then,
if
you
are
a
watching
and
not
a
reading
type
of
person,
we've
got
these
very
cool
part
1
and
part
2
videos.
So
this
part
one
is
kind
of
a
high
level
you're
on
here,
Dan's
rich
Landers
on-
and
so
you
know
going
through
and
talking
about
here
are
the
oh
and
repeaters.
A
Also
as
on-
and
this
is
you
know,
part
one
talking
about
the
features
part
two
of
a
lot
of
demos,
very
cool
stuff
and
then
one
other
posts
had
just
kind
of
floated
by
today.
I
thought
was
kind
of
interesting.
This
just
went
live
today.
Is
this
post
about
this
wise
or
thing?
Oh,
my
blazer,
so
here's
the
blog
post
but
again
and
if
you,
if
you're,
not
a
reading
type
of
person
and
you're
more
of
a
watching
type
of
person,
what
do
you
guys
got.
B
Blazer
is
now
an
official
asp.net
project.
We've
brought
the
project
into
the
a
spent
Oregon
github.
The
repo
is
now
live
if
you're
not
familiar
with
the
laser
is
blazer.
Is
a
web
UI
framework
implemented
in
dotnet
in
c-sharp
that
runs
in
the
browser
via
web
assembly,
so
you
can
have
a
full
stack
net
and
c-sharp
web
development
solution.
B
That's
the
dream:
steve
sanderson
pioneered
a
lot
of
this
stuff
he's
with
us.
Today.
You
may
have
seen
him
demo
it
at
NDC
oslo.
He
has,
he
had
to
sort
of
like
a
prototype
github
repo
on
his
on
his
own
account,
something
he
just
sort
of
you
know
any
one
evening
he
was
like.
Maybe
tonight
I'll
try
and
get
don
networking
in
the
browser.
B
It
seems
like
a
cool
thing
to
do
and
that's
got
a
caught
a
bunch
of
people's
attention
and
we've
been
looking
at
it
for
a
number
of
months
now
like
is
this
really
paying
like?
Can
we
actually
make
this
happen?
Is
this
technically
feasible
and
we've
been
doing
a
lot
of
investigations
and
talking
to
a
lot
of
people
about
the
level
of
interest
in
something
like
this,
and
we
decided
you
know,
there's
maybe
something
here,
and
so
the
project
is
now
in
the
aceman
org,
it's
a
real
repo.
It's
got
an
issue
tracker
this
time.
B
It
is
an
experimental
project
at
this
point
and
what
do
we
mean
by
that?
What
that
means
is
well,
first
of
all
right
now,
there's
there's
nothing
to
download.
Yet
it's
still
really
early
in
the
project.
If
you
want
to
try
out
something,
you
can
still
go
to
Steve's
repo
and
download
the
v6
that
he
has
there,
but
the
it
it's
it's.
It's
just
an
experiment
which
means
that
there's
no
committed
product,
yet
we're
still
trying
to
figure
out
is
you
know,
do
all
the
technical
issues
really
work
out?
Is
there
really
demand
for
this?
B
You
know:
does
this
really
satisfy
a
true
customer
need
and
will
is?
Can
we
build
something
that
people
will
and
so
we're
having
this
sort
of
phase
that
we're
calling
an
experimental
phase
where
we
can
work
through
those
those
issues
and
try
things
out
and
experiment?
But
we
hope
that
you
know
assuming
everything
works
out,
then
this
could
become
a
way
that
you
could
write
web
applications
using
dhania
and
C
sharp
and
razor
awesome.
I.
C
B
C
B
B
We,
everything
that
we've
tried
out
and
experimented
with
so
far
has
worked
out
amazingly
well,
and
we
think
we
can
do
it
and
we'll
need
people
as
help
like
the
reasons
why
we're
talking
about
it
now
is
because
we
want
people
to
to
participate
and
give
us
feedback,
even
though
there's
not
a
committed
product
yet
so
that
we
can
figure
these
things
out.
Like
what
kind
of
framework
would
people
like
what
would
appeal
like
how
how
big
of
an
app
size
is
is
is
makes
sense?
How
do
we?
B
What
features
do
we
need
to
have
in
the
framework
those
types
of
things
so
that
we
can
then
hopefully
eventually
make
that
step
to
actually
turn
it
into
a
committed
product?
But
at
this
time
it's
still
just
an
experiment
and
that's
important
I
think
for
people
to
you
know
to
remember
and
realize
at
this
stage
in
the
game.
B
Well,
that's
it!
We
have
a
lot
of
cool
stuff
that
you
can
still
see.
We
don't
have
bits
to
share
from
the
Blaser
repo.
Yet
we
do,
though,
have
sort
of
like
the
prototype
experience
about
what
we
think
this
could
look
like,
and
it's
of
course
important
remember.
This
could
completely
change
we're
still
trying
to
figure
out
what
the
framework
should
actually
look
like,
but
we
have
some.
You
know
pretty
interesting
things
to
show
about
what
is
actually
possible
today.
You
know.
A
lot
of
this
is
only
possible
by
this.
B
C
B
Stand
up,
webassembly
is
like
webassembly
is
this
amazing
new
standardized
format
like
webassembly
is
a
a
byte
code
that
you
can
take
any
code
like
taking
like
a
native
code
base,
for
example,
and
you
can
compile
it
to
this
format.
It's
intended
to
be
a
compilation
target
and
then
it
can
run
in
any
browser
and
native
speeds.
So
you
take
code,
you
compile
it
to
web
assembly
and
you
can
now
run
it
in
any
browser
at
native
speeds.
B
That's
that's
what
web
assembly
is,
and
it
is
now
supported
by
all
the
browsers
like
they
all
have
support
for
this
at
this
point,
and
what
this
does
is
this
completely
blows
open
the
doors
for
what
you
can
now
do
with
web
development?
First,
before
you
know,
web
development
effectively
was
essentially
only
JavaScript.
You
could
anything
now
that
you
can
take
and
compile
to
web
assembly.
B
It
is
now
possible
to
execute
on
the
web
in
a
standardized
and
open
way,
and
that's
what
we're
taking
advantage
of
here,
we're
basically
building
a
dotnet
runtime
out
of
using
web
assembly,
and
it's
not
actually
us
to
be
clear.
Blaser
is
just
we're
just
building
the
web.
Ui
stack
on
top
of
that
dot
at
runtime.
B
It's
actually
our
friends
on
the
mono
team
that
are
building
Assembly
support
for
four
mana,
which
actually
makes
a
lot
of
sense
because
Monell,
if
you
don't
know
Manos
the
runtime,
that's
used
for
Android,
it's
the
done
at
runtime
use
for
iOS
is
the
dot
at
runtime.
That's
used
for
for
Mac.
It's
basically
our
client
cross-platform
runtime.
So
we're
taking
advantage
of
that
as
extending
that
mano
to
them
now
also
support
browser
sub
centers
browser
client
scenarios.
So.
D
Sure,
okay,
so
quite
a
while
back
when
I
first
wanted
to
experiment
of
this
I.
There
was
no
commitment
from
the
mono
team
to
port
mono
to
what
assembly
or
from
from
anyone.
In
fact
to
do
that.
So
the
only
way
of
getting
net
to
run
inside
a
browser
and
web
assembly
was
to
find
a
really
simple,
dotnet,
runtime
written
in
just
a
very
simple
variant
of
C.
D
That
I
could
compile
to
webassembly,
because
that's
what
webassembly
compilation
toolchain,
let's
he
do
and
I
did
find
one
written
by
a
guy
called
Chris
bacon,
which
was
written
about
five
years
ago
or
something
like
that
and
it's
not
really
been
developed
since.
But
it
was
very
small
and
simple
about
hundred
files
of
C
and
that
was
possible
to
compile
to
web
assembly.
And
that
was
the
basics
of
you
know.
Getting
Donna
running
in
the
browser,
and
so
I
was
able
to
build
a
little
UI
stack
on
top
of
that.
D
And
so
that
was
the
original
prototype.
And
since
then,
like
down
the
said,
the
mono
team
of
said
that
they
are
bringing
the
full-fledged
mono
runtime
twelve
assembly.
And
that
means
that
we
have
a
truly
production
grade
done
at
runtime,
and
so
the
newer
version
of
the
blazer
that
we're
working
on
now
is
based
on
the
mono
runtime,
which
is
far
more
powerful
and
complete
them
don't
know
anywhere.
Never
would
have
been.
C
D
So
alright,
so
the
thing
that
we're
interested
in
compiling
to
web
assembling
the
first
place
is
the
dotnet
runtime
itself,
not
your
application,
understood
so
that
so
yeah.
So
for
anyone
who
hasn't
quite
grasped
the
difference,
though
it's
the
the
thing
that
loads
and
execute
that
on
their
assemblies,
okay-
and
that
needs
to
be
supplied
to
the
browser
in
web
cinder
code
itself.
D
B
D
Yeah,
that's
right
yeah,
so
these
are
really
large
serious
projects
that
you
can't
just
get
one
random
person
just
decides
to
compile
it
to
web
assembly.
It
requires
a
huge
amount
of
additional
work
and
support
in
the
runtime
itself,
they're
entirely
different
platform,
which
was
completely
beyond
my
capability
to
do
last
year.
So
that's
why
it
was
using
DNA,
which
is
just
a
tiny,
simple
thing
that
one
person
to
figure
out
on
their
own.
C
B
I
think
I
think
part
of
what
would
help
understand.
That
decision
is
also
to
think
about
how
these
runtimes
today
typically
get
used
like
dominant
core.
Today
is
pretty
much
a
server
runtime.
It
is
primarily
targeted
at
server
work
lowing.
So
it's
a
snut,
it's
EF
on
the
server,
whereas
mono
today
you
can.
It
has
some
server
support,
but
it
never
really
came
of
age.
It
never
really
got
fully
baked.
It's
mostly
a
client
runtime.
They
primarily
use
it
for
client
platforms
like
Android,
iOS
and
so.
B
C
B
Actually,
exactly
right,
in
fact,
so
for
blazer
and
for
mono
and
on
top
of
web
assembly
running
in
the
browser,
we
will
support
dotnet
standard
OH,
so
you
will
be
able
to
take
down
at
standard
libraries
and
use
them
in
your
blazer
applications.
There,
of
course,
will
be
api's
in
that
surface
area
that,
like
don't
really
make
sense
in
a
browser
open.
But
let
me
throw
not
platform,
not
supported.
Exceptions
like
you
would
expect
when.
A
C
B
I
think
I
think
a
lot
people
when
they
think
of
mono
they
think
of
like
this
sort
of
side
project,
but
actually
mono
Idzik
is
a
core
part
of
the
the
business
strategy
of
what
dotnet
is
like.
If
you
want
to
get
dotnet
running
on
a
mobile
device,
you
are
using
mono
today
and
that
is
fully
supported
and
we
pour
tons
of
resources
and
they're
making
sure
that
that
works.
Well,
so
it's
it's!
It's
not
something.
That's
just
like
gonna
disappear.
Mono
is
a
important
part
of
the.net
ecosystem.
B
It's
also
by
the
way,
the
run
sign.
That's
used
for
like
games,
which
is
another
great
scenario
for
webassembly.
If
you
want
to
get,
you
know
really
fast
rich
games
running
in
the
browser
like
you
want
to
use
unity,
and
you
want
to
do
your
coding
in
c-sharp
webassembly,
great,
underlying
tech
to
do
that
with
and
mono
is
actually
the
runtime
that's
used
to
buy
that
buy,
that
stack
by
the
unity
stack
so.
C
B
And
we
do
that
quite
a
bit,
I
mean
there.
I
was
tonight
talking
about
more
of
a
long-term
strategy
for
what
what
do
we
have?
We
have
these.
We
do
have
multiple
done
at
run
times
and
maybe
at
some
point,
it'll
make
sense
that
these
things
should
be
reconciled
like
let's
not
pay
the
cost
of
having
two
different
runtimes.
Maybe
at
some
point
they
do
do
this
magical,
merge
and
everything
works
seamlessly
together.
That's
obviously
a
fairly
expensive
thing
to
do
so.
B
It's
not
that
doesn't
happen
overnight
or
even
in
the
course
of
just
a
year
or
two,
but
they
do
today.
The
strategy
is
they
copy.
They
share
code
between
the
two
projects
as
much
as
possible,
so
that
there's
as
much
consistency
and
it's
also
the
keep
costs
down
of
maintaining
the
the
different
runtimes
cool.
B
D
D
The
reason
for
that
is
because
that
previous
prototype
was
a
little
bit
further
ahead,
but
the
code
for
that
previous
prototype
was
just
a
massive
train
wreck
of
just
anything
that
I
threw
together
in
ten
minutes,
because
it
seemed
to
work
which
is
you
know
how
we
were
able
to
get
fairly
far
ahead
fairly
quickly,
but.
B
D
D
Out
show
just
now
is
based
on
the
earlier
prototype
and
I
know.
Some
people
may
have
seen
this
particular
demo
on
YouTube
before
so
apologies
to
those
people,
but
for
anyone
who's
new
to
this.
This
is
a
good
place
to
start.
So,
let's
say
that
I
want
to
create
a
new
blazer
application
which,
like
we've
been
saying,
is
I.
D
Anyway,
I'm
going
to
run
it
in
a
browser
now,
and
so
you
can
see
some
initial
UI
and
then
in
a
control
f5
there
and
that's,
and
it
takes
a
second
to
count
the
first
time
because
it's
grandpa
when
that
does
come
up
see
it
looks
like
a
pretty
traditional
looking
single
page
application,
it's
new
different
pages
that
the
user
can
never
get
through.
It's
got
this
example
of
a
counter
that
just
finds
that
you
click
the
button
and
it's
got
this
special
H
that
demonstrates.
A
C
C
D
Okay,
can
you
hear
me
now
yep
yeah
I
can
hear
you
hi,
oh
great,
alright,
and
so
here
we
are
inside
this
blazer
app
that
we've
just
created
and
as
I
was
saying
and
I
don't
know.
If
you
heard
me,
we've
got
a
few
different
features
just
out
of
the
box
to
demonstrate
stuff,
so
we've
got
backwards
and
forwards
navigation.
There.
We've
got
this
counter
that
counts.
How
many
times
you
click
things
and
we've
got
this
example
of
doing
an
HTTP
HTTP
request
to
the
server
and
displaying
some
stuff
as
a
table.
D
So
it's
the
sort
of
thing
that
you
would
traditionally
build
with
a
spar
framework
like
angular
or
react,
but
it's
not
angular
reactor.
It's
not
any
JavaScript
framework
at
all.
If
we
look
at
the
code
in
the
application,
you
will
see
that
we
don't
have
any
JavaScript
whatsoever.
All
we've
got
is
HTML,
we've
got
some
CSS
and
we've
got
various
c-sharp
files
and
the
c-sharp
comes
in
two
different
flavors.
D
So
as
an
example
of
that
this
counter
page
here,
if
you
remember
what
the
counter
does,
it's
just
displays
this
button
and
when
you
click
the
button,
the
count
goes
up
and
the
coding
there
is
pretty
straight
forwards.
We've
got
this
current
count
property
and
we
are
displaying
the
current
count,
and
we've
also
got
a
button
that
when
you
click
it,
it's
going
to
call
this
method
increment
count
which
just
increments
the
count.
So
it's
a
very,
very
simple
programming
model
that
we
can
use
to
build
these
components.
D
D
Is
not
new
functions,
as
a
feature
has
been
in
Razer
for
a
little
while
it's
a
way
of
just
adding
arbitrary
okay.
That's
your
code,
yeah,
it's
more
widely
used
in
Roseau
pages
than
it
is
in
MVC,
but
you
can
use
it
anywhere.
The
razor
is
used.
Okay,
okay,
so
shall
I
implement
a
bit
of
functionality
on
top
of
this,
so
you
can
see
what
the
developer
experience
could
be
like
in
this
world.
I
think.
D
D
It
just
updates
automatically
so
now
we've
got
to-do
list
on
the
menu
there
and
I
can
click
on
that
and
it
seems
like
nothing
happened,
but
something
did
happen,
which
is
that
the
URL
has
been
updated
now
to
do
list,
but
there
isn't
any
page
matching
that
URL.
So
it's
not
doing
anything
just
yet.
What
I
will
do
is
I
will
add
a
new
component
called
to-do
list.
So
I'm
going
to
go,
add
new
item
and
we
don't
have
a
proper
item
template
for
this.
D
Yet
so
I'm
going
to
choose
MVC
view
page
just
because
it
happens
to
give
me
a
razor
file
and
I'm
going
to
call
it
to-do
list
got
CS
HTML
and
when
I
hit
add
on
that,
you
should
see
the
browser
updates
again,
because
now
there
is
a
to-do
list,
but
it's
just
blank.
We
haven't
got
any
content
in
there.
Yet
so,
let's
put
some
content
in
to
do
list
and
when
I
press
save
you'll
see
to-do
list
shows
up
over
there.
Okay.
D
So
since
this
is
blows
up,
we
can
do
some
arbitrary
c-sharp
code
here,
which
is
going
to
run
in
the
browser
and
I'm
going
to
do
that
with
one
of
these
functions
blocks
that
we
just
talked
about
and
I'm
going
to
model
a
to-do
item
as
a
class.
So
let's
have
a
class
called
to-do
item
and
we'll
say
that
each
to-do
item
as
two
properties
will
have
a
string
called
text
and
we'll
also
have
a
rule
called
is
done
and
of
course
we
don't
just
want
to
have
one
of
these
things.
D
We
want
to
have
a
whole
list
of
them,
so
in
the
obvious
way,
I
will
have
a
list
of
to-do
items
called
items
and
also
that
to
be
a
new
list.
Okay,
good
and
if
I
want
to
I,
can
use
razor
to
display
some
data.
I've
got
so
I
can
get
all
the
usual
intellisense
I
will
display
items
darts
count
and
when
I
press
save
you
should
see
that
there
are
zero
items
in
my
to-do
list.
D
Okay,
now
I
know
that
that
to-do
list
is
empty,
but
before
we
start
adding
stuff
to
it,
I
want
to
just
try
and
display
the
contents
of
the
list,
even
though
there
isn't
anything
in
it.
Yet
so
I'm
going
to
do
an
HTML
unordered
list
and
using
razor
syntax
I
can
say
for
each
item
in
items.
I
will
have
a
list
item
and
it's
going
to
display
item
dot
text
I'll,
save
that
and
it
doesn't
appear
to
do
anything
initially
because
my
list
is
still
empty.
D
So
there's
nothing
to
show
and
I'm
going
to
add
a
button
and
I
will
say
the
text
will
be
add,
item
all
right.
So
I've
got
my
button
and
when
I
click
this
button,
absolutely
nothing
happens,
which
is
not
surprising,
because
I
haven't
wired
up
any
behavior
on
this
now.
So
how
can
we
add
some
behavior
to
our
button?
D
Well,
if
we
were
going
to
do
some
really
old-school
JavaScript,
we
could
say
something
like
on
click
equals
and
then
we
just
type
out
some
JavaScript
stuff
in
there,
but
because
this
is
blazer,
I
can
do
it
with
c-sharp.
Instead,
so
I
can
say
when
you
click
this
button
items
got
add,
will
add
a
new
item
and
will
add
a
to-do
item
with
the
property
text
set
to
whatever
will
figure
out
the
details
of
that
in
a
minute.
B
D
And
we've
much
of
the
design
around
this
is
to
make
the
most
of
what
the
tooling
can
already
do
and
I
can
show
you
some
cool
examples
of
newer
things.
We
can
do
that
with
the
tooling
in
a
minute.
Alright,
and
so
I
know
that
some
people
watching
will
be
going
like.
Oh
no
seriously,
you
don't
expect
me
to
put
loads
of
c-sharp
into
HTML.
D
D
Put
that
into
my
add
item
method
and
then
I'm
gonna
use
a
bit
of
shorthand
to
say
when
this
is
clicked
on
click
we
will
call
add
item
and
that's
just
equivalent
to
writing
on
click
equals,
add
item,
but
it
gives
us
proper
type
checking
to
make
sure
we
don't
try
to
call
a
method
that
takes
the
wrong
set
of
parameters
or
whether,
but
it
will
it'll
behave
the
same
all
right.
So
our
code
is
a
little
bit
more
readable
now
now?
What
else
do
we
wondering?
Well,
we
don't
really
want
a
hard
code.
D
B
D
Right
then,
so
this
is
what
we're
loading
into
the
browser
right
now
and
let's
just
go
down
this
a
little
bit.
Okay,
so
we've
got
the
initial
HTML
document
which
everyone's
familiar
with
we've
got
some
CSS,
because
we're
using
bootstrap
then
we're
loading,
the
blaze
of
runtime
in
JavaScript,
and
that
knows
how
to
start
up
the
whole
web
assembly
runtime
and
lurch
mano
into
it.
Well,
in
this
case,
this
is
like
I
said
this
is
the
earlier
prototype
which
is
based
on
dotnet
anywhere.
D
But
if
you
use
the
newer
code,
it
would
be
loading
mono
awesome,
but
the
old
prototype
loaded,
this
web
assembly
file
DNA
dot
web
assembly,
and
that
is
the
whole
dotnet
runtime
that
can
load
assemblies.
It
can
execute
them.
It
does
memory
management.
Does
you
know
the
garbage
collection?
It
does
all
the
dotnet
kind
of
stuff
and
then
we
are,
and
then
it
in
turn
is
choosing
to
fetch
actual
dotnet
assemblies.
So
these
are
regular
net
standard
dotnet
assemblies.
D
A
A
really
cool
thing
that
when
I
I
played
with
this
before
and
I
expected,
maybe
to
see
those
as
well
as
amore
I,
didn't
know
what
they're
gonna
be
that
that
is
really
interesting.
So
those
are
straight
up
just
standard
dotnet,
dll's,
okay,
so
yeah.
That
is
correct.
So
one
other
thing
I'd
worry
about
seeing
this
is:
is
DNA
azam
or
mono,
dot,
wise
I'm,
gonna,
be
six
megabytes
or
ten
megabytes
or
four
thousand
megabytes.
Okay,.
D
So
DNA
dot,
Y
Samus
in
this
case
it's
seventy
four
kilobytes,
which
is
pretty
reasonable,
yeah
I.
Our
application
here
on
this
old
prototype
is
tiny.
It's
340
kilobytes
and
now,
when
we
switched
over
to
mono,
we
got
a
rather
significant
increase
in
that
size
because
mono
just
does
tons
and
tons
of
stuff.
That
is
not.
We
don't
even
need
it
to
do
so.
There's
a
major
bit
of
optimization
work.
D
We
need
to
do
I,
don't
think
we're
going
to
get
mono
ultimately
down
to
be
as
Tiny
as
this
DNA
one,
which
is
only
70,
kilobytes
I
think
it's
still
going
to
be
larger,
but
we're
quite
determined
to
keep
the
total
application
size
down
to
a
reasonable
amount
which,
as
what's
the
reasonable
size,
we
asked
justice
from
people.
You'll
get
different
answers,
but
I'm
quite
determined.
It's
going
to
be
you
know
under
a
mega,
buy
we'll
we'll
see.
D
Okay
and
last
question
is:
can
that
be
cashed
in
the
browser?
Oh
of
course
yeah?
Yes,
sir,
whatever
size,
it
is
it's
a
one-time
thing
and
it
could
be
loaded
from
a
CDN
so
that
the
user
only
pays
that
cost
once
for
all
blazer
apps
that
they
ever
use.
You
know
so
it
shouldn't.
Hopefully
it
won't
really
even
be
big
enough
to
be
noticeable
on
the
first
ever
load,
but
absolutely
it
should
be
completely
cached
for
subsequent
loads.
B
So
you're
literally,
this
is
just
normal
Don
and
assemblies
running
inside
the
browser
on
top
of
a
Don
at
runtime,
that's
implemented
in
web
assembly
and
there's
no
plugins,
there's
no
transformation
to
like
JavaScript
or
anything
like
that.
To
make
this
work,
it
is
literally
just
a
normal
dot
at
runtime
happens
to
be
implemented,
webassembly
running
normal
dotnet
assemblies.
That's
what
this
I.
C
Have
a
question
about
about
overhead
because
javascript
is
a
virtual
machine
and,
while
web
assembly
is
a
binary
format,
that's
very
clean
in
implementing
in
in
doing
stuff.
This
is
a
virtual
machine
implemented
on
top
of
a
virtual
machine.
Then
running
some
instructions.
Yes,
that's
correct!
Yes,
yes,
I.
C
I
guess
I'm
not
thinking
about
like
I'm,
not
asking
you
to
give
me
like
milliseconds
or
whatever,
but
I'm
wondering
as
far
as
like
degrees
of
overhead
or
you
know,
as
a
10
excerpt.
Do
you
know
how
much
weight
is
there
there,
and
is
that
really
something
even
to
think
about,
because
it
seems
fast
well.
D
D
D
Exactly
yeah
now
there
are
a
couple
of
reasons
to
think
that
this
is
not
necessarily
going
to
be
a
problem.
One
of
them
is
that
this
is
fundamentally
about
building
client
apps,
so
it's
not
like
with
server
apps,
where
you
absolutely
need
to
get
the
maximum
throughput
that
you
can,
because
otherwise,
you
know
your
business
is
paying
whatever
proportion
more
for
its
cloud
hosting
costs
with
a
client
app.
You
are
fundamentally
distributing
the
workload
to
your
clients,
so
you
know
you're
not
directly
paying
for
that.
B
D
B
Would
say
also
that
comparison
that
Steve
mentioned
was
done
between
you
know
a
desktop
dotnet
run
time
and
a
run
time
running
in
the
browser.
I
think
where
we'll
probably
spend
more
more
of
our
time
is
like
you
know,
how
do
we
compare
against
this
existing
JavaScript
experiences
when
you're
doing
the
same
type
of
heavy
computation
in
the
browser
for
doing
with
JavaScript,
as
opposed
to
trying
to
do
with
c-sharp
I
mean?
Obviously
we
don't
want
to
have
like
a
significant
regression
there
like.
B
That
should
be
at
least
on
par,
if
not
even
faster,
because
we
are
fundamentally
running
on
top
of
a
runtime.
That's
supposed
to
be
running
at
native
speeds
thanks
to
web
assembly.
So
we
do.
We
do
benefit
from
a
low-level
like
web
assemblies,
very
low-level
piece
of
infrastructure.
Yes,
it
is
implemented
by
the
JavaScript
runtime.
But
it's
you
know
it's
it's
it's
a
compilation
target.
It's
not
intended
to
be
a
high-level
interpreted
language
to
say
it's
supposed
to
be
fast.
B
You
take
C
code
and
you
run
in
the
browser
and
you
basically
get
comparable
speeds,
so
I'm
a
runtime
performance
I'm
honestly,
not
too
concerned
about
the
the
download
sizes
is
where
I'm
expecting
that
we'll
have
more.
You
know
need
for
investment
and
optimization
to
make
sure
that
when
you
download
the
app
in
production
or
during
development,
that
you're,
not
downloading,
you
know
megabytes
and
megabytes
and
stuff.
Couldn't.
C
B
That's
one
trick:
we
can
leverage
we're.
Also,
there's
technologies,
like
the
amount
of
folks
have
a
linker
technology
where
they
can
go
through
your
app
and
strip
out
all
the
il
that
actually
isn't
really
being
used
by
the
application.
All
that
sort
of
trimming
right
stepping
out
assembling
whole
assemblies
that
you
don't
even
need
like
what.
What
currently
the
model
folks
have
done
actually
is.
They
took
the
entire
desktop
mono
runtime
and
poured
it
to
run
on
webassembly,
which
is
obviously
way
more
than
you
typically
need
for
a
browser
app.
B
So
there's
a
lot
of
opportunity
there
to
you
know,
pull
out
stuff
that
doesn't
apply
to
browser
apps
at
all,
and
we
have.
We
have
a
bunch
of
ideas
about
how
we
can
get
that
size,
really
small.
In
fact,
C's
already
done
a
bunch
of
initial
flex,
you
know
very
early.
You
know
short
timeframe
investigations
that
look
very
promising.
D
C
D
C
A
Things
like
the
first
thing
that
I
always
thought
of
and
heard
of
when
I
would
hear.
Webassembly
is
like
well
performance
native
speed
on
the
browser
which
is
cool,
but
a
thing
that
Dan
pointed
out
early
on
too
is
the
the
language
like
you
can
write
in
whatever
language
will
compile
to
like,
in
this
case,
you're,
not
even
you're,
not
even
worried
about
that
you're.
Just
writing.
C-Sharp
code,
anything
that
will
compile
to
ms
IL
you're
set
right.
Yep.
B
If
you
wanted
to
write
an
f-sharp,
I
mean
what
what's
happening
in
Steve's
project
in
that
blazer
app.
Is
it's
actually
taking
those
those
those
blazer
files,
I,
guess
a
razor
files
and
compiling
them
into
an
assembly
and
then
just
pushing
the
assembly
into
the
browser
downloading
the
that
assembly
into
the
browser
and
then
running
it
using
that
dotnet
runtime
I,
don't
know!
If
you
look
at
the
the
network
trace,
you
see,
there's
that
thought
views
DLL,
that's
the
actual
compiled
blazer
app
views,
those
CSS,
HTML
files
that
have
been
compiled.
B
A
D
D
C
B
B
D
D
So
let's
say
we're
gonna
capture
whatever
been
typed
into
this
string
and
I'll
call
it
new
text,
okay
and
then
I'm
gonna,
say
I
want
to
bind
whatever
gets
typed
into
this
text
box
onto
this
new
text,
variable
that
and
then,
instead
of
using
whatever
I,
can
use
new
text.
If
and
when
you
press
the
add
item
button,
I
also
want
the
text
box
to
get
cleared
out
automatically
so
I'm
gonna
say:
new
text
equals
null
there.
So
now,
when
the
user
comes
along,
they
can
type
stuff
in
and
yeah.
C
D
Gets
captured,
it
worked
okay.
Now
we
could
go
further.
This
we
could
have
checkboxes
to
mark
things
as
done
or
whatever,
but
I
want
to
just
bring
up
a
couple
of
other
interesting
related
concepts.
So
the
first
one
is
what
about
browsers
that
don't
support
web
assembly
and
you
might
think
it's
a
bit
of
a
critical
issue,
because
even
though
all
the
latest
browsers
do
support
it,
there
are
still
plenty
of
legacy
browsers
that
are
never
gonna
support
web
assembly.
D
So,
let's
see
what
happens
if
I
try
to
run
our
to-do
list
in
Internet,
Explorer
11,
which
absolutely
does
not
support
web
assembly.
Okay,
so
I'm
going
to
paste
in
that
URL
that
we
just
had
apologize
for
this
mad
stuff
they're
busy.
What
happens?
Is
it
just
pops
up
and
it
works,
and
it
works
exactly
the
same
as
before,
but.
B
D
You
can
compile
to
a
slightly
different,
but
similar
format
called
Assam
Jas,
which
can
be
executed
by
just
standard
JavaScript
runtimes
going
back
for
years
and
years
and
years,
and
so
that's
what
we've
done
in
this
case,
when
we've
compiled
the
dotnet
runtime
to
assembly,
we've
actually
compiled
it
in
two
flavors
one
true
web
assembly
binary
and
secondly,
as
an
awesome,
j/s
file.
And
then,
when
your
browser
starts
to
load
your
application,
we
can
check.
Does
it
support
web
assembly
if
it
does
great?
D
If
it
doesn't,
then
we're
going
to
load
the
Assam
Jas
version
of
the
runtime
instead,
which
is
also
going
to
work
at
the
reason
we
don't
always
use
us
and
guess
is
because
it's
bigger
and
it's
slower,
so
you
don't
want
to
do
that
all
the
time,
but
for
browsers
that
don't
support
web
assembly,
it's
a
pretty
good
fallback
option.
Okay,
so
that's
one
cool
thing:
another
cool
thing
is
debugging,
so
let's
say
I've
got
an
application
like
this.
That
I
want
to
debug.
D
You
might
want
to
connect
to
it
from
your
IDE,
like
visual
studio,
to
attach
a
debugger,
although
it's
kind
of
hard
to
see
how
that's
going
to
work
like
how
is
the
browser
going
to
know
that
it's
supposed
to?
Let
you
do
this,
but
also,
if
you're
developing
web
applications.
Often
you
are
going
to
be
more
productive,
not
using
your
IDE
but
using
the
browser's
built-in
dev
tools,
because
then
you
can
see
all
the
things
like
the
element
inspector
and
the
CSS
styles
and
such
like.
D
So
here's
a
prototype
idea
that
we
came
up
with
for
enabling
debugging
in
this
environment
in
order
to
show
you
this
I'm
just
going
to
switch
over
to
a
different
project.
Now
this
is
structured
in
the
way
that
John
just
described.
So
it's
got
a
client
app
which
is
Blaser
and
it's
got
a
server
app,
which
is
regular,
server-side
ASP.
Now
that's
going
to
serve
the
client
app
and
it's
also
got
a
shared
assembly
just
to
demonstrate
the
fact
that
the
same
assembly
files
can
be
used
both
server
and
client.
D
But
anyway,
that's
just
a
minor
polished.
What
I
really
want
to
focus
on
is
the
debugger
debugging
stuff.
So
when
I
bring
that
up
in
a
browser,
you'll
see
it
looks
more
or
less
the
same
as
before.
It's
got
a
counter,
even
though
it
looks
a
bit
of
some
slightly
different
features
like
we've
got
a
demonstration
of
interrupts
with
third-party
JavaScript
libraries,
blah
blah
blah
anyway,
but.
B
If
you
case
you
didn't
notice
what
that
was,
that
was
c-sharp
running
in
the
browser
on
top
of
a
dotnet
runtime
calling
into
JavaScript
from
c-sharp.
So
you
can,
you
can
do
JavaScript
Interop
both
ways.
Actually,
you
can
call
from
JavaScript
to
c-sharp
c-sharp
to
JavaScript,
that's
all
enabled
by
the
underlying
web
assembly,
so
that
was
super
cool
I
was
basically.
B
D
D
D
B
We've
even
talked
about
also
like
having
tools
that
can
generate
like
c-sharp
wrappers,
around
JavaScript
libraries
based
off
of
their
typescript
definitions.
So
you
could
even
have
like
a
strongly
typed
like
basically
called
bootstrap,
as
if
it
were
c-sharp
like
using
an
API.
That
looks
like
it's
actually
a
dotnet
library
which
would
be
super
sweet,
correct.
A
B
D
If
it
produces
source
maps,
does
it
produce
source
maps,
it
does
not
produce
source
maps
under
the
interpretative
model,
because
for
an
interpreter
source
maps
don't
make
sense.
The
whole
concept
of
source
maps
are
relies
on
the
idea
that
for
every
instruction
location
in
your
binary
there's
a
corresponding
source
location,
but
that
doesn't
work
at
all
for
an
interpreter
because
think
about
what
an
interpreter
is
doing.
Is
it's
looping
over
some
standard
bit
of
instruction?
That
says
something
like
fetch?
D
The
next
instruction
look
at
what
type
of
instruction
it
is,
do
a
different
thing,
depending
on
what
type
of
thing
is
so
a
source
map
can't
represent
that
sort
of
thing
it
just
doesn't
work.
However,
if
we
support
ahead
of
time
compilation,
then
a
source
map
would
work,
so
there
might
be
a
reason
to
do
source
maps
in
the
future,
but
there
isn't
a
present
on
the
interpretive
model,
because
I
interpret
explanation
all
right,
great
all
right.
D
So
if
you
don't
have
source
maps
that
makes
it
seem
like
debugging,
wouldn't
really
be
possible,
but
watch
this
I'm
gonna
press
on
my
keyboard
now
ctrl
shift
D,
which
is
just
a
magic
key
combination
that
I've
made
up
and
what
that's
going
to
do
is
pop
open
a
browser
debug
window.
Okay.
So
what's
that
well,
it
looks
like
the
normal
chrome
debugger.
D
In
fact,
in
order
to
see
it
better,
let's
just
put
it
on
one
side
like
that:
okay,
so
it's
got
all
the
stuff
that
you
would
normally
expect
the
debugger
to
be
able
to
do
so.
I
can
do
the
element.
Inspector
I
can
look
at
the
network.
Trace
I
can
do
profiling
all
that
kind
of
stuff,
but
what's
a
little
different
is.
D
If
we
look
over
here
you'll
see,
we've
got
all
of
our
dotnet
assemblies
listed
as
well,
and
if
we
look
inside
there
we
can
see
the
c-sharp
files
as
well,
so
here's
the
c-sharp
stuff
that
runs
when
the
application
starts
up
and
also,
if
we
look
in
here,
we
can
see
all
of
our
razor
files
as
well.
I
can
see
now
my
counter
page
over
here
in
the
chrome,
debugger
and
better
still,
I
can
set
some
breakpoints
on
there.
A
B
D
Continue
execution
and,
and
it
all
works
in
the
way
that
it
should
so
anyway.
This
is
this
is
a
prototype.
This
is
just
a
very
limited
with
all
we've
made.
Work
in
this
prototype
is
in
breakpoints
and
stepping
so
really
limited,
but
the
basic
concept
could
be
extended
to
support
all
the
debugger
gestures
that
exist,
and
so
we
are
talking
to
them
the
mano
people,
and
hopefully
they
are
going
to
enable
debugging
in
some
way
a
bit
like
this,
but
we
don't
know
for
sure,
yeah.
D
D
Right,
okay,
so
one
last
thing
is
on
the
newer
code
base
on
the
real
implementation
of
laser
in
the
asp
net
org,
where
all
the
code
is
clean
and
everything
is
good
and
it
works
properly
and
it's
not
just
hacked
together.
We've
done
a
little
bit
of
work
on
making
the
tooling
much
better.
So
if
I
go
into
here,
let's
say
no
in
this
one:
okay,
so
this
I
just
want
to
show
you
how
we
could
compose
different
components
together
and
and
give
you
nice
intellisense
like
you're
doing
so.
D
Let's
say
you
want
to
create
something
called
a
special
notice,
which
is
a
component
that
displays
some
data
in
this
particular
way.
So
it's
going
to
take
in
the
title
and
content
and
it's
going
to
take
a
callback
that
should
run
when
somebody
clicks
on
an
OK
button,
and
so
it
might
look
a
little
bit
like
that
and
that's
in
a
file
called
special
notice,
CSS
HTML.
So
just
the
fact
that
I've
got
that
file
there
on
disk
means
that
I
can
use
it
in
a
different
laser
component.
D
D
So
a
title
is
something
thing
and
okay
and
then
I
can
put
in
some
arbitrary
stuff
and
I
can
use
c-sharp
stuff
if
I
want
to
like
that,
and
then
I
also
going
to
get
the
ability
to
reference
other
things
with
proper
type
checking
as
well.
So,
let's
say,
I
want
to
cap
run
some
code
when
the
user
clicks
the
OK
button,
so
I'm
going
to
add
a
function,
I
say:
void,
dismiss
notice,
show
notice
equals
false.
That
would
make
the
note
just
go
away
and
then
to
run
that
I
can
say
on.
D
Ok,
yes,
miss,
yes,
miss
notice,
okay,
all
right!
So
then
I've
got
proper
type
clicking
on
that
as
well.
So
if
I
was
had
a
method
that
takes
some
parameters,
then
it
would
hopefully
tell
me
off
for
that,
though
we
got
the
red
squigglies
have
appeared,
and
it's
that's
not
right.
We've
got
the
right
method.
Signature
then
that's
all
gonna
work
so
anyway.
D
B
C
A
D
Is
is
similar
in
the
sense
that
they're
all
ways
of
reusing
and
composing
bits
of
UI,
it's
different
in
the
sense
that,
fundamentally,
what
we're
trying
to
do
with
Glazer
is
a
stateful
client-side
UI
system,
so
with
blazer
you're
dealing
a
lot
with
thing:
how,
with
how
things
change
over
time,
as
opposed
to
with
server-side
code.
It's
always
one
time
render
and
so
yeah.
A
I
feel
like
this
is
something
we're
just
thinking
of
me
as
a
developer.
This
is
something
where
I'm
gonna
have
to
wrap
my
head
around
it
a
bit
like
I'm
gonna,
keep
thinking
of
like
oh
I'm,
generating
HTML
on
the
server
and
shipping
it
to
the
client.
I've
got
to
get
out
of
that
mindset.
You
know
like
this.
B
B
B
B
Yet
this
isn't
a
release
announcement
at
this
point
in
time,
if
you're
really
adventurous-
and
you
want
to
try
out
the
the
bits
that
are
in
the
blazer
repo
you
can
clone
the
repo
you
can
build
it,
you
can
try
running
the
tests,
that's
what
you
can
do
right
now,
the
if
you
have
questions
like
that.
We
didn't
answer
here.
B
We
have
a
FAQ
in
the
in
the
repo
that
you
can
check
out
answers
all
sorts
of
things
about
webassembly
and
our
use
of
mano
and
what
we're
trying
to
do
the
Blazer
so
check
that
out
as
well.
If
you
have
suggestions-
or
you
find
you
know
bugs
in
the
code,
you
can
send
us
PRS,
you
can
file
issues
in
the
in
the
public
issue
tracker.
We
do
have
an
issue
tracker
this
time,
because
we
do
care.
We
do
want
to
hear
about
what
people
think
about
the.
B
What
we're
doing
and
yeah,
if
you
want
to
see
a
live,
blazer
app
also
there
is
a
a
blazer
app
that
Steve
put
together
and
publish
to
Azure
that
if
you
want
to
like
f12
and
see
what
it's
downloading,
though
the
one
he
published,
the
azure
is
actually
based
off
of
mono.
So
it
has
more.
You
know,
runtime
capability
and
more
stuff
that
you
can
see.
What's
there,
that's
at
blazer
demo,
your
website's
net,
there's
a
link
to
that
in
the
blog
post
as
well.
B
So
if
you
want
to
play
around
with
an
actual
blazer
wrap
yourself,
you're
welcome
to
do
that
and
the
bits
that
Steve
showed,
though
the
prototype
bits
they
are
still
available.
If
you
want
to
mess
around
with
that
project
template
you
can
get
that
off
of
his
github
repo
at
Steve
Sanderson,
slash,
blazer,.
A
B
Is
open
source?
Tell
your
friends.
Tell
your
mother
tell
anyone
you
want
like
this.
There's
nothing
secret
here:
the
cats
out
of
the
bag
and
yeah
show
which
anyone
you
want
and-
and
you
know
like
one
of
things-
we
really
hope
is
that,
in
addition,
like,
obviously
this
will
have
appeal
to
people
who
do
not
net
today
and
like
doing
dominant
development.
We
hope
that
this
will
also
be
something
interesting
to
people
that
don't
do
dotnet
development
today,
but
are
interested
in
a
full
stack
development
story
that
has
great
tooling
great
intellisense.