►
Description
00:00 Intros & learned this year
14:57 Michael Aigner shares how to develop a Raycast extension in a workshop
57:49 Opstrace announcement surprise with Seb and Mat
https://opstrace.com/blog/gitlab
https://venturebeat.com/2021/12/14/gitlab-acquires-open-source-observability-distribution-opstrace/
A
Or
number
46
the
christmas
special
or
they
like
to
learn
this
year
special
yeah
and
I
don't
know
how
to
start
exactly,
but
since
niklas
asked
for
the
session
today,
I
would
hand
it
over
to
him
and
maybe
nicholas
you
wanna
tell
us
what
have
you
learned
this
year?
What
are
you
the
most
proud
of?
B
B
I
was
thought
sometimes
my
microphone
was
now
breaking
up
and
I'm
too
lazy
to
send
it
back
yeah
and
I
learned
a
lot
of
stuff
so
the
interesting
stuff,
so
I
mostly
found
about
okay
being
remote,
mostly
for
for
a
full
year
being
also
like
a
digital,
nomad
on
part-time,
so
traveling
and
working
from
around
across
europe,
and
also
like
joining
seeing
new
communities
coming
up
contributing
something
to
captain
contributing
something
to
gitlab
in
terms
of
also
seeing
the
new
products
that
coming
up
like
with
the
package
hunter
yeah
that
I
would
say,
and
mostly
I
learned
something
about
blockchain
in
juventus
and
today
I
found
also
a
lost
blockchain
in
our
infrastructure.
B
That
should
be
also
happening,
sometimes
yeah,
and
that's
it
mostly
in
a
short
rep.
So.
D
I
can
go,
I
removed
my
background
noise,
so
you
can
go
now
yeah
for
me
to
see
it
was
also
very
special.
I
switched
my
changed
my
job
two
times
so
was
after
being
12
years
in
one
company.
Changing
two
times
was
really
hard
for
me,
but
now
I'm
really
happy
my
new
job,
and
also
I
learned
that
contributing
is
really
nice
and
I
learned
a
lot.
I
met
a
lot
of
cool
people
like
nicholas
misha
here
michelle
and
all
the
other
guys
here,
so
I
really
spent
much
time
with
them.
D
E
Then
I
will
go
so
I
learned
a
lot
this
year.
So
one
of
the
things
is:
writing
extensions
for
this
tool.
E
Recast,
learning
a
lot
new
programming
languages,
new
frameworks,
whatever
is
needed
to
build
something
also
moved
to
a
new
house
which
was
also
interesting
because
a
lot
of
stuff
was
going
on
yeah
and
also
the
sessions.
Everyone
can
contribute
sessions,
especially
always
the
rust
one.
So
it's
always
my
favorite,
because
it
takes
the
longest
time
and
yeah.
E
I'm
really
thankful
to
to
be
able
to
have
the
possibility
to
learn,
learn
so
much
new
stuff
and
also
met
so
many
cool
people
and
with
no
effort,
so
no
traveling
effort
and
yeah
this
year,
also
being
more
remotely
than
ever
also
unique
challenges,
but
generally
I
like
being
remote.
So
it's
just
adapting
so
then
I
would
enter
to
the
next
person
to
waiver.
F
Quite
a
lot
of
things
happen
this
year,
it's
difficult
to
pinpoint
specific
things
I
want
to
learn
from.
I
would
say
I
learnt
more
javascript,
because
I
had
to
write
a
couple
of
node.js
and
other
things
this
year.
Also
I've
been
playing
with
go.
I
think
michael
has
been
challenging
me
to
learn
more
of
go,
so
I've
been
playing
with
some
of
that
this
year,
also
and
yeah
learning
to
engage
more
within
the
community.
F
I
think
I've,
I'm
the
kind
of
laid-back
kind
of
person,
so
learning
to
share
more
and
engage
more
with
the
community
yeah.
I
would
say
those
are
some
of
the
things
I've
learned
this
year.
Quite
a
lot
of
things
have
happened
this
year
that
it's
difficult
to
collect
a
lot
of
them,
but
those
are
the
things
I'll
see
our
major
learnings
this
year.
G
I
guess
I
can
go
next
and
I'm
sorry
that
I'm
both
late
and
quite
distracted
right
now,
but
yeah
I'll
share,
so
we're
discussing
things
that
we've
learned
this
year
is
that
do
I
have
that
right,
michael.
G
I
think
that
the
emotional
you
know
toll
that
that's
taken
on
people
is
probably
you
know,
vastly
underestimated,
and
so
yeah
just
happy
that
we're
hopefully
getting
closer
to
the
end
of
all
this,
and
you
know
my
mental
health
is
still
mostly
intact
professionally.
I
think
you
know
it's
been
an
interesting
year.
The
team
has
grown
so
we've
added
a
couple
new
team
members
to
our
team,
and
so
that's
been
a
great
experience
for
me
and
learning
how
to
onboard
new
team
members
in
a
remote
environment.
G
When
I
joined
the
developer
evangelism
team
at
gitlab,
the
team
was
mostly
in
place
and
onboarded
already,
and
so
I
didn't
really
have
that
experience
until
this
year.
So
that's
been
a
great
learning,
experience
and
yeah.
I
think
there's
also
been
this
opportunity
to.
You
know,
learn
how
to
coach
people
that
are
performing
at
different
levels.
You
know
whether
you
know
high
performers
or
people
who
are
growing
in
their
roles.
G
I
think
there's
different
levels
of
like
coaching
and
management
and
leadership
that
those
types
of
people
need
and
so
learning
how
to
adapt.
Kind
of
my
you
know
style,
which
has
been
traditionally
hands
off
into
a
more
hands-on
approach
for
people
who
might
need
that
you
know
has
been
has
been
a
good.
You
know
thing
for
me
to
learn,
and
I
think
has
helped
me
develop
as
a
you
know,
as
a
people
leader.
A
Okay,
then
I'll
go
next.
I
think
I
have
learned
too
many
things
this
year,
but
the
thing
I'm
most
proud
of
is
that
we
have
grown
as
a
small
group,
a
small
community,
into
a
learning
life
learning
experience.
A
I
think
I
owe
you
many
many
cakes
here
are
many
cookies
for
getting
better
like
deploying
something
to
kubernetes
understanding.
Why
cloud
native
is
more
important,
these
days
being
able
to
test,
drive,
observability
and
monitoring
topics
with
you
or
just
like
throwing
in
a
topic,
and
then
someone
else
like
nicholas
philip,
michael
nico
and
everyone
else
was
just
like
yeah.
We
can
totally
do
that
michael
and
you
don't
need
to
prepare
anything.
We
do
that
for
you.
So
I
think
that's
really
amazing.
A
Thanks
for
stepping
up
and
sharing
your
expertise,
I
think
I've
finally
installed
raycast
now
and
replaced
my
alfred,
which
is
a
huge
thing.
If
you
know
me,
like
changing
habits
is
yeah
it's
difficult,
so
I'm
adopting
and
the
emoji
workflow
works
even
better
than
the
one
before
and
it's
much
more
current.
So
everything
has
been
solved
and
I'm
exploring.
What
else
is
what
else
I
can
actually
use
with
raycast?
A
I,
like
abu
bakr,
said
before.
Like
I
challenged
him
with
learning
go,
I
challenged
myself
with
learning
rust,
which
resulted
in
that
I
bought
two
books
which
I
started
reading,
but
I
haven't
written
any
code,
so
it's
still
on
my
agenda
for
the
coming
months
to
dive
a
little
bit
into
rust,
but
I
also
learned
for
myself
personally
that
I'm
often
stretching
myself
too
thin
and
I
really
need
to
like
focus
more
on
on
the
things
I'm
good
at.
A
So
I'm
really
like
trying
to
focus
on
observability,
sre,
ops
topics
and
if
I
may
learn
rust
when
riding
a
promises
exporter,
that's
totally
fine,
but
I
I
don't
force
myself
into
too
many
things
well,
except
for
like
friday
afternoon,
when
I
read
about
log4j-
and
I
was
like
oh
that's
interesting
and
then
I
I
think
I
stopped
reading
yesterday.
A
So
it
was
quite
an
intense
weekend,
but
I
also
learned
a
lot
and
yeah.
I
think
we
never
stop.
Learning
we'll
only
need
to
control
ourselves
to
not
try
to
learn
too
much
and
not
feeling
successful.
H
Sure
hi,
this
is
my
first
cafe.
This
has
been
a
really
long
year.
I
think
personally,
I've
had
to
struggle
with
like
because
I
live
alone
and
I
move
to
a
new
place
during
the
pandemic
like
how
to
feel
not
super
isolated
and
stuck
in
the
house
all
the
time.
So
you
know
making
excuses
to
go
outside
and
finding
safe
ways
to
meet
up
with
people.
I
started
like
a
remote
gaming
discord
and
I
invited
all
my
friends
and
I
was
like
I
have
to
game
once
a
week
with
all
of
you.
H
Otherwise
I'm
going
to
go
crazy
in
my
apartment
by
myself.
Sometimes
you
know
the
whole
day
passes
and
at
the
end
of
the
day,
I
laugh
out
loud
at
something
and
I'm
like.
Oh
my
god,
I
just
heard
my
voice
for
the
first
time
the
whole
day,
so
it
was
definitely
a
learning
experience
figure
out
like
what
I
need
throughout
the
year
and
throughout
the
isolation
and
then
professionally,
like
I
just
joined
git
lab,
but
I
was
doing
developer
relations
at
my
previous
role
and
everything
that
they
had.
H
Onboarded
me
on
was
physical
developer
relations.
So
like
events
and
community
engagement
and
stuff
and
all
of
a
sudden,
everything
was
remote,
and
so
it
was
a
really
big
learning
process.
For
me
who,
like
I,
was
used
to
going
to
an
office,
and
I
was
used
to
going
events
like
how
to
engage
with
people
online
and
how
to
do
live
streams
and
how
to
set
up
an
office,
and
so
it's
been
a
lot
of
learning
learning
different
types
of
skills.
This
year.
H
A
And
I'm
super
happy
that
you're
now
with
us,
I
can
totally
feel
your
energy
and
I
would
love
to
to
have
you
on
board
in
future
cafes,
which
were
changed
from
a
monthly
cadence
to
from
a
sorry
from
a
weekly
cadence
to
a
monthly
cadence
now
to
with
use
the
stress
level
a
little
more
and
just
to
make
it
more
yeah.
A
We
started
out
as
a
social
coffee
chat
to
learn
from
each
other
and
at
a
certain
point
I
think
we
made
it
too
much
more
professional
learning,
workshop
experiences
and
in
the
end
we
were
totally
stressed
out-
or
at
least
I
was
stressed
out
of
hey.
I
need
to
find
a
topic
next
week
yeah.
A
I
have
no
idea
what
should
we
do
and
from
there
we
we
just
said,
like
the
second
tuesday,
not
the
wednesday,
the
tuesday
at
9am
pt,
which
should
match
san
francisco
time
zone,
hopefully,
and
for
us
it's
like
6
p.m.
A
In
the
evening
that
works,
so
we
can
at
least
match
not
all
time
zones,
but
a
little
a
little
bit
of
of
everything
yeah,
and
I
one
of
the
things
I
thought
about
doing
today
or
sharing
today
was
I
tried
to
convince
michael
to
to
share
what
he's
building
with
raycast
and
if
everyone
agrees-
or
I
don't
know
michael
would,
would
you
like
to
share
your
screen,
or
would
you
like
to
share
what
you
have
been
building
this
past
year
with
raycast,
especially
something
around
a
gitlab
extension
which
yeah
I
have
so
tested.
A
E
Everything,
but
I
just
make
it
now
smaller.
So
just
let
me
share
my
screen
yeah.
You
should
not
see
my
screen,
so
I've
learned
this
year
and
a
little
bit
of
last
year
to
be
honest,
building,
raycast
extension
that
was
had
the
honor
to
to
be
one
of
the
alpha
developers.
So-
and
you
know
the
I
know
the
first
iteration
of
the
api-
and
I
know
the
second
iteration
and
I
like
the
second
edition,
iteration
much
more
than
the
first
one
so
yeah.
I
started
hacking,
recast,
extensions
and
yeah.
E
It
took
me
way
more
far
than
I
expected
so
over
time.
I
I
built
things
like
okay:
it
started
with
building
a
gitlab
integration
so
that
I
can
just
use
gitlab.com
from
my
from
recast
itself.
I
can
step
through
all
my
my
projects
and
can
have
my
to-do's,
my
epics,
whatever
I
need
to
have
so
gitlab.
This
one
is
the
biggest
extension
I've
built
for
raycast.
E
I
use
I
automate
my
home
with
home
assistant,
so
I
can
fully
control
my
house
with
raycast
so
from
my
key
light
here
to
whatever
I
want
to
have,
I
can
go
in
and
control
everything
from
sensors
to
whatever,
and
one
thing
I've
built
was
also
pretty
funny,
because
I
was
the
first
person
who
built
the
game
right
into
raycast,
so
you
can
play
snake
in
raycast,
so
just
crash
now
it's
easier
yeah
and
there
are
a
lot
of
other
things
I
can
mention
it,
but
for
today
I
want
to
share
a
little
bit
of
an
experience
how
to
build
just
a
raycast
extension,
because
for
me
it's
I've
started
writing
typescript
two
years
ago
to
building
a
small
vs
code
extension
and
normally
I
use
c
plus
plus
during
the
day.
E
So
for
me
the
javascript
world
is
not.
I
don't
use
that
regularly,
but
with
with
the
extension
system
of
raycast,
I
need
to
learn,
typescript
and
I'll
need
to
learn
react.
So
I
don't
know
anything
about
react
before
I
started
with
that.
So
I
just
started,
and
obviously
I
started
with
the
gitlab
integration
was
a
little
bit
big
for
for
for
for
the
mission.
E
What
I
want
to
build,
because
starting
with
one
command,
is
much
easier
than
starting
with
16
commands,
but
yeah,
and
today
we
want
to
share
a
little
bit
of
how
you
can
build
your
own
request
extension
because
it's
pretty
easy,
so
you
need
to
learn
a
little
bit
of
typescript.
You
need
to
learn
a
little
bit
of
react,
but
in
the
end,
it's
when
you
understand
the
principles
you
will
see
it's
pretty
easy
to
do
so
today.
E
I
want
to
build
a
little
integration
for
the
everywhere
in
contemporary
website,
and
I
would
start
now
to
how
to
create
such
an
and
project,
and
the
cool
thing
in
request
is
raycast
test
for
every
single
command,
so
obviously
for
building
a
new
extension.
They
have
a
command
create
extension.
E
So
quite
obvious,
and
the
only
thing
you
can
fill
in
the
whole
form,
but
the
the
most
important
thing
is
the
name:
the
package
as
a
extension
name,
which
is
package
name,
I
just
use
ecc
for
everyone-
can
contribute
just
the
short
one
which
niklas
told
me.
It's
the
better
one
and
you
can
add
a
description
if
you
like,
and
then
you
can
add,
of
course
the
folder.
E
You
want
to
scaffold
the
whole
data
set
and
one
side
note
if
you
want
to
release
it
to
the
store,
you
need
to
fork
the
original
repository
and
make
it
a
fork
of
that
and
make
a
pr
and
make
a
pull
request.
But
you
can
obviously
you
can
use
it
for
your
own
purpose.
Whatever
you
need
to
want
to
build,
just
launch
it
and
it
works,
then
you
can
choose
a
template.
I
they
go
with
blank
because
I
always
start
from
a
blank
template
and
then
you
can
hit
one
on
it.
E
E
E
A
fully
working
raycast
extension
fully
working
in
in
the
sense
of
the
manifest
and
what
you
need,
but
we
need
to
add
some
content.
So
I
will
do
this
in
a
second
just
open,
my
terminal.
So
it's
the
request.
Extensions
are
built
on
regular
node.js
ecosystem,
so
you
can
use
it's
built
on
nodejs
it.
You
can
use
nearly
every
node.js
package,
the
exception
right
now.
E
So
this
looks
pretty
familiar
to
somebody
who
writes
nokias
so,
but
there
are
some
extra
elements
there.
There
are
a
lot
of
small
yeah,
the
prettier
style
things.
The
linter
is
already
pre-configured
and
all
this
kind
of
stuff-
and
you
have
only
two
folders,
so
you
have
the
asset
folder
where
the
assets
go.
So
your
images
most
of
the
time
and
you
have
your
source
folder,
and
this
is
a
pretty
important
one,
because
raycast
has
in
the
manifest
this
command
section,
and
here
you
can
type
in.
E
What's
the
name
of
the
command
name
of
the
command,
the
title,
which
is
just
a
nice
name
which
is
shown
in
raycast,
you
can
add
a
description
if
you
like
and
which
mode
is,
which
is
most
of
the
time
view
you
can
say
no
view.
So
when
you
have
a
command
when
you
just
want
to
open
a
website
directly
with
your
command,
you
don't
need
an
extra
view
to
open
that.
This
is
just
that.
E
So
this
needs
to
be
synchronized,
so
the
name
here
needs
to
be
the
same
name
as
the
source
folder
here
without
the
tsx
extension.
Obviously,
so,
if
you
add
a
second
command
just
make
sure
that
the
name
matches
one
of
the
typescript
files
in
the
source,
folder,
that's
the
most
important
step.
You
need
to
know
so,
and
I
have
just
my
package
stuff.
So
let's
call
this.
E
Everyone
can
contribute
so
that
we
have
a
command
and,
let's
start
with
writing
some
typescript.
So
this
is
using
react
and
react
is
using
jsx
and
typescript
version
of
jsx
is
tsx,
so
typescript
react
so
just
as
a
small
example
of
how
to
start
with
all
this
stuff.
So,
first
of
all,
it's
a
nodejs
project,
so
npm
install
or
I
think
yarn
is
also
working,
but
when
you
want
to
put
it
on
the
store,
I
see
you
need
to
use
npm.
E
E
Only
use
one
yeah,
it's
only
one.
I
I'm
not
quite
sure.
I
think
you
can
use
yarn,
but
I
think
in
the
store
it's
always
used
npm,
so
it
shouldn't
matter,
but
maybe
there
are
some
issues
or
something
like
that.
So
let's
remove
that
and
now
I
installed
my
my
stuff.
So
the
first
thing
you
need
to
do
is
there
are
two
commands
pre-build.
E
This
is
npm
run
dev,
so
it's
the
normal
run
description,
but
it's
pre-filled
and
when
you
press
run
def
it's
starting
the
the
automatic
system
and
then
you
can
for
the
first
time
see.
Okay,
we
are
now
in
development
mode,
and
this
is
the
command
we
obviously
right
now
want
to
build.
But
obviously
there
is
no
code
in
it.
So
there
is
nothing.
We
can
start
right
now,
but
that's
the
way.
So
when
you
want
to
change
the
name,
just
go
here,
change
the
name
and
it
changes
its
name
or,
for
example,
also
as
well.
E
So,
let's
start
with
writing
some
some
typescript.
So
a
little
bit
of
introduction
to
react.
A
little
bit
yeah
so
react
on,
and
specifically
here
are
using
react
hooks.
Not
the
react
where
you
have
the
classes,
so
I
just
use
the
hooks
and
the
rake
hook
is
more
or
less
call
back
system.
So
you
just
use
functions
to
declare
something
and
it's
a
functional
approach
to
to
write
your
code
and
to
be
to
be
able
to
have
your
starting
component.
E
You
need
to
export,
obviously
the
function,
otherwise
it's
not
contactable
for
the
outside
and
you
need
to
export
it
as
a
default
one.
So
raycast
will
take
care
of
the
rest.
So
let's
call
this
ecc
list,
for
example,
or
something
like
that.
E
A
E
To
specify
that
this
enchanted
gsx
element,
but
it's
recommended
to
do
so
because
lin
the
linter
will
say
you
need
to
define
types
and
then
I
can
just
say
for
example,
I
return
now
a
list
element
and
what
you
can
see
is
that
it
already
scaffold
all
my
stuff.
So
I
forgot
one
thing
to
mention:
this
is
function.
Obviously,
and
this
is
the
first
working
version
of.
E
The
first
picking
version
of
a
functionalist,
so
we
should
now
have
a
list,
but
it's
empty
because
we
just
list,
but
it's
simple
as
that,
having
a
function
export
it
as
default,
make
it
a
gsx
element
and
use
just
the
react
elements
which
are
provided
by
recast
itself
so,
and
there
is
one
difference
which
most
people
who
already
know
react
struggled
with
it,
the
first
time
raycast
using
react,
not
react
dom
so
if
using
the
whole
declarative
tree
so
the
whole
state
management
and
this
all
kind
of
stuff.
E
But
it
does
not
give
you
a
free
access,
how
you
arrange
your
elements
on
the
display.
This
is
completely
different.
It's
not
the
browser-based
system,
it's
completely
native,
so
you
have
to
use
the
elements
which
you
get
provided
by
raycast
itself.
So
you
cannot
have
extra
elements
or
there's
no
really
really.
E
Generic
element
like
a
diff
container,
for
example,
or
something
like
that,
so
that
where
the
listing
element
is
coming
from
and
quite
obviously
we
want
to,
we
want
to
add
some
content
for
the
list
and
for
that
is
the
list
item
not
hard
to
guess
and
let's
give
it
a
title,
because
we
need
to
give
it
and
say:
let's
call
it:
let's
call
it
because
we
now
sum
up
who
is
in
everyone
contributes
and,
as
you
can
see,
it's
already
shown
me
he
is
on
the
list.
E
So
there
are
multiple
things
you
can
do
with
raycaster
just
make
a
small
portion
of
touching
a
small
portion
of
that.
So
you
can
have
a
subtitle,
so
mickey
lives
in
germany.
So
let's
say
we
live
in
germany
and
the
subtitle
is
the
the
one
small
one.
Next
to
that,
and
it's
a
little
bit
of
gray,
it's
not
white
and
you
can
have
an
ssr
title
as
well
as
an
icon.
I
just
now
use
that
icon
and
he
works
at
gitlab.
E
So,
as
you
can
see
in
germany
works
with
gitlab,
pretty
simple,
not
hard
to
do
and,
as
you
can
see,
we're
just
writing
seven
eight
lines
of
code
and
we
have
a
fully
working
extension
in
recast.
E
E
It's
now
your
own
company,
so,
as
you
can
see
it,
it's
pretty
easy
to
add
data
to
that,
and
it's
really
intuitive,
because
you
can
that's
the
beauty
of
being.
I
want
to
call
my
format
command,
not
my
not
my
terminal
command
and,
as
you
can
see,
it's
pretty
easy
to
have
data,
but
obviously
it
would
be
great
when
we
can
search
it
and
by
default.
Raycasts
gives
you
a
search.
E
So
when
I
type
my
key
order
me,
it
will
automatically
search
for
the
stuff,
but
the
problem
is
it
just
do
this
for
the
main
title,
not
for
the
subtitles.
So
when
I
type
germany
it
gives
me
nothing,
but
there
is
no
mesh.
So
how
can
we
add
a
data
set
and
how
we
can
add
search
for
that
so
and
typically,
what
what
the
using
in
react
as
well
in
raycast
is
some
kind
of
hook
and
hook
is
just
a
function.
E
So
I
called
just
called
now
use
data,
it's
pretty
obvious
that
it
always
starts
with
use,
but
I
think
it's
a
more
convenient
thing:
it's
not
it
don't
need
to
be
named
usage,
just
a
function
and
let's
say
we
want
to
return
something
and
we
want
to
return
some
data
and
obviously
we
need
to
define
an
interface
for
that.
So
just
a
class
but
interface
adjustment
is
in
any
programming
language,
just
a
contract
and
not
the
full
object.
E
E
So
now
we
have
our
full
interface
for
our
data
set
and
what
we
want
to
do
with
this
hook.
We
want
to
return
some
data
and
this
should
be
of
type
later
and
we
want
to
return
a
list
of
that
or
undefined.
This
is
typical,
javascript
thing.
So
undefined
means
it's
not
there.
It's
it's
it's!
The
definition
of
you
can
set
something
to
undefined,
but
you
can,
when
a
variable
was
not
there,
for
example,
in
the
json,
it's
also
undefined.
E
So
that's
the
difference
between
undefined
and
now
now
it's
a
specific
element,
which
is
also
in
any
data
set
undefined
means
it's
not
there
so
and
now
we're
touching
for
the
first
time
really
what
react
is
doing
so
we
need
a
state
management
system.
So
what
right
now
is?
I
use
the
built-in
state,
u-state
and
u-state
is
here
to
keep
our
state
alive,
so
it's
functional.
So
when
the
function
runs,
where
does
our
state
live
because
the
function
closes
and
this
the
variable
will
go
away?
E
This
is
where
this
whole
hoop
system
comes
in,
and
the
pre-built
use
state
is
for
the
first
time
it's
entered
that
it
will
and
give
it
the
value
you
give
it
here
and
the
second
time
it
run
on
this
function.
It
know
that
it
or
it's
already
initialized
and
would
not
set
this
value
again
and
only
listen.
When
somebody
use
the
setter
we
get
back
from
the
hook.
E
So
then
we
can.
We
need
something
else,
so
this
is
called
use
effect.
This
is
an
you
can
you
can
write
in
the
documentation
it's
using,
it's
be
used
for,
for
when
the
component
has
the
side
effects.
Somebody
change
something
you
need
to
put
some
code
there
where
something
should
be
changed,
because
otherwise
we
would
end
up
in
an
infinite
loop.
E
So
I
just
now
write
my
my
use
effect
and
everything
here
would
be
called
every
time
when
somebody
changes
the
state
every
time.
So
let's
go
with
a
fixture,
but
let's
return
for
that.
We
fulfill
our
contract
just
return
the
data,
so
we
get
back
here.
So,
in
the
first
time
it's
the
element
is
data
array
or
undefined,
because
we
don't
give
it.
We
can
obviously
can
give
it
an
empty
array.
Then
it's
just
later
because
we
initialize
it
with
something
and
then
just
return
it.
C
E
E
So
and
then
we
have
our
fixture
set
and
then
we
just
want
to
set
the
data.
So,
as
I
said
first
time,
it
initializes
is
the
value
you
give
it
here
and
ever
after
that,
this
only
change
when
you
use
the
set
that
you
get
back.
So
what
I've
do
here
is
just
set
the
data
and
give
it
the
fixture.
Only
then.
E
C
E
Not
forget
this
is
a
functional
system,
so
this
is
not
so
we
need
to
return
a
function
and
it's
now
just
empty.
The
only
thing
is
when
this
component
will
be
removed
from
the
view
it
will
be
unmounted
as
it's
called
in
react,
and
then
this
function
will
be
called.
This
is
here
it's
more
when
you
know
a
classical
class
system,
we
have
a
construct
and
a
data
structure.
This
would
be
the
d
structure.
E
So
hopefully
I've
have
no
typos
in
it.
Then
we
have
now
a
working
book
system
and
then
we
can
use
our
hook
just
here
and
tell
the
system:
hey.
Okay,
I
only
have
my
data
as
I
passed
in
here
above
and
then
I
just
use
the
data,
that's
it
so
and
then
we
can
check
the
console.
E
But
yeah,
as
you
can
see,
oh
my
god,
it's
it
makes
an
infinity
loop.
So
why
is
that?
The
reason
for
that
is
use
effect
needs
to
know
when
it
needs
to
change
something,
so
it
needs
some
kind
of
dependency.
So
the
easiest
thing
you
can
do.
The
second
argument
is:
give
it
an
empty
array.
E
Now
you
can
see
just
spinning,
but
nothing
is
changing.
Nothing
is
in
the
console
right
now.
So
this
is
the
m
theory.
So
when
we
have
something
we
want
to
react
to
so,
for
example,
we
have
a
search
string
and
and
this
changes
and
then
we
want
to
say,
okay,
the
use
effect
should
now
restart.
Then
we
need
to
add
the
variables
here
and
you
will
see
it
in
a
minute
how
we
can
use
that.
E
We
need
to
to
use
our
data
set
here,
so
that's
typical,
typescript
jsx
stuff
right
now,
so
I
just
use
my
my
data
block
and
I
map
make
function
and
say:
okay,
give
me
my
value,
we
can
call
it
db
whatever
you
want
to
call
it,
and
we
can
return
a
list
element
of
type
item
where
the
title
is
and
then
special
so
in
when
you
want
to
give
it
a
variable,
some
kind
of
dynamic
code.
You
have
to
use
the
curly
parenthesis
and
then
we
just
say
yeah
give
it
the
name
as
before.
E
Then
we
give
it
as
a
subtitle.
We
give
it
the
location,
so
we
location
and
as
an
asset.
E
E
So,
as
you
can
see
same
thing,
but
now
we're
using
and
react
and
hook
to
get
out
here
and
why
we're
using
this
hook
is
pretty
easy
to
explain
is
we
want
to
react
to
changes,
and
one
of
the
things
which
you
do
mostly
in
in
recast
is
typing
something
and
search
text
changes.
So
what
we
want
to
do
is
I
want
to
search
also
by
company
by
the
location
and
by
the
name,
so
that
for
that
case,
we
need
to
pass
in
some
data.
E
Let's
give
it
a
string,
so
then
we
pass
to
our
hook,
which
has
our
string,
which
could
be
undefined
or
a
string.
Then
we
can
do
something
here
in
in
the
code
and
filter
that.
So
to
keep
this
thing
easy,
you
can
use
every
javascript
library
for
field
doing
whatever
you
want.
I
just
now
use
the
include
statement
in
the
string
to
to
have
some
some
information
or
filter
some
information
there.
E
C
E
Else,
so
if,
if
somebody
has
some
some
data
on
filter,
then
we
need
to
filter
group
before
so.
I
now
make
the
search
case
insensitive.
You
can
use
everything.
E
I
E
E
C
E
Oh
obviously,
as
the
previous
previous
said,
this
use
effect
only
starts
when
you
give
it
a
dependency,
but
it
has
no
dependency.
So
when
we
type
something
in
the
use
effect
is
never
triggered,
because
we
don't
know
that
it
should
react
on
the
change
in
the
search
term.
So
hopefully
no
democrats
are
not
good
to
me.
H
E
So
there
is
an
on
search
text
changed
and
then
we
just
give
it
the
search
function
and
it
will
be
called
when
raycast
changes
the
value.
So,
let's
see
if
it's
not
working
yeah,
now
it's
working
so
what's
happening.
Is
I
passed
this
state
setter
to
this
function
and
every
time
you
type
something
in
this
setup
will
be
called.
Then
this
goes
out
of
date
and
the
element
knows
okay.
This
component
needs
to
be
re-rendered
and
render
everything
through
because
we
passed
search
variable
to
to
our
hook
and
they
said,
there's
a
dependency.
E
We
make
sure
that
every
time
use
effect
is
called
when
the
search
term
has
changed.
So
that's
that
we
get
to
the
point
that
we
can
now
search
for
mihi
as
well
as,
for
example,
those
now
working
so
but
come
to
the
last
part.
There
is,
obviously
we
have
just
a
fixture
and
would
be
would
be
not
that
practical
to
just
have
the
fixtures
in
most
cases.
E
E
E
E
C
E
E
Is
only
your
contract
matching
the
whole
stuff,
so
I
just
now
skipped
the
whole
search
part
because
I
can
use
because
I
use
the
title
I
can
just
use
the
default
one.
So
let's
remove
that.
C
E
E
E
E
So
what
then
I'll
do
is
just
checking
stuff.
So
the
first
thing
you
need
to
know
is
there
is
this,
as
explained
when
you
have
asynchronous
function,
you
have
this
unmount
a
situation,
so
it
could
be
that
your
asynchronous
function
is
running
and
the
user
stops
the
whole
system
so,
and
this
is
called
unmount
so
just
one
add
a
variable
which
is
called
pretty
easy,
so
it's
did
unmount
its.
The
variable.
E
E
E
E
Just
pass
it
in
and
everything
when
everything
works
correctly,
we
have
here
a
news
feed.
So
let's
check,
if
it's
working
with
the
console
sync
so
and
right
now,
we
need
to
make
sure
that
we
displayed
it
as
well.
So
we
have
a
new
data
set,
so
just
switching
to
showing
the
the
title
don't
need
the
subtitle
right
now.
E
E
So
if
we
have
some
items
in
our
feed,
we
want
to
now
just
grab
the
data
we
need.
It's.
You
can
pass
the
the
object
to
your
system.
I
typically
do
wrap
it
manually
to
make
sure
if
something
changed
or
something
like
that,
that
it's
aware
of
that
and
that
I
also
have
a
typed
system
and
making
sure
that
the
content
is
like
the
shape
of
the
of
the
whole
class
of
the
whole
interfaces.
E
So
just
creating
now,
my
stuff
again
so
just.
F
E
Empty
just
make
sure
that
that
my
data
is
stable
enough,
that
I
don't
get
you
call
them
something
from
undefined,
which
is
not
unusual
in
javascript.
So.
C
E
E
So
then
we
have
our
object,
and
after
that
we
have
now
a
fully
working
data
set
and
I'd
now
say.
At
the
same
time,
we
need
to
check
if
it's
it
isn't
unmounted,
because
it's
asynchronous,
so
it
could
happen
anytime.
So
checking
this
before
setting
the
state
is
always
a
good
idea,
and
then
we
just
that's.
C
E
So
in
that
way
we
should
have
a
working
system.
So
the
only
thing
which
is
left
is
what
we
do
when
we
get
an
error
and
in
recast
there's
this
thing
called
show
toast.
There
are
two
ways
to
show
something,
but
toast
is
obvious:
when
is
usual
when
you,
when,
when
the
raycast
wind
is
opened,
so
we
need
to
toast
style.
E
It
and
then
we
say:
okay,
if
the
error,
because
since
the
new
version
of
typescript,
this
is
not
any
it's
type
unknown
and
then
we
need
to
check
the
type
explicitly.
So
let's
say
if
this
is
an
instance
of
error,
then
we
want
to
error
the
message,
for
example,.
E
E
See
it
now
fetched
the
whole
data
set
and
so
two
last
points.
One
is,
as
you
can
see,
it's
just
waiting
and
tell
you
no
result
and
then
it
pops
back.
So
the
reason
for
that
is,
there's
an
is
loading
property
and
now
the
easiest
way
is
just.
E
Is
it
loading
here
when
there
is
no
data,
then
you
get
this
nice
progress
bar
and
it
just
gives
you
the
results
when
it's
there,
the
only
thing
which
is
left
now
is
we
want
to
do
something
with
the
data,
so
just
create
a
component
which
is
just
an
action
so
open.
C
E
E
E
E
C
A
The
way
thanks
thanks
a
lot
for
all
the
insights
in
the
learning
curve.
I
would
encourage
everyone
to
try
it
out.
The
reason
why
I
said
I
have
something
to
share,
or
it's
not
me
something
to
share
this
year.
In
april,
we
had
a
special
everyone
can
contribute
cafe,
and
we
learned
about
observability,
specifically
around
ops,
trace
and
sebastian
and
matt
have
joined
the
session
today
and
one
yeah.
I
want
to
share
something
with
the
group
sebastian.
The
scepter
want
to
go
ahead.
J
Sure
hi
yeah,
I
mean
it's
public
now
we've
joined
skit
lab,
so
the
entire
team
and
the
technology
and
everything
has
joined
git
lab.
I
should
have
updated
my
zoom
during
the
onboarding
to
show
that
I'm
now
a
product
manager
for
this
team
matt
did
it
right,
yeah
and
we're
very
excited
to
be
here.
J
Gitlab
has
always
been
a
huge
inspiration
for
us
in
terms
of
how
a
company
builds
great
open
source
projects
becomes
successful
at
it
and
also
creates
an
amazing
culture
of
not
just
remote
work
but
like
everybody
working
together.
So
we're
excited
and
thank
you
very
much
I'll.
Let
matt
talk
a
bit
as
well.
Maybe
he
wants
to
share
a
few
things.
I
Yeah,
hey
everyone
super
excited
to
be
here.
This
is
a
big
moment
for
us,
and
you
know
right
from
the
get-go.
We
we
modeled
a
lot
of
what
we've
been
doing
based
on.
You
know
the
good
work
that
everybody
been
doing
at
get
lab
and
for
us
you
know
being
able
to
come
together
and
start.
You
know,
learning
from
get
lab
very
early
on
we're
very
lucky
that
you
know
we
had
some
early
guidance
from
syd
right
back.
I
We
started
this
company
and
you
know:
we've
been
engaging
with
michael
and
you
know,
having
various
discussions
about
the
observability
space
in
general,
and
you
know
very
excited
to
you
know
realize
that
we
have
a
very
we
share
very
similar
opinions
on
the
future
of
observability
and
we're
excited
to
come
together
and
do
this
together
so
really
happy
to
be
here.
It's
a
big
day
for
us.
So
thank
you.
Gitlab
for
welcoming
welcoming
us
in.
A
Yeah
and
the
exact
reason
why
I
also
invited
you
both
was
that
I
feel
like
we,
our
small
group,
has
kind
of.
I
don't
know
if
made
it
possible,
but
in
a
way
we
have
inspired
everyone
to
join
forces
together.
Join
the
team.
J
Oh
absolutely,
it
was
a
great
chat.
I
remember
you
reaching
out
and
proposing
that
we
come
on
and
it
was
in
april
I
was.
I
was
on
my
laptop
on
top
of
a
bunk
bed.
We
were
having
very
cool
discussions
and
I
remember
we
did
a
demo
and
we
had
a
lot
of.
We
shared
a
lot
of
what
we
were
building
and
everything.
So
there
it
is
yeah,
that's
the
link
to
to
it's
an
hour
and
a
half.
J
A
lot
of
things
have
changed
in
the
product
since,
by
the
way,
we've
added
a
lot
of
things
and
a
lot
of
things
will
still
change
right
like
and
there's
a
lot
to
be
built,
but
it
was
a
very
cool
time
and
it
really
felt
like
a
friendly
chat.
All
of
us
together,
right,
like
we
were
sitting
there
and
just
discussing,
and
it's
great
that
these
things
can
expire
more.
A
That's
true
nicholas:
are
you
speechless
yeah.
B
B
You
probably
should
try
it
again
up
straight
or
we
should
start
and
now
I
think
we
wait
a
little
bit
and
then
we're
moving
directly
because
we're
using
the
blip
also
in
the
company,
but
then
we're
also
switching
to
the
full,
also
probably
up
stress
in
the
end,
so
to
have
it
like
everything,
build
it
in
and
that's
like
really
awesome,
because
I
really
like
the
approach-
and
I
think
the
observability
space
is
like
a
big
space
where
you
can
get
a
lot
of
interesting
points
and
mostly
what's
also
interesting
for
a
lot
of
people
is
probably
also
apm,
so
application
monitoring
and
also
like
that.
B
B
If
you
want
to
go
like
also
for
upstrease
approach,
there
are
a
lot
of
many
out
of
that,
and
I
hope
in
the
end,
what
would
give
it
us
is
like
an
easy
setup.
I
can
click
it
on
my
gitlab
and
then
I
have
it
mostly
instead
of
like
doing
overconfiguring
stuff
in
a
most
secure
and
compliant
way,
so
also
for
company
needs
in,
like
probably
bigger.
B
B
It
was
a
vikram
yeah
and
now
hopefully
we
can
see
like
in
the
next
meet
up.
So
if
you
can
present
your
progress
in
terms
of
the
integration
of
gitlab
and
what
the
product
has
moved
on,
because
I
think
there
are
a
lot
of
changes
because
we
were
in
the
everlating
phase
for
two
weeks
ago.
I
looked
into
that
and
I
see
okay,
a
lot
of
stuff
has
changed
since
we
met
us
in
april.
That's!
Okay!
B
Probably
it's
like
you
know
our
dollars
a
little
bit
too
tight
into
that
in
the
internal
company,
but
I
really
opened
to
look
again
into
that
and
see
okay,
that
no
more
changes
are
coming
to
this
and
also
gives
you
like
a
place
where
you
can
also
evolve
more
and
having
like,
also
a
really
good
community.
In
the
end,
that's
yeah.
J
For
sure,
like
we'll,
definitely
use
the
space
to
to
demo,
frequently
and
often
as
much
as
michael
and
everybody
lets
us.
B
J
B
A
Awesome,
I
think
we
can
develop,
maybe
observability
office
hours
or
observability
cafe,
or
something
like
that
or
ops
trace
coffee
I'd.
I
don't
know
we,
we
will
figure
our
format
out,
figure
out
a
format
and
we
have
zoom.
We
have
youtube.
We
have
like
basically
everything
which
which
enables
us
to
to
build
the
community,
make
it
stronger
in
the
future
we've
also.
This
is
something
I
forgot
to
share.
We
do
have
now
an
observability
category
on
our
gitlab
community
forum.
A
Just
quickly
share
my
screen,
so
you
can
see
what
I
mean
and
sap.
You
will
say
that,
often
when
you
work
at
gitlab,
let
me
quickly
share
my
screen
just
kidding,
so
we
do
have
like
the
faq,
which
is
public
over
here,
but
in
the
end,
we're
trying
to
make
a
place
where
everyone
can
contribute,
of
course,
and
also
discuss
observability
of
strays,
monitoring,
questions,
metrics
questions
and
also
ensure
that
we're
building
something
which
our
users
want:
users
and
customers
and
yeah
trend.
A
The
conversation
here
and
also
do
live
demos
and
and
other
things.
I
could
talk
about
observability
like
the
whole
month
and
that's
not
a
problem
but
yeah.
We
are
we're
all
super
excited
and
I
think
this
is
like
the
best
day
in
my
life,
I
would
say
at
least
thus
far
welcoming
sapp
and
the
team
to
gitlab.
A
Yeah
with
that
go
celebrate,
go
scream,
scream
it
out
loud,
open
the
window
or
wherever
you
are
and
and
spread
the
word
that
the
devops
platform
is
enabling
observability
marketing
message.
A
It's
exciting,
I
probably
cannot
sleep
today,
but
I
don't
care.
A
And
everything
around
repositories
and
migrations
and
plans,
and
so
on,
will
be
announced
in
the
future.
So
I
would
recommend
yeah
using
the
obvious
channel-
or
I
shouldn't
say
obvious,
using
twitter,
using
the
forum
using
the
blog
everything
or
just
just
ping.
Our
personal
accounts
on
social
media
that
also
works.
J
Exactly
and
we've
already
started
migrating
the
repository
to
gitlab.
So
when
you
go
to
the
old
repository,
there's
a
link,
so
things
should
happen.
Naturally,.
A
Definitely
is
there
anything
else
left
any
any
special
moments,
except
for
shout
out
to
tomorrow
for
doing
the
amazing
rakehouse
demo,
which
shouldn't
be
shouldn't,
be
pushed
away
by
the
other
amazing
announcement
now
yeah.
I
I
I
A
Okay,
then,
I
would
say
thanks
a
lot
everyone
for
joining
today
and
the
amazing
things
we
learned
this
past
year
and
also
today,
even
more
and
with
that,
I
would
just
say,
bye,
bye
on
youtube,
see
you
next
year,
all
the
best
and
yeah
looking
forward
to
learn
new
things
next
year.