►
From YouTube: S313 - Retro Computing with .NET
Description
The command-line is back in style and we've been building some cool tools to take advantage of the command-line on Windows, Mac, and Linux. In this session, we will talk about the technologies that can help .NET developers create applications to be used from the command line or to create textual user interfaces that run cross-platform.
A
B
A
B
A
B
B
A
A
Fantastic,
alright,
so
I
want
to
get
into
what
you're
talking
about
today,
because
I
saw
this
project
I,
don't
know
you
told
me
I,
don't
remember
when
I
saw
you,
but
you
like,
and
my
copious
amount
of
free
time,
I
decided.
Oh
sorry,
I'm
too
loud
someone's,
like
their
ears.
I
know,
I,
know
I'm.
So
loud
I'm.
Sorry,
how
do
we
turn
me
down?
Mic
number
two
I'll
move
away,
I'll
move
away!
Thank
you!
Okay.
So
you
said
in
your
copious
amounts
of
time
that
am
I
too
loud.
A
B
A
A
B
B
B
It
was
I
want
to
talk
to
you
about
record
net
and
you
know,
as
I've
spent
a
lot
of
my
life
working
on
on
UNIX
and
and
even
even
despite
the
fact
that
I've
worked
on
the
Linux
desktop
and
I
work
on
mobile
applications.
The
the
console
is
still
the
place.
What
I
do
most
of
my
work
and
in
over
the
years
I
had
to
write
a
lot
of
little
apps
on
the
console,
and
you
know
I
may
keep
working
on
the
console.
This
is
my
file
manager.
What
you
see
in
the
screen.
B
B
A
B
Shell,
so
we'll
talk
about
that
building,
GUI
application
or
a
terminal
history
basis
on
a
call,
so
let's
get
started
with
command-line
parsing.
So
this
is
my
go-to
library
that
I
use
for
building
command
line
applications.
The
idea
is
to
write
a
blank
tool.
You
wanna,
you
want.
One
of
the
most
Mon
tasks
is
parsing
the
arguments.
The
arguments
that
are
passed
as
the
string
array
are
to
your
pain
and
you
want
to
integrate
properly
with
the
embarkment,
and
that
means
you
know
these
days.
B
The
convention
on
unix
is
and
a
letter
short
option
and
space
and
for
an
optional
parameter
or
for
a
long,
Dobson
name
equals
and
the
value
and
any
other
very
thing.
So,
instead
of
having
everybody
and
this
over
number
for
this
little
library
called
monitored
options,
it
is
not
like
tomorrow,
you
can
use
it
on
thought
meant
for
mono
and
and
it's
available
as
a
new,
yet,
but
also
something
in
this.
This
is
a
library
that
is
implementing
a
secret
file,
so
you
don't
need
to
use
it.
If
you
don't
want,
you
can
just
also.
B
This
is
how
you
define
the
option,
so,
let's
walk
through
a
couple
of
apples.
The
first
line
says
that
option,
for
that
means
that
you
can
pass
the
chin
for
your
application
and
and
both
this
little
method
in
particular
in
this
lambda
here
and
Augusta's.
At
this
point
he
said
the
variable
this
boolean
value
before
true
right.
So
these
are
the
way
that
you
define
what
happens
this
path,
so
you
can
do
any
arbitrary
think
there.
Let's
go
to
the
fourth
line
on
the
fourth
line.
B
You
see
that
there's
a
there's
a
little
and
then
the
pipe
operator
and
then
listener
what
these
does
is
it
defines
the
possible
ways
that
we
can
be
stopped
either
with
a
shortcut
right
with
a
single
primer,
L
or
passing
listener
right.
So
in
this
case,
you
would
access
those
two
options.
You
can
also
notice
here
that
all
of
these
options-
this
is
a
string
that
will
be
used.
You
need
help
right
when
you
vote
it,
and
then
you
request
some
help.
We
automatically
generate
that
mr.
B
Bob
now
the
next
line
that
is
also
it
has
this
syntax
and
and
then
the
piper
barrier
for
Teague
was
what
this
means.
It's
telling
mana
options
is
correct.
This
option
takes
a
parameter
right.
The
way
that
I
described
it
before
so
and
the
rest
are
just
other
things
that
are
just
right,
but
these
are
effectively
the
define
functions
now,
there's
a
lot
more
power
to
order
there,
and
this
is
an
actual
invocation
of
the
application,
and
you
can
see
how
this
is
used.
B
B
Ww
microsoft.com
https
that
are
not
linked
to
any
option.
So
those
are
we'll
get
to
that
in
a
second.
Those
are
past,
doesn't
return
for
the
person
library
to
your
application.
The
second
line
shows
a
different
way
of
invoking
something
very
similar.
Again.
It
shows
the
use
of
a
long.
The
long
table
shion's
dashboard
equals
3000,
which
is
equivalent
to
p
+
/
TLS,
which
is
equivalent
to
t
so
now
I'm
going
to
show
you
how
these
works.
B
So
what
you
do
is
you
call
the
parse
method
on
the
options
and
you
pass
the
arguments
that
you
received
in
the
command
line
and
the
return
is
an
ienumerable,
Springs
and
and
peace
is
yeah,
and
this
is
everything
that
was
not
parsed
as
an
option
and
in
this
case
I
just
happen
to
have
implemented
the
convention,
that
the
first
parameter
is
the
host
name
and
second
parameter
support.
I
am
choosing
in
this
particular
case.
B
We
will
default,
the
user
does
not
quite
a,
but
the
second
parameter
I
make
the
default
be
HTTP,
that's
what
you
see
in
case
1
and
if
you
don't
provide
those
two
arguments
which
are
in
a
mandatory
I
show
the
help.
Alright,
then,
we'll
get
that
in
a
second,
but
this
is
basically
the
way
that
you
build
this
line.
B
But
when
you
run
this
thing,
if
you
want
to
truly
help,
you
invoke
this
method
right
option
descriptions,
you
pass
a
output
body
right
in
this
in
this
case,
I
want
to
send
it
to
the
console
dot
output,
and
this
is
what
it
looks
like.
So
when
you
vote,
when
you
vote
the
the
command
with
no
arguments,
essentially,
we
say
hey.
This
is
an
error,
so
we
display
to
the
user
a
list
of
possible
options
that
they
can
use
right,
and
this
is
a
you
know.
It's
generated
from
the
data
definition
that
you
saw
now.
B
One
thing
that
has
happened.
One
thing
that
has
happened
in
the
last
few
years,
for
example,
is
things
like
the
git
command?
Let
me
go
here,
so
the
get
command
it's
now
kind
of
a
collection
of
math
right,
so
if
I
say
git
commit
in
such
a
chore,
it
sub-module
you
see
that
it's
actually
a
family
of
command
and
and
there's
a
couple
of
interesting
elements
here.
This
is
the
the
subcommittee
that
the
main
command,
and
then
you
have
sub,
commands
hogs
data
in
it
in
it.
B
B
Of
of
your
commands,
but
you
can
also
pass
spring
doors,
not
part
of
the
standard
output
right.
So
so,
for
example,
you
say
the
divide
shows
define
the
string
these
gates,
it's
not
out
with
us
usage
rights,
you
say,
usage,
gate
version,
etc.
You
can
see
that
out
there.
So
this
is
a
nice
formatting
versions
in
automatic
displayed
of
the
things
that
you
have.
But
what
is
more
interesting
here
is
that
you
can
you
can
test
them
rights?
A
B
That
we
also
recently
added
or
this
for
any
plans
or
sub-command
to
actually
have
faces
in
their
name.
So
if
it
just
happens
that
for
user
experience
you
desire
to
have
a
space
in
the
middle
to
cancer,
you
do
that.
So
you
could
say:
stop
module
or
subspace
mode.
That's
what
you
want
so
now,
so
that's
command
line
options
bar
sink
very
interesting
should
go
use
it
today
out.
B
The
second
piece
is
a
lot
of
the
tools
that
I
ride
for
fools:
that
I
day
to
day
basis,
have
to
do
our
our
interactive
user
in
the
command
line.
So,
for
example
like
the
shell,
so
let
me
go
back
to
my
trip
here.
You
should
think
it's
a
little
bigger,
so
you
can
get
up,
so
you
can
get
us.
So
you
can
see.
Is
better
I'm
gonna
use
the
interactive
trigger
here.
B
I
can
again,
you
know
sure
c-sharp
commands
rock
and
get
their
salt,
but
what's
interesting
that
I
can
use
the
arrow
keys
here
to
go
back
and
hit
another
command
line,
and
maybe
it
make
some
changes,
but
also
I
would
like
to
get
food
completion
and
style.
So
if
I
press
dog
I
would
like
to
get
my
yeah
I
like
that
completion,
the
way
that
you
expected
something
that
you
can't
really
get
with.
B
So
this
is
the
second
library
that
I
wanted
about.
This
is
called
monitor.
Man
terminal
edit,
but
before
we
get
there,
I
want
to
give
you
a
sense
of
the
kind
of
challenges
that
we
need
to
building
its
console
applications.
So
you
know,
wait
you're,
acting
console
applications,
you
don't
really
know
very
well
the
other
end.
Now
most
people
and
most
populations
are
based
on
the
on
the
vt100
sort
of
escape
sequences
and
the
protocol.
B
So
it
was
kind
of
limited
what
it
could
do,
blinking
right-
and
you
still
need
to
support
this,
because
not
every
later
that
will
connect
to
your
application,
they're
on
a
cloud
or
a
server
or
something
else
like
that
will
support
the
full
spectrum
of
colors
right.
So
nowadays
you
have
true
color
and
windows.
You
have
true
polar
front
axle,
so
things
have
changed
a
lot,
but
you
need
to
keep
in
mind
that
when
you're
building
applications,
your
application
needs
to
work
in
these
different
environments.
B
The
thing
that
it's
a
one
of
the
things
that
is
interesting
is
that
the
is
that,
over
the
years,
we've
added
new,
actually
the
vt100
core
and
typically
95,
as
it's
a
superset
of
the
vt100
set
of
escape
sequences,
but
they
support
Mouse
events.
So
that
means
that
you
can
be
addictive
clicks.
They
can
receive
double
clicks.
They
can
track
the
mouse
position.
Some
of
them
contain
collars.
Talk
about
that
right.
Second,
and.
B
B
You
know
it's
really
not
a
problem
of
dealing
with
the
console
on
Windows,
you
have
the
console
API,
but
on
unix
is
a
little
bit
tricky.
The
way
that
a
console
application
still
it
doesn't
really
know
what's
on
the
other
direction,
and
the
way
that
attribute
capabilities
are
determined
are
based
on
the
term
environment
Walkerville.
So
there's
an
arm
and
variable
called
term
and
based
of
this
applications
in
to
look
into
system
data
is
called
trim
info.
What
capabilities
are
there?
I'm
gonna
show
you
what
this
needs
to
keep
it.
So
this
is
my
term.
B
B
Some
of
them
are
attributes
like,
for
example,
or
is
the
terminal
supports
the
number
of
columns
that
it
supports
the
number
of
fine
we'll
get
that
in
a
second,
but
you
see
that
my
terminal
is
actually
a
much
larger.
It's
actually
190
by
29,
and
here
it
says
80
by
24.
So
I'll
talk
about
this
in
a
second
there's,
this
concept
of
pairs
and
we'll
return.
B
These
later
mm
airs-
and
some
of
these
are
escape
sequences
that
are
used
for
particular
things
like
clearing
the
screen
or
moving
cursor
to
particular
position,
and
some
of
the
others
declare
things
like
what
kind
of
escape
sequence
is
sent
when
the
user
presses
one
of
these
Keys
like,
for
example,
he
say
you
Pete
I
wrote
some
punching
Keys
right
when
you
first
function
key
you
get
an
escape,
followed
by
another
place
in
comic
tilde
right.
So
this
is
the
database.
B
Now
I
can
show
you
the
database
for
at
least
100
by
changing
the
murmur
horrible.
It's
a
lot
more
like
you
know.
It
fits
me
right.
It's
a
lot
and
applications
actually
rely
now
together
capabilities.
Now
there
are
other
a
couple
of
other
items
in
particularly
this
one.
You
can
see
right
now
that
the
farm
fireball
lines
will
I'm
over
fight
the
override.
The
information
from
database
database
says
hey
for
life
as
well.
I
already
have
49,
and
not
only
this
information
available
on
Harmon.
B
There
is
also
also
these
io
control
operations.
A
very
certain
terminal,
so
sometimes
a
kernel.
The
operating
system
has
this
information,
so
typically,
the
way
that
it
works
is
that
the
MOSFET
just
we'll
try
the
iocation.
If
that
fails,
they'll
fall
back
to
lines
and
columns.
If
that
fails,
it
back
permeabilities.
B
So
the
I/o
control
operation
really
doesn't
reverse
evil
minds:
/
words,
/
super
terminals,
ssh
emulated
environment
now,
like
I
mentioned
before.
One
of
the
challenges
that
you
have
in
this
space
is
not
only
that
you're
dealing
with
old,
you
know
very
old
term.
Is
that
early
anybody
uses,
but
that
lot
of
the
people
that
have
written
in
terminal
emulators
have
really
limited
themselves
due
to
the
originals
right.
So
these
are
the
operations
that
you
have
bling
bald
person.
Then
some
people
a8
color
right.
B
So
you
have
a
corpus
for
your
foreground,
a
court
for
the
background,
some
other
people
added
16
colors,
and
that
means
that
they
added
another
I
love
it.
You
know
the
bold
version,
high-intensity
colors
for
there
for
other
folks
like
the
terminal
right
place,
256-color
palette
and
and
lastly,
the
thing
that
everybody
you
know
is
moving
to
you.
These
days
is
supporting
20
right
now,
the
LA,
the
challenge
would
some
of
we
have
a
couple
of
challenges
here.
B
The
problem
is
that
many
systems
that
you
connect
to
just
an
old
version
of
ink
curses
and
the
API
has
not
remained
ABI
of
this
library,
actually
is
determined
at
compile
time,
which
means
that
which
means
that
two
systems
might
have
a
none
curses
thing.
They
have
different
api's
right,
so
there's
there's
different
ways
that
solved
I'm
gonna
get
into
that.
But
one
of
the
challenges
that
you
face
when
you're
building
these
applications
is
that
the
system
libraries
might
not
be
update
right.
So
some
people
have
taken
the
approach
that
they
just
read.
B
The
perpetrator
base
directly
circumventing
these
dependence
all
right.
Now,
you're
building
these
applications
I
think
that
the
first
thing
that
that
you
want
to
do
is
you
know
if
you
have
very
basic
needs,
you're,
not
a
man
of
big
desires,
you
can
just
use
a
system
console
eight-time.
The
good
news
is
that
we
we
support
this
on
a
framework
target
hormonal.
It
does
basics.
Reading
writing
and
it
has
a
limited
interactivity.
B
It
is
limiting
that
it
only
supports
it,
doesn't
cursor
positioning,
but
beyond
that
it
has
a
lot
of
limitations
Peter,
but
but
in
particularly
it's
it's
an
API
that
doesn't
doesn't
even
surf
of
the
capabilities
of
the
windows
console.
So
it's
really
a
it's
really
of
the
thing
that
you
want
to
do
in
a
modern
console,
app
and
like
I
said
also.
The
other
problem
is
that
it's
really
bad
for
your
neck.
It
doesn't
really
work
well
with
UNIX.
B
You
know
in
Windows
there's
this
concept
that
you
can
go
out
to
preposition
on
the
screen
and
the
display
gets
refreshed
one
point
in
in
UNIX.
Actually,
if
you
want
to
update
a
piece
of
the
screen,
you
must
first
in
the
sequence
that
moves
the
cursor
to
that
position
and
think
you're
right
here
text.
B
So
this
is
a
little
bit
challenging
because
it's
not
very
efficient
when
a
constant
change,
the
cursor
position,
the
right
character,
you
want
to
accumulate
all
the
data
and
then
post
operation
that
optimizes
just
how
much
text
you
sent
right
and
and
really
the
big
problem
is
that
reasoning
at
higher
levels
about
this
right
here
it
really.
You
really
have
the
wrong
our
own.
So
we'll
look
some
of
the
things
that
you
can
do
today,
everything
so
interactive
line.
Editing.
B
B
B
So
what
you
can
do
in
this
in
this
particular
case
is
you.
Wanna
is
a
library
that
can
replace
is
have
the
Ponte
dot
line.
Edit
library
gives
you
the
editing
of
your
input
Serkis.
It
also
has
a
max
Keeble,
because
our
UNIX
bad,
you
know
UNIX
purse.
It
also
uses
most
of
the
windows,
so
you
know
the
home
cursor,
and
you
know
he
left
right.
You
know
control
all
right,
all
that
stuff
works,
but
most
importantly,
UNIX,
where
some
is
nothing
available
in
every
terminal.
B
We
use
the
Emacs
key
bindings
right
and
the
other
capabilities
that
it
also
has
a
feature
that
can
save
the
history
of
all
of
your
command.
So
it
really
it's
very
close
to
the
to
the
libraries
that
have
been
used
in
UNIX
many
years.
So
we
save
the
history,
the
library,
save
the
history
and
store
the
history
next
time
that
you
started,
you
provide
an
identifier
for
where
you
want
the
history
come
from,
and
also
it
has
a
search
history
right
and
like
I
showed
before
it
has
optional
completion.
B
So
this
is
how
you
use
it,
create
an
instance
of
the
time.
Editor
us
right.
You
provide
ie
for
the
history
right
on
how
big
on
the
history
to
be
finally
keep
300
300
items,
history
at
the
labels,
history
right
and
then
you
just
build
the
editor
dub
edit.
That
return
value
the
spring
right,
and
this
is
the
prompt
you
now
let
let
me
show
you
I
bet
strain
AK
right.
B
So
if
I
invoke
the
seizure,
bleib
or
the
seizure
command
again
and
just
press
the
up
arrow,
you
can
see
that
I
could
go
through
my
history
of
things
that
I've
done
I,
don't
even
know
what
I'm
doing
with
this.
Yes,
sir
days
ago,
it's
testing
some
bark
at
us,
but
you
can
just
go
through
the
history
here
now.
The
other
thing
that
is
interesting
is
that
it's
a
search.
B
So
if
I
press
it
for
our
key,
when
you
press
ctrl
R,
it
enables
reversed
incremental
search
so
as
I
type
right,
a
s
right,
it
goes
through
history
and
find
the
match
or
for
I
was
looking
for
this
case.
Assembly
or
I
could
try,
for
example,
see
that's
all
Oregon
and
try
to
define
history
like
pressing
ctrl,
R
and
I
will
keep
going
for
all
branches
right.
B
The
completion
I
show
you
that
when
you
press
the
dot
on
c-sharp-
and
you
actually
get
a
list
of
valid
options
that
you
can
use
and
I'm
gonna
show
you
how
you
fire
up
is
the
set
of
this.
This
delegate.
Do
you
hook
it
up
to
the
Oracle
event?
This
delegate
get
some
at
a
string,
the
full
input
at
this
point
of
the
user,
then
so
it's
really
wanna
show
and
the
position
where
the
cursor
is
inside
right.
B
In
this
case,
implementation
is
super.
I
just
happened
to
call
the
the
c-sharp
umpire
and
I
said.
Please
give
you
the
completions
for
for
this.
This
particular
point
right.
So
in
this
case,
I
extract
the
the
complete
string
there
I
just
I,
caught
the
input
string,
I
only
interested
in
everything
object
over
the
first
reason
tell
the
compiler,
please
give
me
established
and
you're
a
job
inside
the
delegate
is
to
return
right.
An
object
of
you
know,
instance
of
the
completion
object
that
provides
both
the
perfect
right
and
yeah.
B
You
know
that
that
that
essentially
gives
you
all.
The
elements
are
identical
and
uncrate
the
completions,
and
that's
all
you
have
to
do.
Completion
I.
Think
that
you
have
to
keep
in
mind
here.
Is
you
see
there's
no
line
here
at
the
top
a
second
heuristics
modes,
equal
C,
sharp
the
the
differ?
The
line
editor
is
to
provide
completion
when
you
press
the
tab.
This
is
very
similar
to
what
what
get
on
Nick
shell
right.
You
want
to
get
a
sure
you
press
the
tab
key
and
then
it
picks
the
autocomplete
event.
B
The
heuristics
all
it
does
enable
c-sharp
is
that
it
also
triggers
medication.
When
you
have
a
done
so,
if
you
press
a
dot,
it
automatically
triggers
it
and
in
this
particular
case
it's
smart
strength,
so
it
doesn't
come,
it
doesn't
figure
it
inside
out
spring,
so
you
can
remove
the
heuristics
mode
and
you
would
get
the
default.
So
it's
now,
let's
move
on
to
the
most
exciting
piece,
which
is
the
text
user
interfaces.
B
So
this
is
a
line
that
I
Philippe,
the
other
two
libraries
have
this
UNIX
for
many
years
or
in
the
augment,
maybe
eight
years
or
more.
This
is
a
library
that
I
built
some.
Maybe
six
years
ago,
I
can't
remember
six
seven
years
ago,
right
years
ago
and
kind
of
abandon
it
at
the
time,
because
Silverlight
was
happening
and
several
I
was
a
hot
at
the
time
and
now
now
the
cloud
is
again.
B
As
I
said:
she's
parking,
Berg,
I
decided.
That
think.
That's
why
the
UI
toolkit
used
to
be
implemented
in
a
single
file.
Is
they
split
up
in
many
one
right,
so
the
project's
called
terminal
to
GUI
and
it's
a
essentially
a
toolkit
for
building
the
kind
of
applications
right.
So
what
you
see
here
is
a
is
one
of
these
apps
and
it
shows
just
that
a
collection
of
UI
elements,
right
labels
like
login
and
password
entry
lines
for
entering
your
gain
or
your
for
checkboxes
radio
buttons.
B
So
this
is
the
kind
of
thing
that
wanted
to
build
and
I
wanted
to
create
a
lot
of
these
certifications
right
and
you
don't
want
to
yourself,
you
don't
want
to
need
every
element
you
want
to
read
all
of
these
things
handle
hotkeys,
awesome
and
and
so
on.
So
it's
really!
You
have
to
think
what
terminal
look
we
as
a
as
a
UI
framework,
similar
in
spirit
to
what
you
use
your
building,
that's
the
boxer
or
but
for
console
apps
right.
So
the
the
code
that
you
see
on
the
left
is
implemented.
B
Hopefully
with
the
code
that
you
see
on
the
right.
Let
me
walk
you
through
a
couple
of
interest
and
elements
here.
The
first
is
a
you
know:
you
bring
the
terminal
dot.
The
second
one
is
that
before
you
get,
you
need
to
call
init
and
that
that
term
means
which
teachers
that
later
in
the
term
colors
Arabic
or
which
staff
available,
which
attributes
you
can
use
its
application
for
running.
Then
here
I,
just
the
next
slide,
are
topical
application.
Thought
is
just
a
convenience.
B
I
want
to
be
able
to
complete
the
top-level
view
of
the
application.
Talk
about
using
a
second,
then
I
create
a
I,
create
a
I
create.
It
is
a
we'll
talk
about
that
in
a
second,
but
essentially,
I
create
a
window
that
doesn't
cover
the
first
line,
say
they.
If
it
give
me
a
frame
that
covers
everything
but
and
I,
give
it
a
little
name.
A
B
I,
add
the
resolve
its
window.
Add
dad
window,
then
I
many
bar
and
I
add
the
mint.
The
top
again
a
couple
of
items
here
to
look
for
the
underscore
is
a
in
front
of
the
letter
highlights
letter
Y
and
also
makes
it
a
hotkeys
or
user
presses
that
better
you
activate
that
entry,
and
then
you
can
see
how
I
create
a
part
of
the
elements
in
Y
just
like
creating
instances
of
these
videos
and
adding
them
all
to
the
window
and
finally
qualification
that
run
triggers
the
main
loop.
B
It
deals
also
with
challenge
of
terminals.
Have
some
of
them
don't
have
I'd
start
of
setup.
I
said
I
said
about
a
set
of
styles
that
you
can
use
and
reliable
on
your
app
so
that
it
looks
correct
and
works
properly
on
systems
that
support
it.
We
cantle
library
automatically
handles
resize
the
terminal.
It
takes
care
of
input,
events
and
running
your
main
as
you
use.
The
API
you'll
see
that
I've
taken
yes
from
the
is
UI
key
designs.
B
We
do
I
kid
you'll
be
familiar
with
a
lot
of
the
concept
and-
and
you
see
that
I
borrow
actively
I
can
windows
as
well
now
application
that
Ron
is
is
think
that
makes
your
application
take
right.
It
provides
a
main
loop.
What
is
means
is
the
application
that
Ron
is
in
fetching
input
events
and
that
can
be
input
or
a
mouse
input
it
all
sectionals
timer.
B
So
if
you
want
your
application
that
asks
that
get
triggered
every
you
know
10
seconds
or
every
minute
or
every
something
you
can,
though
it
there,
you
can
also
have
a
method
be
invoked.
Education
is
all
when
there's
nothing
else
to
do
so.
You
can
have
method
that
you
invoked
when
there's
nothing
Penta
to
on
UNIX
systems.
B
A
B
Me
what
the
socket
is
ready
about
this
and
you
don't
want
to
create
a
thread.
You
can
do
it
Q
right.
Well,
the
library
also
handles
for
UNIX
suspecting
so
Ingenix
when
you
press
control
Z,
your
application
is
supposed
to
reset
the
terminal
to
a
same
state,
did
get
you
back
to
shell
and
then,
when
press
F
G
it's
supposed
to
bring
you
back.
Okay
right,
so
AC
back
so
like
this
right,
I
have
an
application.
B
If
I
press
ctrl
C
it
suspends
again
fried
the
app
is
suspended
and
if
I
press,
F,
G
or
ground
it
back
to
life
right.
So
so
the
framework
takes
care
of
this
thing.
The
application
run
does.
Is
that
it's
in
charge
of
managing
the
focus,
drawing
the
focus
controlling
to
focus
and
sending
events
to
the
proper
views
industry,
as
well
as
redrawing
effect,
is
now
a
common
idiom
on
UNIX.
B
It's
the
present
control,
L
key,
so
son
you're
dealing
with
a
charming
because
noise
on
the
line
or
background
process
is
writing
stuff
to
your
screen,
like
example,
I
could
write
something
like
Wow
true.
Do
like
oh,
hey,
alright,
so
this
thing
is
just
gonna
keep
spamming
my
terminal
every
three
seconds
right,
actually
I
need
to
make
it
faster
it
better
right.
So
every
every
second
right.
So
sometimes
you
have
an
application
like
this
one
and
there's
a
process
that
is
spamming.
B
B
Keyboard
input
windows,
everything
in
your
works
affected.
There
is
really
not
much
to
do
there,
but
on
UNIX,
like
I,
said
we're
dealing
with
as
light
spectrum
and
some
of
the
challenges
that
you
have
with
the
keyboard
input.
Sometimes
there
are
not
function
keys
right.
There
are
no
function
keys,
but
you
want
to
your
user
to
use
function
keys
and
it's
not
obvious
how
to
map
them.
Some
terminals
do
not
have
a
notion
of
alt
keys
or
keys,
or
their
armies
configured
right
or
finds
people
don't
know
how
to
depict
these
things.
B
So
we
don't
see
as
those
two
things
for
you.
First
in
absolute
sequence,
escape
plus
a
number
right,
so
I
think
the
Escape
key
plus
a
number
is
mapped
to
key
right.
So
if
you
don't
have
an
f1
key
border,
you
don't
know
how
to
get
better
here
in
a
knife
SSH,
something
you
don't
know
how
to
send
a
function,
key
press
escape
and
a
number.
Actually
it's
a
good
point.
If
you're
using
an
exponent
on
the
iPhone,
some
do
not
have
or
Android
do
have
F
keys,
the
other
one
is
out
commit
right.
B
You
wanna
say
all
tags
or
you
know
how
test
anything
else
press
escape
was
a
letter.
Is
map
also
there
and
is
for
those
of
you
that
use
Emacs.
You'll
know
that
exactly
does,
and
this
is
interesting
because
in
dialog
boxes
you
want
to
know
in
the
DOS
era
you
use
out,
was
the
letter
to
automatically
focus
or
activate
a
particular
control
right.
So
everything
that
has
a
hug
right
hotspot
or
things
like.
B
B
Now
the
system
is
this
concept
of
peeps
right,
and
this
is
the
very
same
concept
that
you
have
arrived.
You
have
you
and
is
used
a
frame
and
the
frame
defines
the
whole
region.
The
view
will
cover
on
the
screen
and-
and
you
can
assign
it
in
two
ways-
is
that
the
absolute
frame?
So
when
you
create
your
object,
you
pass
a
black
object
right
and-
and
these
sets
an
absolute
position
trigger
right.
If
you
pass
a
red
parameter,
it
will
set
in
a
position
or
you
can
set
the
X
Y
width
and
height
property.
B
These
are
not
integers.
These
are
magical,
so
we'll
talk
about
matching
between
behind
X
Y.
We
then
hide
in
a
second
right.
Another
thing
to
know
is
that
X
Direction
moves
left
to
right
than
the
white
top
table
right
now.
One
notion
that
came
directly
from
Maya
that
views
can
have
nested
views
and
does
in
turn
and
have
years.
So
it's
a
composable
model.
When
you
build
a
compound
user
interface,
you
just
can
compose
these
by
adding
views
inside
of
each
other,
and
the
focus
system
works
by
navigating
through.
B
So
it's
the
usual
is
the
visual
appearance
that
the
user
see.
So
what
we
we
walked
a
tree
hierarchy.
Well,
nothing
is,
but
we
worked
it
pretty
high
rocky
and
try
to
give
the
focus
to
the
next
view
in
the
Huayra,
and
if
there
is
no,
you
know
more
today,
for
example,
in
this
case
these
two
orange
ones
inside
the
green
one
inside
the
white,
the
yellow
one
inside
each
one.
B
If
one
of
those,
if
the
last
one
was
focused
on
a
present
AB
button
to
move
to
the
next
focused
item,
it
would
try
to
maybe
the
green
element
up.
If
that
is
not
focusable
right,
oh
no,
no,
it
would
go
to
the
next
logical
one.
In
this
case
it
is
the
last
one
it
will
go
to
the
green
on
top
right,
so
tries
to
follow
the
well.
It
follows
order
in
which
you
created
the
views
inside
each
one
of
this.
Now,
not
all
the
views
are
focusable.
B
B
You
know
like
achievement
right
so,
and
you
have
to
do
it
by
overwriting,
the
layout
sub
method,
the
view
rule
that
made
a
poor
decision
of
making
them
absolutely
the
other
thing
that
you
can
do-
and
this
is
something
that
I've
struggled
I
figure
do
I
want
to
have
a
layout
says
that
use
that
measures
the
objects
or
you
know,
and
each
object
does
the
whole
product.
What
is
your
desired
size?
B
How
big
can
you
write,
what
is
your
tire
size
and
your
minimum
size
and
maximum
size
and
then
and
stack
views
and
starts,
and
boxes
and
tables
and
I
felt
that
was
too
complicated?
I
felt
I
wanted
to
do
something
simpler
and
I
came
up
with
this
idea.
The
x
and
y
properties
are
a
type
called
pulse
POS,
that's
that's
rich
position
and
the
width
and
height
are
of
a
type,
and
the
other
nice
thing
is
that
any
integer
values
are
implicitly
converted.
B
So
if
you
really
want
just
at
the
exposition,
Theory
just
say,
x
equals
0
and
that
will
anchor
the
value
of
x
0
right,
there's,
no,
no
there's
no
interesting
stuff
doing,
but
you
can
do
a
lot
of
really
clever
stuff
if
you
use
the
pause
in
position.
So
let's
look
at:
let's
take
a
look
at
pause,
there's
a
number
of
there's
a
number
of
static
methods
in
posit
you
can
call.
So
if
you
call,
for
example,
pause
doc
percent
number
right,
he
will
give
a
percentage
people.
B
It
will
return
a
percentage
within
the
container
right.
So
you
can
use
this
to
position
element
at
a
percentage
inside
your
container
view,
or
you
can
say
anchor
end,
which
will
essentially
give
you
a
position
that
is
competing
from
the
right
side
of
the
V
right.
You
say
anchor
and
zero.
Give
you
the
right
value
right,
verse,
zero,
which
is
always
the
left
right.
So
you
don't
really
need
to
thank
for
start,
because
it's
essentially
just
the
eggs
to
an
absolute
position
right.
B
You
can
use
center
to
get
the
center
within
painter
of
this
view,
and
the
interesting
thing
here
is
that
up
greater
closet,
minors
are
over
put
it.
So
it
lets
you
do
things
like,
for
example,
center,
then
right
or
left
for
right
and
so
on.
Now
the
four
necks
that
are
come
left
top
right
bottom,
these,
let
you
poke
the
left
side.
The
left
side
of
the
specified
view
it
could
be.
B
The
container
view
can
be
one
of
your
peer
views
right
and
we
do
a
topological
sort
here,
library
we
do
a
topological
sort
to
identify
to
compute
to
compute
this
thing
and
if
you
have
cycles,
of
course,
you
can
I
get
an
error,
but,
but
essentially
you
can
say
I
want
to
get
I
want
to
the
position
that
I'm
gonna
set
is
gonna,
be
relative
to
the
left
and
pops
right
at
the
bottom.
Four
of
these
other
you
that's
why
I
have
to
compute
this
thing
right
and
very
similar.
B
Are
you
like
fill
I
will
perform
at
all,
based
on
right
and
or
can
said,
and
you
can
also
do
the
same
operation.
So
let
me
give
you
a
taste
of
what
it
looks
like
for
example,
in
this
scenario,
I'm
saying
I
will
again
I
want
the
exposition
to
be
centered,
one
by
my
I
Colin
to
this
center.
In
my
container
the
Y
position
to
be
six
now
the
password,
you
know
it's
that
really
should
fun
right.
It
should
be
the
first
one.
B
So
I'm
saying
you
know,
if
meant
left
side
of
the
preview
right,
but
I
went
there
wide
to
be
just
below,
so
he
say
give
me
the
bottom
of
the
login
and
then
at
one
space
right
and
you
can
see
how
these
works.
You
know
on
logic,
text
I
actually
can
say
well
give
me
the
right,
rightmost
position
of
power
and
give
me
the
top
of
the
position
of
the
game.
B
B
Now,
let's
talk
about
another,
so
I
read,
there's
a
special
kind
of
view
for
the
top
level
and
they're
only
special,
because
they
participate
model
and
handling,
isn't
when
you
pop
up
a
dialog
and
you
want
to-
and
you
want
to
capture
all
events
you
want
to
other
happens
in
the
UI.
So
when
you
pop
up
a
model
view,
you
don't
want
the
mask
to
click
outside
of
this
big
top
level
and
the
event
going
to
the
one
behind
that's
right,
so
you
need
us
a
top-level
view
to
application.
B
Now
the
views
like
I
said
every
week
before
the
means
whether
can
be
has
a
focus
or
whether
it
can
be
focused.
Some
of
them
are
code
right.
Labels
example
right
these
meth
and
say:
doesn't
matter
that
method
and
you
never
right
solve
them.
You
can
control
whether
you
want
to
focus
or
not,
definitely
disable
an
entry.
You
don't
want
it
to
be
focused
just
at
both
right
and
then
at
or
of
all
these
views.
B
There's
these
four
methods
every
time
that
there's
a
just
the
system
first
goes
through
all
the
views
in
order
right
and
it
says:
hey,
do
you
want
to
process
these?
This
is
when
you
say
escape
ladder.
First,
you
keep
a
chance
ready
to
respond
okey.
If
nobody
responds,
then
you
process
it
a
regular
key
right
and
if
nobody
responded
or
want
the
key,
then
you
say:
hey
I
have
a
code
here:
I'll
do
the
throat.
Why
are
you
interested
in
this
and
finally,
the
last
event
is
the
mouse
event.
B
B
I
create
a
bunch
of
these
for
you,
so
out
of
the
box,
there's
already
a
set
of
styles
I've
only
defined
one
styles,
I
would
love.
Somebody
else
contributes
more
styles,
but
but
it's
important
that
you
build
your
app
like
this,
because
you
want
your
app
like
the
one
on
the
left.
As
you
can
see,
you
can
still
use
it.
If
you,
you
know,
I
forced
in
the
left
side,
the
terminal
to
be
pt100,
and
you
can
still
use
it.
B
B
So,
as
far
as
that,
you've
used
concern
we're
actually
just
dealing
with
attributes
and
we're
dealing
with
them
in
a
couple
of
ways,
but
before
we
talk
about
these
about
about
how
they
deal
with
them,
I
want
to
look
at
one
particular
set
of
views
here,
because
you'll
notice
that
you
actually
need
a
bunch
of
the
colors
for
these
UI
to
work.
So
for
ambulant.
Remember
me
right
right
now:
it's
not
focused
and
there's
both
a
hotkey.
They
are
and
then
there's
a
regular
text.
So
you
really
two
separate
attributes.
B
You
need
one
a
trick
for
the
hotkey
one,
a
treat
for
the
regular
text,
and
you
can
see
that
the
second
line
is
focused.
I
do
want
to
give
the
user
an
indication
that
this
is
where
the
focus
the
focus
is
shown
in
two
ways.
The
cursor
is
shown
in
the
position.
The
cube,
but
also
the
label
is
differently,
and
you
see
here
again
the
at
different
than
the
attribute
for
that
text.
So
we
really
talked
about
four
colors.
So
this
is
what
I
call
the
normal
normal
color
days.
B
One
is
called
the
hot
normal
called
I
bet
hockey
applied
to
the
normal
text.
This
is
the
focus
color,
and
this
is
a
hot,
solid
right.
Those
are
four
colors
that
you
use
and
I
call
these
things
colors
and
by
default,
the
the
style
that
you
have
you
want
to
use
today.
I
have
four
different
styles.
You
can
see
three
of
them
on
the
screen
right
now.
The
based
scheme
of
color
so
use
use
a
scheme
and,
and
they
inherit
their
scheme
from
their
top-level
container.
B
So
what
you,
when
you
look
at
everything
that
is
blue
and
see
the
it's
a
screenshot
that
I
show
you
have
times
already,
where
you
have
the
login
and
password,
and
so
on
that
one
is
using
the
base
style.
Now,
the
pop-up
that
you
see
there,
that
it's
quick
them.
Are
you
sure
you
want
to
quit
this
demo
that
one
is
using
the
dialogue
style
right?
B
Then
you
see
essentially
all
the
viewers
behavior
this
because
I
was
inside
this
in
a
dialogue,
the
text
is
different
right
and
the
idea
is
that
it's
highlighted,
and
even
if
fronted
on
a
on
a
on
a
vt100
you'll
get
this
inverse,
and
then
we
have
a
different
style
for
the
menu.
You
don't
see
here
error,
but
usually
it's
on
black
and
white,
dislike
strident
fault
and
and
and
on
color,
it's
red
right.
You
want
to
use
the
styles
for
your
application.
Now,
there's
a
bunch
of
use.
B
You
know
it's
not
about
as
iOS
or
WPF
in
terms
of
views
that
are
built
into
this,
but
you
know
I
know
I'll,
take
I,
just
there's
a
kind
of
thing
that
you
expect
from
here.
I
told
you
no
buttons
and
freeze
checkboxes
progress.
Redevelopments
text
field
is
a
one
line.
Editor
thanks
to
use
a
full-screen
edit
Earth
may
show
you
that
they
don't
even
know
about
how
it
is.
That
would
be
a
problem.
B
It's
not
there
because
I
mind
Happy's
here,
oh
well,
alright,
everyone
I
didn't
test
on
this
mission.
Have
it
Anil
but
anyways.
It's
a
full
screen
text.
Video
editor!
If
I
have
time
at
the
end,
I'll
build
it.
Visuals
and
I'll
show
you
it's
a
full
screen,
editor
and
scroll.
These
are
interesting
because
this
is
a
concept
you
asked
Rob
to
essentially
lets
you.
B
You
can
add
views
there
and
you
can
control
what
is
this
composition
and
when
the
views
come
into
display
they'll
be
shown.
Otherwise
it
will
be
right.
So
you
can.
You
can
completely
embedded
the
entire.
In
fact,
you
ain't
able
to
use
many
as
force,
because
because
I'm,
a
software
engineer,
there's
an
ex
view
that
gives
you
an
exit,
that's
important
that
you
can
use.
B
Then,
like
I
said,
the
logs
I
have
a
handful
of
dialogues
that
are
useful.
The
dialogue
is
just
a
window
and
can
pass
a
cup
for
the
dialogue,
the
window
with
buttons,
and
then
you
can
walk
yeah
and,
and
it
will
be
mortal
and
when
it's
running
either
because
pressed
escape
or
new
manual
requested
to
stop
the
execution,
it
will
return.
Console
so
acceptation
run
does
not
return
control
until
user
is.
B
The
message
book
is
a
variation
of
dialogue.
All
it
does
very
common
scenarios.
I
don't
want
to
sort
of
pause.
I
don't
want
to
check
the
set
of
handlers.
Just
ask
the
yes-or-no
question:
I
will
refer
you
she's
the
index
of
the
option
that
was
selector
or
want
the
user,
cancel
right
and
there's
a
variation
for
showing
errors
as
well.
All
those
changes,
the
style,
there's
a
file
open,
dialog
right.
If
you
want
to
open
save
files,
you
can
use
open
dialogue
dialogue.
B
B
One
thing
that
you
want
to
see
here
when
you
cancel
open
buttons.
The
open
has
the
Open
button,
has
this
additional
less
than
figures
and
signs
and
that
that
is
the
default
action?
So
if
you
press
the
return
key
in
even
if
you're
not
focus,
if
you're
not
focused,
help
and
button,
it
will
trigger
the
open
action.
B
So
if
you
press
return
at
any
point,
it
will
just
really
open
option,
and
that
gives
you
the
capability,
essentially
picking
something
the
cursor
pressing
return,
and
it
does
what
you
now
hey
Miguel,
what
its
thread
over,
but
it's
not
thread
safe.
So
one
thing
that
happened,
some
of
my
users
go
I,
just
do
it
up
CS
and
they
go
and
start
thread,
and
then
they
start
talking
at
the
poking
and
the
gooey
dots.
Yes
and
hey.
He
doesn't
not
working
right.
B
What
that
means
is,
first
of
all,
I
do
provide
a
seat
context,
and
what
that
means
is
that
you
can
just
use
a
sink
in
a
way
to
your
heart
content,
and
the
right
thing
will
happen
so
just
use
getaway
the
way
that
you
would
do
it.
We
have
winforms
WPF
app
and
the
right
thing
will
happen
now.
Some
of
you
don't
use
can
store
a
sinker
of
weight
or
you
already
have
a
background
to
it.
If
you
really
have
a
background
thread,
then
you
use
this
method.
B
Haitian
main
loop,
dot
invoke
and
you
pass
an
action,
and
what
that
will
do
is
essentially
is.
It
will
cue
the
action
to
be
executed
on
the
main
thread,
so
when
the
framework
is
in
a
good
place
to
listen
to
right
and
typically
and
all
these
does
behind
the
scenes,
we
add
an
idle
handler
for
you,
a
one-shot
idle
handler
that
runs
your
and
that's
art.
Okay,
now
there's.
A
B
And
curses
library
the
system
console
driver
that
uses
what
Dodman
provides
out
of
the
box,
but,
like
I
said
it's
very
limiting.
So
this
is
how
it
started
to
test
on
Windows,
but
it
has
just
too
many
problems,
so
I've
implemented
a
native
Windows
driver
that
that
has
all
the
capabilities
that
you
need
and
the
proper
mouse
processing
and
all
of
that
stuff
in
the
future.
B
In
my
copies
per
time,
I
will
implement
I'm
gonna
get
rid
of
in
curses,
because
in
curses
is,
for
example,
I'm
not
go
as
is
shipped
with
fewer
capabilities
that
I
need,
so
it
limits
the
the
spectrum
of
colors
that
you
can
use
so
I'm
gonna
be
building
a
new
driver
for
this.
Now,
if
you
don't
like
my
API
and
my
view,
design
and
all
of
this
stuff,
I
have
good
news
for
you.
The
amazing
Xavier
Suarez
has
built
a
salmon
forms
backend.
So
this
was
supposed
to
be
animated.
B
B
B
Are
you
loved
on
mobile
on
mac
windows,
xavier
wrote
out,
examining
form
is
back
in
for
the
console
and
and
if
you
want,
if
that's
your
cup
of
teeth
and
you
can
use
them
in
forums
and
build
at
UI
for
the
console
now,
let's
get
to
create
mine,
so
you've
done
all
the
work.
You've
done,
your
amazing
command-line
parsing
you've
done
your
line,
editing
and
for
your
some
kind
of
apps.
Are
you
built
an
amazing
Bui
app?
B
B
B
You
flag
it,
as
is
all
true
PACA
still
true,
and
then
you
give
it
a
name
right.
My
package
name
is
the
name
that
you
can
use
to
publish
this
to
new
Sheng
to
the
new
Jerry
posit
Ori,
but
the
command
that
you
want
to
type
as
a
user.
You
typically
want
it
to
be
lowercase
right,
so
in
this
particular
case,
give
it
the
name
that
you
want
to
use
in
this
case.
B
It's
my
tool
and
once
you
play
these
changes
to
UCS
purge
file,
you
just
say
dotnet
back
and
that
will
generate
your
package
right.
That
will
go,
compile
and
generate
the
package
and
and
then
you
install
it
with
this
command,
dotnet
will
install
and
then
you
pass
global
right
and
then,
in
this
case,
I
didn't
want
to
add
a
source-
or
you
just
say,
add,
source
in
debug
directory
in
the
package
name
and
that
installs
the
package
into
the
system.
And
then
you
can
just
use
the
my
tool
command
and
your
heart's
content.
B
Spain
or
whatever
this
is
so
this
way
that
you
take
your
your
your
amazing
app
and
make
you
a
system
tool.
This
is
similar
to
what
people
do
with
NPM
right.
So
now
you
have
no
excuse
to
not
use
dotnet
if
your
game
has
Hg
well
nice
of
this
thing
here,
so
you
can
imagine
right
the
Hana
different
languages.
B
Finally,
the
mono
world.
We
also
have
this
concept
of
sinkhole
contain
buying
executable,
so,
instead
of
having
to
have
them
install
because
this
requires
you
to
install
the
time
so
we
made
it
so
that
you
could
take
a
sh
and
in
generating
single
executable
no
depend
is
everything
ready
to
a
big
executable
every
one
of
your
dependencies
and
in
particular
in
this
case,
if
this
is
a
ball
one,
this
is
actually
Mac
API,
sir,
so
in
this
case
I'm,
linking
with
ops
and
building
an
API
and
in
shipping.
The
result
right.
B
This
is
my
command,
so
all
I
have
to
do
is
call
MK
bond
simple
in
your
executable
OH.
The
name
gives
your
command.
Now,
the
two
secondary
libraries
are
captive.
The
fact
that
this
is
a
library
that
is
using
native
API,
so
it's
actually
is
a
complicated
command,
and
so
so
this
is
using
the
xamarin
Mac
api's
and
you
can
see
that
it
embeds
and
produces
this
fat
big
fat
executable,
which
is
almost
ten
megabytes
paying.
You
can
see
it
at
the
end.
So
what
is
nice
is
that
this
is
a
executable.
B
You
can
copy
this
file
and
give
it
to
your
friends,
family
responses
or
kids,
and
they
don't
need
to
install
mono.
They
don't
need
to
stall
dotnet.
This
is
a
self-contained
executable.
Now
we're
taking
this
to
the
next
step,
and
we
said
well,
you
know
your
daughter
has
a
Raspberry
Pi.
Well,
not
I
have
a
solution.
A
B
You
look
at
the
right
side
on
the
screen.
There's
little
pot.
That's
because
I
have
to
cut
the
output,
there's
not
enough
screen
space
to
list
off
it.
So
I
just
pasted
the
last
last
piece
which
and
all
the
the
target
and
target
room
again
I
could
have
fit
everything
in.
So
you
get
what
you
get,
and
so
what
you
have
to
do
is
first
of
all.
B
The
system
currently
has
two
targets:
the
if
writes
a
bill,
which
is
what
you
saw
in
the
previous
screen
or
demo,
was
something
I
was
testing
or
all
the
targets
that
are
available
for
download
from
our
server.
So
what
you
do
is
show
you.
The
first
line
says
hey,
tell
me
what
operating
system
I'm
on
hey
you're
on
it's
an
iMac
that
it's
running
it's
an
x86
or
machine.
B
So
the
second
line,
I
say:
hey,
go
get
me
the
target
and
I
tell
it
the
name
of
the
target
that
I
got
from
the
previous
screen.
So
in
this
case,
I
won.
I
won
a
mono
runtime
for
Ubuntu
18.04
for
arm
64
and
then
again,
I
say:
hey.
Give
me
the
list
of
targets
and
it
shows
that
I
have
it
now
installed
and
then
I
just
say:
hey
trade
me
a
cross
compiler
for
my
command
right,
so
ill
me
and
native
execute
or
for
that
platform
right.
So
that's
what
the
the
fourth
command
does.
B
And
finally
you
know
it
generates
this:
a
dog
out
executable.
That's
what
it's
saying:
that's
the
default
output
name
and
then
I
say:
hey.
Tell
me
what
this
a
dot
out.
Executable
is
right.
So
remember,
the
first
line
is
telling
me
you're
on
a
Mac,
an
x86
64
platform.
The
last
line
we
say
hey.
This
is
a
native
executable
for
an
arm.
64
write
using
the
elf
file
format,
64
bit
RK.