0:00:25
welcome back everyone welcome back on to
0:00:28
another episode of build break and fix
0:00:31
where we are attempting to
0:00:34
um build uh enhancement on the current
0:00:37
open source project called scrambler.ca
0:00:40
we aim to add persistent storage to the
0:00:43
condo princess project
0:00:45
and you guys might be wondering who's
0:00:46
this new face here um i'd like to
0:00:50
sam is the president of the rmit
0:00:52
programming club um
0:00:54
i essentially met him at uni and i we
0:00:56
thought it would be a good idea to
0:00:58
uh bring up up here on the stream and
0:01:01
talk about his experiences so sam do you
0:01:03
want to introduce yourself
0:01:06
um i'm sam nolan as i has been
0:01:08
introduced in the president of the rmit
0:01:09
programming club um i've been around the
0:01:12
club space uh ever since i came to uni
0:01:15
um so that's been four years and i'm
0:01:20
my interests mainly revolve around a
0:01:23
functional programming
0:01:25
type systems and ensuring the
0:01:26
correctness of systems but then it also
0:01:28
kind of strays into uh architectures
0:01:34
um and a whole lot of different little
0:01:36
subfields and areas
0:01:39
my my skills are very wide and my
0:01:42
interests wider so it's a little bit um
0:01:44
of a pain to describe but yeah
0:01:47
okay what what got you into functional
0:01:49
programming though like why that's my
0:01:56
when i started off in functional
0:01:58
programming i think it was mainly just
0:02:01
is the quest for the languages because i
0:02:03
think i originally
0:02:05
um i start you kind of learn a little
0:02:07
bit of functional programming but i
0:02:08
really know it's functional programming
0:02:10
um when you go going to javascript and
0:02:12
python but with when you start with the
0:02:14
quest of the languages it's like oh
0:02:16
haskell's a really tough language and
0:02:17
i'm like oh really is it now and then
0:02:19
you start haskell and you realize that
0:02:21
like the haskell tutorials have like
0:02:24
part one is hello world and it's like
0:02:26
what in the world what are you doing for
0:02:27
the first eight chapters um so it's
0:02:31
it's it's pretty hard stuff um
0:02:34
but eventually when you you bang your
0:02:36
head at it for long enough you
0:02:38
eventually um you've got a new language
0:02:45
and i'm pretty close
0:02:48
i think i originally used it to build
0:02:50
little command line applications like i
0:02:51
tried to make a projectional editor you
0:02:53
know at one point um but then eventually
0:02:56
i just use it for for general purpose
0:02:58
programming because it's such a
0:02:59
fantastic language
0:03:00
for other people that are not so aware
0:03:03
it's definitely worth worth banging your
0:03:04
head up against for for a month or so
0:03:07
because it just changes the way you
0:03:08
think about programming in general
0:03:12
but why only has although like there are
0:03:14
other functional programming lines which
0:03:16
are like kind of as good as haskell i
0:03:18
don't want to step on any toes but
0:03:21
i mean like go ahead what what are some
0:03:24
functional programming languages that
0:03:25
are as good as high school
0:03:29
there are a lot of them um i mean
0:03:32
there's like my my i would list
0:03:37
and then you have like oh camel which i
0:03:38
think is the a slightly more
0:03:41
maybe popular than haskell but i'm not
0:03:42
even sure about that um and then there's
0:03:44
what like the the theater improvers
0:03:46
which is like idris aghda
0:03:51
um but i think that honestly if you're
0:03:53
going to functional programming haskell
0:03:56
the the first one that you want to go to
0:03:59
right yeah but yeah
0:04:01
do you want to give our viewers a bit of
0:04:03
um what exactly is functional
0:04:05
programming well how is it different
0:04:08
scripting languages
0:04:13
let's go for the rant um it's been a
0:04:15
while since i've been able to
0:04:19
functional programming
0:04:26
so yeah functional programming to to
0:04:28
really hook you onto it um
0:04:31
i i it's impossible to describe because
0:04:33
uh there's so many different concepts
0:04:35
that makes functional programming
0:04:37
different from normal programming and
0:04:38
one of the first times is when you come
0:04:40
to functional programming and you
0:04:41
explain functional programming to
0:04:42
someone they're like oh but don't we
0:04:44
have object orientated programming and
0:04:46
they they i think they click they get
0:04:48
confused with the concept of a
0:04:49
functional programming language in a
0:04:50
procedural programming language so
0:04:52
before going further c is not a
0:04:54
functional programming language it's a
0:04:55
procedural programming language and when
0:04:58
i say functional programming language
0:05:00
i'm talking about haskell o camel ml the
0:05:04
uh the theorem provers that i named like
0:05:06
idris ogden isabel
0:05:11
think you know a functional programming
0:05:12
language that isn't one of those
0:05:14
it's probably not a functional
0:05:16
programming language um it's probably
0:05:18
not something you've experienced and my
0:05:19
gosh you've got quite the opportunity
0:05:21
obviously if you just spend a little bit
0:05:25
but the main thing with functional
0:05:26
programming languages and the things
0:05:27
that make them absolutely wonderful and
0:05:28
you're going to make it's going to be
0:05:30
very hard to believe
0:05:31
um yes c is imperative 100
0:05:34
um c is an imperative language and that
0:05:38
functional languages are different
0:05:40
um on the level of being imperative
0:05:42
versus yet functional
0:05:44
and yeah so most languages you've worked
0:05:46
with are probably imperative um with
0:05:48
these languages being functional
0:05:51
what the the great selling point of
0:05:53
functional languages is that there's
0:05:54
this magical thing with functional
0:05:56
languages whereas when you code with the
0:05:58
functional language
0:06:00
usually the first time it compiles it
0:06:04
operates and works correctly
0:06:07
there's this magical feeling that you
0:06:09
normally get in other languages where
0:06:10
it's like oh yes you know first time
0:06:12
well that's not that magical in
0:06:13
functional programming languages because
0:06:15
it just always works first time um but
0:06:17
all the vast majority of the time
0:06:20
and the features that allow
0:06:23
functional programming programming
0:06:25
languages to do that
0:06:27
are quite manifold
0:06:28
but one particular one is that they are
0:06:33
very strong on type systems
0:06:35
so for instance you know you'd have like
0:06:40
although you can have strict um let's
0:06:43
you can have dynamically tight
0:06:45
functional programming languages but
0:06:46
they're rare i don't think i can name
0:06:47
any of the top of my head um but
0:06:50
yeah usually they're very strongly typed
0:06:53
which means that you know you have like
0:06:55
python which is not type java which is
0:06:57
slightly more typed haskell o camel uh
0:07:00
further typed than that and the stuff
0:07:01
that i'm doing my honest thesis on which
0:07:03
is about idris and isabel or even
0:07:05
further type than that and that just
0:07:06
means that it's impossible to get your
0:07:08
compute program to compile and for it to
0:07:11
um but then there's a whole lot of other
0:07:12
features about like the way that you
0:07:14
think about and write programs that make
0:07:16
just a functional programming language
0:07:18
both impossible to describe and
0:07:19
absolutely fantastic at the same time
0:07:22
i mean i could go through some of those
0:07:25
i mean you kind of just have to try it
0:07:28
yeah for sure but yeah i kind of like
0:07:30
the fact that like fps are really
0:07:33
concise and still they retain a lot of
0:07:35
their semantics but how do you how do
0:07:37
you feel about these kind of languages
0:07:39
being used in the industry because
0:07:41
they're not heavily encouraged but i
0:07:43
know a lot of i know some places that
0:07:46
haskell is being um developed in
0:07:48
production as well so how do you feel
0:07:56
when you're doing these types of
0:07:57
trade-offs like okay um
0:07:59
for a little bit of context uh my
0:08:03
is actually on trying to
0:08:06
diagnose problems with the usability of
0:08:08
what we call interactive theory
0:08:09
improvers fees in industry um
0:08:13
um i've been i'm talking about
0:08:15
functional programming languages which
0:08:16
are like you know haskell and ocamel and
0:08:18
what's fantastic about a functional
0:08:20
programming language and why you
0:08:21
probably should be using it in industry
0:08:24
is that as i said it's it's a lot more
0:08:27
difficult a lot more difficult to write
0:08:31
um although it is also more difficult to
0:08:33
learn and there isn't as great a tooling
0:08:37
ecosystem around it um but i still think
0:08:40
that that that change is definitely
0:08:41
worth it um a hundred percent because it
0:08:44
just removes the bugs
0:08:46
um regardless of that ecosystem but then
0:08:49
like i guess what i'm what my i'm
0:08:50
currently doing which is uh interactive
0:08:52
theorem provers which is the one step
0:08:54
over from haskell into
0:08:57
programs that you can actually prove
0:09:01
so you have some sort of formal written
0:09:02
specification about how your software
0:09:04
works and then you you write
0:09:07
into your your programming language like
0:09:09
isabel and an actual proof as to as to
0:09:12
why it works um and as you can imagine
0:09:15
these types of tools are even less
0:09:17
supported um than than haskell or camel
0:09:23
they have a they have a smaller
0:09:24
ecosystem so i guess it's it's the it's
0:09:26
the trade-off really with how difficult
0:09:29
it is to hire people
0:09:31
of those categories of who
0:09:33
have those skills um
0:09:48
yes that's because it compiles doesn't
0:09:49
mean it's valid it'll work at one time
0:09:52
this is 100 true but i think what's
0:09:54
fantastic about when you get when you go
0:09:56
down this um this like this hierarchy of
0:09:59
of of type systems is that you can
0:10:01
slowly remove different classes of
0:10:04
like um one of the apple i like that
0:10:06
you're currently doing a back end in
0:10:08
express currently uh because i built an
0:10:11
application that i call was called may
0:10:13
and i think i spent most of the time
0:10:15
fussing over type systems and how to
0:10:17
make really cool statically typed
0:10:19
architectures one thing that i was able
0:10:21
to do with a little bit of a graphql and
0:10:23
typing was that i was able to
0:10:26
completely type the interface between
0:10:28
the front and the back end which means
0:10:30
that i would get type errors anytime
0:10:32
there was a a miscon like a
0:10:35
mis-specification of the protocol of the
0:10:38
right so if there was like a field that
0:10:40
was missing that would like produce a
0:10:42
type error on one side or the other and
0:10:46
i think that yeah as you go down the
0:10:47
chain obviously yes
0:10:49
you can't get to 100 perfection um you
0:10:53
with like fear improvers but
0:10:55
it you can definitely do a go a long way
0:10:58
in val um removing
0:11:00
massive classes of errors when you go
0:11:02
down that type of hierarchy
0:11:04
yeah no that makes sense
0:11:06
then then do you have any questions to
0:11:09
yeah i just wanted to ask him i know you
0:11:14
the term interacting firm prove it i
0:11:17
haven't really heard that um would you
0:11:21
describing i think what that is and
0:11:25
yeah so um interactive theorem proof is
0:11:28
a fantastic piece of the software so the
0:11:30
general idea is that um if you were to
0:11:32
go into a university that wasn't rmit uh
0:11:34
what they'd do is that they would uh
0:11:36
they'll get you to write a computer
0:11:38
program and then they would give you a
0:11:40
pen and paper and you'd have to prove
0:11:42
loop invariants over why exactly that
0:11:43
computer program works
0:11:47
right right yeah yeah it brings about
0:11:51
the idea is that um with the uh that's
0:11:53
theorem proving so you have some sort of
0:11:55
theorem that your your code works the
0:11:57
way that you expect it does
0:11:59
um and then you with a pen and paper try
0:12:01
to provide a proof as to why that uh
0:12:05
that piece of code operates correctly
0:12:07
um theorem provers
0:12:09
try to help you find proofs for why that
0:12:12
code operates correctly
0:12:14
and those theorems are split into two
0:12:16
categories you've got automated and
0:12:19
interactive theorem provers
0:12:21
so automated theorem improvers attempt
0:12:23
to try to find a proof
0:12:24
for the the correctness of your software
0:12:32
trying to prove correctness of software
0:12:34
is an undecidable problem
0:12:36
sometimes it's it's quite a difficult
0:12:40
sometimes it doesn't terminate and it
0:12:42
requires user intuition to be able to
0:12:44
interact with the um
0:12:47
the the proof to construct um verified
0:12:50
software like for instance some of the
0:12:51
things that have been done with
0:12:53
interactive theorem brewers is they've
0:12:54
built uh fully verified micro kernels um
0:12:57
cryptographic libraries they've made um
0:13:00
they've also made a comp cert which is a
0:13:03
certified c compiler um in which
0:13:06
just yeah it's guaranteed to
0:13:08
to operate according to their
0:13:10
specification which is fantastic
0:13:14
so that's that's the type of space of
0:13:15
theorem proof is so that's i think going
0:13:17
right to the very edge of what's
0:13:19
possible with type systems and obviously
0:13:21
you shouldn't do that forever for every
0:13:22
project because otherwise you'll just
0:13:23
drive yourself into a wall
0:13:28
yeah that makes sense though
0:13:32
um talking a bit more about haskell so
0:13:38
um say that there's a problem with
0:13:40
haskell's syntax or
0:13:42
a lot of people say it's too arbitrary
0:13:44
or it's kind of traditional less and
0:13:46
i also when i was reading about it um
0:13:50
i i heard some people say that if there
0:13:52
was a combination of haskell with a
0:13:54
python syntax that would be the best
0:13:56
thing in the world
0:13:57
what do you think about that
0:14:02
i'm not 100 sure what that would look
0:14:06
i mean like there are quite a few
0:14:08
peculiarities with haskell syntax like
0:14:10
i've noticed that there are some things
0:14:12
where there are a lot of programming
0:14:14
languages that are based off haskell but
0:14:16
then fix these odd things with the
0:14:18
syntax that kind of that kind of is a
0:14:27
i mean like the the thing is with the
0:14:28
difference between functional imperative
0:14:30
one of the another main
0:14:33
is that a functional programming
0:14:34
language okay so an imperative
0:14:36
programming language when you write
0:14:37
programs you write them like they're a
0:14:42
if this while that do this then that
0:14:45
than this if that um and then they go
0:14:47
down like a series of instructions
0:14:50
in a functional programming language
0:14:52
instead of having it like a series of
0:14:55
functions it's kind of like let program
0:14:57
equals and you have an expression which
0:15:00
itself represents your program
0:15:03
in in haskell everything is an
0:15:05
expression and because everything is an
0:15:07
expression that kind of means that you
0:15:09
have syntax that looks a little bit
0:15:12
bizarre to other programmers like for
0:15:14
instance in haskell uh white space is
0:15:16
function application so if you want to
0:15:18
do like you know you call like sine of x
0:15:25
which is incredibly unusual to most
0:15:27
programmers um but it makes a lot of
0:15:29
sense when you're you're applying a lot
0:15:35
i'm not i can't really say that that's
0:15:37
i would be surprised if it was syntax
0:15:40
that was the the constraining element in
0:15:43
understanding languages like haskell um
0:15:46
i'd be more like less surprised if it
0:15:48
stuffed like i would think it'd be more
0:15:51
understanding concepts like monads and
0:15:54
how they work that that's an interesting
0:15:56
decision but i guess it was it was one
0:15:58
that they decided to go with which is
0:16:04
but i mean that's kind of the thing i've
0:16:06
heard like um haskell people are trying
0:16:09
to use haskell in a lot of security and
0:16:10
network security side of things now
0:16:15
um they're apparently used in facebook
0:16:17
spam filter that's so good that you
0:16:19
didn't even realize that facebook had a
0:16:23
first of all i actually didn't know but
0:16:24
cool that's actually good
0:16:27
but i guess moving on to
0:16:31
first 15 minutes we dedicated to
0:16:33
functional programming let's move on
0:16:36
but i guess next we kind of want to talk
0:16:38
about your experiences at the rmit
0:16:40
programming club and um
0:16:42
why do you think it's important to join
0:16:44
these things in the university level
0:16:46
ah the rmit programming club
0:16:49
um well yeah with with me at the rmit
0:16:52
programming club i i definitely enjoy
0:16:54
um trying to explore the edge of what's
0:17:00
really taught within school uh within
0:17:02
school because i think originally in
0:17:04
rmit i don't think even python was
0:17:05
taught which is a little bit concerning
0:17:07
so we did a lot of a lot of python
0:17:08
workshops um but i think right now
0:17:11
there's a lot of opportunity to be
0:17:12
explored within within rust
0:17:14
um and react because i think react is
0:17:17
taught like once and i know i know i i i
0:17:21
like to call on react sometimes
0:17:26
but i i think it's it is an important
0:17:28
skill that people need to learn if they
0:17:30
want to get out in industry um so i
0:17:32
think it's it's incredibly important to
0:17:34
get involved in the different types of
0:17:36
initiatives like even you kartik i know
0:17:38
you're guilty of running some fantastic
0:17:42
and like to be able to have
0:17:45
that good understanding of cloud
0:17:51
i i feel like that if you just kind of
0:17:54
put your effort in in learning what's
0:17:56
actually kind of required of you rather
0:17:58
than what's kind of put in front of you
0:18:00
in the assessment sheet you're going to
0:18:02
go way further um yeah and i'm pretty
0:18:05
i'm i although i haven't really looked
0:18:06
into the space because i don't really um
0:18:11
got hired yet um i'm pretty sure that
0:18:13
that's the type of stuff that people
0:18:14
would be looking for
0:18:19
i could see the pain in your face when
0:18:20
you said react is good
0:18:23
i mean like no it's necessary reactors
0:18:28
i think react is a fantastic step
0:18:29
forward i could um for context um
0:18:33
i think i've been posted with saying
0:18:35
that react is the worst thing that's
0:18:37
happened to web development please
0:18:38
change my mind and i i disagree with my
0:18:41
own my old sentiment back then um i
0:18:43
think reactors is is pretty good it's a
0:18:46
step forward but that's missing a couple
0:18:48
of features that i i
0:18:52
to say you report there is less
0:18:54
that was my first impression of you
0:18:57
what what the react yeah
0:19:00
i mean it's good it's good to be
0:19:01
opinionated i guess at least
0:19:03
if you can hold your physician but yes
0:19:05
i'm often teased about that one
0:19:10
if if anyone's curious about um
0:19:14
i i prefer elm over react
0:19:17
which is what i use in my applications
0:19:19
um simply because the state management
0:19:21
is so much better um and there's so much
0:19:24
opportunity using functional programming
0:19:26
languages for using from the function
0:19:28
functional compound uh points yeah
0:19:33
well then do you wanna take over and um
0:19:37
go ahead or do we want to um go ahead
0:19:39
and work on this stuff
0:19:44
you've got more questions for sam i just
0:19:47
had one question um in the middle so
0:19:51
as in how did you guys meet as in the
0:20:01
i think i think kartik remembers the
0:20:03
first time we met i think
0:20:05
what happens when i'm a club executive
0:20:10
did we meet um was it the first was also
0:20:12
the welcome event i'm guessing
0:20:14
yeah it was uh like the yeah welcome the
0:20:18
i don't remember if we expect but you
0:20:26
some sheet of paper i forgot what is it
0:20:28
was it underneath the um was it on like
0:20:31
the rusu room underneath the level yeah
0:20:33
yeah yeah oh yeah i i wrote a paper
0:20:36
program i think uh where everyone had to
0:20:42
was that it yeah yeah yeah i still don't
0:20:44
understand what it was if you want to
0:20:46
explain so what i did is that i i wrote
0:20:49
by getting giving instructions to people
0:20:52
about like when you get this message do
0:20:55
and they had to try and work out a what
0:20:57
the program was and
0:21:00
if there was a bug within the program
0:21:06
everyone was confused
0:21:09
i thought it was a little bit more
0:21:10
obvious it was calculating fibonacci
0:21:11
numbers um but as it turns out um i was
0:21:20
me were thinking of doing like a youtube
0:21:22
video in which we just go to melbourne
0:21:24
central with a whiteboard
0:21:26
uh with a program return on it something
0:21:29
like fibonacci only and
0:21:31
we're going to ask people to debug it
0:21:33
for like 10 bucks or something
0:21:40
and that might go viral as well but
0:21:46
if you come we might
0:21:48
lose a lot of money
0:21:52
i think honestly the only people that
0:21:53
are coming do that would be the people
0:21:56
you'd probably lose money either way
0:22:08
true yeah it might be interesting we'll
0:22:10
kind of see what the
0:22:12
public intellect is about programming so
0:22:16
yeah absolutely the thing we should
0:22:18
really organize it and if sam can
0:22:24
phenomenal yeah i think one of the other
0:22:28
hobbies that i have is i absolutely like
0:22:30
making extremely esoteric games um and
0:22:33
getting other people to go through the
0:22:34
pain of playing them which is great
0:22:38
i i designed an economic concept and for
0:22:40
my birthday i got everyone to to walk
0:22:43
around and run a sim
0:22:45
in person simulation of it um and by the
0:22:47
end of it they were very tired
0:22:53
that's incredible though now i like you
0:22:57
as in i can tell how your brain
0:23:02
really creative and you're full of
0:23:05
creative ideas so i really like
0:23:13
still working on that part of mine so
0:23:17
i'll get there one day
0:23:20
yeah but yeah but it's something i still
0:23:23
get didn't get a reply on if you're
0:23:25
joining us for the video or not
0:23:28
i'm not going to leave that
0:23:33
you just kind of diverted the questions
0:23:46
do you want to start with the
0:23:47
architecture of the experts that will be
0:23:56
yeah yeah i'd be very i'm a massive
0:23:58
architecture person
0:24:00
ah i have i have the staff
0:24:02
which has been named by another person
0:24:08
it's not the stack you want to work with
0:24:11
but it's great i love it
0:24:13
i don't think it's the same we want to
0:24:23
all right this is the point where i keep
0:24:26
keep quiet and you guys carry on
0:24:33
all right brilliant so i'll just shave
0:24:35
my screen and um i will open up that
0:24:38
really rough architectural diagram
0:24:44
go for it with time as well
0:24:48
okay share my screen with you guys
0:24:58
okay cool that's crawl
0:25:09
oh okay and i'll just open that up in
0:25:28
i really hope i did
0:25:30
i i have it first of all um if oh no i
0:25:36
i must have it just give me a minute and
0:25:43
if you want you can do like a physical
0:25:46
okay yeah there we go
0:25:51
oh you're all good fantastic why don't
0:25:54
oh nice cool um so i'll just
0:26:02
able to see it properly yeah yeah
0:26:09
do you want to go through this yeah yeah
0:26:14
so we have three approaches um
0:26:18
context purposes we are using a fetch
0:26:20
api system for the middleware
0:26:24
and for back-end as we mentioned earlier
0:26:26
we're using express
0:26:29
um for the back-end we just have some
0:26:31
basic functions right now which is like
0:26:34
get bored or update board or insert
0:26:36
insert board delete board get notes or
0:26:39
some some stuff like that
0:26:44
to really explain what's happening is um
0:26:47
i'll take an example of get bored
0:26:51
um so how get bored essentially works is
0:26:56
i guess i need to share my screen for
0:26:58
okay yeah you do that and um
0:27:02
you can stop sharing my screen
0:27:08
alrighty i guess i'll just explain how
0:27:10
get boot works through some api calls
0:27:17
originally our get bored used to work um
0:27:25
so originally our get bored used to work
0:27:28
with the id this is the only function
0:27:30
only controller which we changed to work
0:27:32
with the board name
0:27:37
so this kind of means that um
0:27:40
appending the url in the fetch api
0:27:43
either we do it with the board id or
0:27:45
either we do it with the board name
0:27:47
um so initially when we designed the
0:27:49
whole thing we did it using the board id
0:27:54
instead of k6 here the board id should
0:27:56
come here then only it will fetch the
0:28:00
so the first approach
0:28:02
we kind of thought was that
0:28:05
instead of doing this why not we just
0:28:07
change everything in the back end to
0:28:09
work with the board name
0:28:11
so that was our first approach
0:28:14
on which we kind of really give it a
0:28:16
thought and we started working on it
0:28:18
that's why get bored works with the
0:28:19
board name and not with the board id
0:28:22
but then again it kind of came to our
0:28:24
mind that there must be easier way to do
0:28:25
it because we don't have to go ahead and
0:28:27
change the whole back in architecture to
0:28:30
make um fetch apis work
0:28:33
and it only makes sense that it works
0:28:35
with the id because board name could be
0:28:39
there could be reputation in board names
0:28:41
that's not a big problem
0:28:43
so the second approach um
0:28:46
we kind of came across was to
0:28:56
id which passes the name which passes
0:29:00
and gets this to the middleware
0:29:02
and when it gets back to the middleware
0:29:05
a get function or a delete function or
0:29:08
insert board function whatever function
0:29:11
we can just append this
0:29:16
after getting the board id
0:29:19
after passing the board name to the
0:29:23
so that was the um current approach
0:29:26
which we were trying to think
0:29:29
um sam are you on the
0:29:31
same page till now
0:29:33
yep i think i understand
0:29:35
all righty so um third and a bit of
0:29:38
creative approach i guess
0:29:40
which we kind of trying to take was that
0:29:44
so the problem with the second approach
0:29:46
we are traveling from the fetch api to
0:29:49
the back end twice which means that
0:29:51
first from the fetch api we go to the
0:29:53
back end saying that okay here's the
0:29:55
board name give me the board id and when
0:29:57
you get the board id then you append it
0:29:59
whatever fetch api call you want to do
0:30:01
get or delete border any anything you
0:30:04
want to do so that way you're hitting
0:30:05
the back end twice and you're hitting
0:30:07
the database twice
0:30:08
um third approach which we kind of came
0:30:14
you go to the back end with a thing
0:30:16
called action in the body that action
0:30:19
could be a delete or get or whatever it
0:30:24
go to the back end um there will be a
0:30:26
specific variable in the json in the
0:30:28
body call action and it will specify
0:30:31
what action needs to be done
0:30:33
and in the back end um when it goes
0:30:35
it'll just pass the board name and it'll
0:30:37
just do the action uh in the back end
0:30:42
uh what controller it's relating to
0:30:45
let's say the action thing said delete
0:30:47
so i'll just go to
0:30:49
the delete controller in the back end
0:30:51
and it'll do the thing
0:30:54
i guess accordingly and it'll have a
0:30:57
if it's a get function the response
0:31:02
board or else if it's a delete or
0:31:04
something that we can always respond
0:31:08
so if you have any questions sam or even
0:31:11
zen um before we start discussing i
0:31:13
guess we can uh talk about the questions
0:31:20
i mean like actually now that i i've
0:31:21
heard of those i'm like oh there's a
0:31:24
so can i ask um the first question would
0:31:26
be with the second option you said that
0:31:29
you had an api endpoint that got the
0:31:32
board id given a board name is that
0:31:36
yeah so you create like a get function
0:31:39
yeah um but what i was surprised by is
0:31:43
that i'm surprised the fact that the
0:31:44
front end knows the board name without
0:31:46
knowing the board id i would kind of
0:31:49
expect that on the request where they
0:31:52
find out about the board name
0:31:54
that they find also about the board id
0:32:04
say that the fact that it already knows
0:32:06
the board name is because the user
0:32:10
types in the board names uh the board
0:32:13
name in the text box as in say for
0:32:16
example if you created
0:32:19
today a board name
0:32:23
one and tomorrow you want to go and get
0:32:30
you would just write the name as in sam
0:32:38
that's how it already knows the
0:32:41
board name already
0:32:43
oh does that make sense yeah
0:32:45
yeah i understand so the reason why you
0:32:47
don't have an id is because it's not
0:32:49
even in the back end yet
0:32:55
insert the board it is
0:32:58
so yeah so when you insert the board um
0:33:02
okay a bit for simple terminology when
0:33:05
you create a board as in a new board
0:33:08
that is given a unique identifier
0:33:16
let's give it a unique identifier
0:33:21
yeah um i guess if you don't have any
0:33:24
questions do you uh any of you guys
0:33:27
uh i don't know about samba i'm good
0:33:33
i wonder if i could draw this somehow
0:33:45
i think what might do we
0:33:47
might invest in one
0:33:57
i'll share my screen what i'll do is
0:34:01
a new drawing on chrome canvas
0:34:06
which i've got a fantastic let's do this
0:34:14
um okay let me just just show my screen
0:34:17
first screen as easy as the two monitors
0:34:23
can you see my screen
0:34:26
yep uh yes now we can
0:34:29
yeah so i'm imagining oh come on let me
0:34:33
draw oh wow you're not letting me draw
0:34:37
um i'm imagining you have two parts you
0:34:39
have a front end and you have your back
0:34:41
end so this is the this is the back
0:34:44
yep i have my pens where but this is
0:34:47
i'm using by mouse right now
0:34:50
okay so i've got a front and your back
0:34:52
end so for here at this point
0:34:55
you've created something you've created
0:34:57
your board is that correct
0:35:00
so for them you need to send to the back
0:35:03
the fact that you've created the board
0:35:05
do you need to do that
0:35:07
to insert it in the db yes
0:35:13
um so in that case you would probably be
0:35:15
doing some sort of post request
0:35:21
so the thing is usually i think the
0:35:24
standard way of doing it would be you on
0:35:28
the response of the get request you
0:35:30
would include the id
0:35:37
so what's your name
0:35:42
get request of what like what are we
0:35:44
getting sorry this is a post request so
0:35:46
this is the creation of the the creation
0:35:48
of the board and in the response of the
0:35:51
post request you include the id and then
0:35:53
that means that you have a board and say
0:35:57
you want to get a board
0:35:58
um you want to get all the boards or
0:35:59
something a get a board you you can get
0:36:01
it by an id because you have that id
0:36:05
so you just send it the id
0:36:10
correct yes we can do that
0:36:15
gonna imply changing a bit of stuff but
0:36:18
i think i get what you mean
0:36:20
yeah and then that way you don't need
0:36:22
any get bored by id
0:36:27
we don't need that overall
0:36:30
name sorry you just need to get bored
0:36:34
right right right right right see yeah
0:36:37
yeah something makes me feel like that
0:36:38
you're missing this part where when on
0:36:40
the return you don't give the id back is
0:36:44
yeah so for now you're just having a
0:36:46
response status for that
0:36:51
so that that's the more classical way
0:36:53
that i'd imagine that you'd go about
0:36:56
yes i guess uh you can
0:36:59
look into this um i guess
0:37:01
one thing which it
0:37:03
kind of also gave me an idea was that
0:37:06
rather than having to type the board
0:37:08
name we can have like a drop down list
0:37:11
and we can have like uh the name of all
0:37:15
when we have the name of all the boards
0:37:17
they are gonna relate to
0:37:21
so when the user comes back and logs in
0:37:23
again we can just use that
0:37:25
drop-down list which is going to have
0:37:27
the board value but every board value in
0:37:30
the front end is going to relate to a
0:37:31
board id so i guess we don't have to go
0:37:33
back to the back end again
0:37:35
so no yeah i guess yeah yeah
0:37:39
yeah i'd agree to that
0:37:43
would do am i silly do you think that
0:37:45
that would be a more reasonable idea or
0:37:48
no i think that's pretty good we can
0:37:50
give it we can give it a shot um
0:37:52
but also it has a valid point here if
0:37:55
you want to look into it yeah just how
0:37:57
does that work if you haven't in boards
0:38:02
um i'm curious why wait so you're saying
0:38:06
that say what i have a million boards
0:38:13
how is it any different a million boards
0:38:15
i don't quite understand the question i
0:38:17
think if you had a million boards what
0:38:19
is that you would you would have like a
0:38:21
get all boards request and then you
0:38:30
at least what he's trying to ask is that
0:38:32
about the drop down thing but um
0:38:36
yeah so what we can kind of do is that
0:38:39
either we can have like a
0:38:42
search thing uh when we are trying to do
0:38:45
it like you can go ahead and search the
0:38:47
board and then click it
0:38:52
we could also get the boards based on
0:38:58
id yeah yeah yeah yeah for sure
0:39:05
all righty yeah that makes sense and i
0:39:09
really like sam's approach that he's
0:39:12
not he's been really productive with the
0:39:15
connections so hitting the db once and
0:39:19
then in the same request he's
0:39:24
id as well i think that should be the
0:39:26
approach that we um
0:39:30
what do you think can't take
0:39:32
yeah yeah for sure um that's true i
0:39:35
uh utilizing the connections um
0:39:39
um andre says that that means you need
0:39:41
to tie all the users to the board in the
0:39:43
first place um is in scrambler public um
0:39:46
i guess that's one of the announcements
0:39:48
which we are trying to make right um
0:39:50
having kind of like a
0:39:53
login sort of architecture but not
0:39:54
really login like a code based
0:39:56
architecture in which you're gonna have
0:39:58
a code and then only you're gonna
0:40:00
kind of get to access some boards
0:40:02
so yeah that's one of the announcements
0:40:05
so very good you can
0:40:19
i think one thing that might be worth
0:40:21
considering i don't i don't want to
0:40:23
completely bend the architecture of your
0:40:25
application as soon as i just i just
0:40:29
but i when i build applications i like
0:40:31
building them offline first um and what
0:40:33
that means is that
0:40:37
local storage as much as possible so
0:40:40
that you create a fully working
0:40:41
application that works just on on like
0:40:45
the user's computer without accessing
0:40:47
the internet it means you can also
0:40:48
create stuff like progressive web
0:40:49
applications where you can access your
0:40:52
website without going online which is
0:40:55
um but then when you log in you offer
0:40:57
those sync functionalities and i think
0:40:59
that's both incredibly easy to implement
0:41:05
i think there's a word for it um
0:41:07
i can't remember it
0:41:17
but i guess we are kind of too late for
0:41:18
that um we both have you you might be
0:41:22
yeah we both are kind of like too cloud
0:41:27
like we just want to get stuff on the
0:41:38
um i think you should work on a twitter
0:41:40
clone i asked because it seems really a
0:41:42
great project to learn something yeah i
0:41:44
think that's a that's a good idea um
0:41:47
that'd be awesome though it could be a
0:41:54
username for example person
0:41:58
not by id yeah yeah okay
0:42:16
but it also kind of comes down to how
0:42:19
crumbler.ca was um designed initially
0:42:22
when we took it as an open source
0:42:25
um i guess implementing that would also
0:42:28
mean changing a lot of stuff
0:42:39
enhance it is by adding a login as well
0:42:43
yeah and um we won't really
0:42:46
allow these shoots just any anonymous
0:42:52
create the board that's not going to
0:42:57
announcement is that
0:42:58
is the implementation of the
0:43:01
user hierarchy as well
0:43:03
yeah yeah for sure
0:43:06
i guess uh if we are kind of um but
0:43:10
um i guess what sam said um
0:43:12
when we get the board back yeah while
0:43:15
posting then what happens okay let's say
0:43:17
we i want to call the delete board
0:43:21
i have the board let's say this is just
0:43:23
one transaction like one login i i'm not
0:43:27
does that mean i have the board locally
0:43:35
well yeah you if you you bought likely
0:43:37
on your front end um and i think the
0:43:40
is that absolutely nowhere except
0:43:44
the front-end interface do you actually
0:43:46
reference the name you are
0:43:48
yeah in every other place you call up id
0:43:51
so then you send the id over to the
0:43:53
delete endpoint for boards
0:43:56
and then that should delete the board
0:43:57
and then purge it from your front end
0:43:59
right yeah but then okay
0:44:02
i guess uh the one transaction is sorted
0:44:04
out when um when you're posting the
0:44:06
board and doing all sorts of delete and
0:44:09
other stuff but what happens when you
0:44:11
come back um you have a
0:44:14
like kind of id or whatever it is
0:44:16
then what happens when you come back how
0:44:18
are you gonna access this board id
0:44:23
um after closing the session and you
0:44:25
want to access your board next day
0:44:31
all the boards based on the user
0:44:35
as in they'll log in
0:44:37
and then they will drop down and
0:44:40
say these are all your boards which one
0:44:42
would you like to choose
0:44:46
will already have the board ids of all
0:44:50
of them but we won't necessarily display
0:44:55
ids as in the ids can be hidden
0:44:58
but only the names are visible
0:45:01
does that make sense
0:45:02
yeah so i guess after the login function
0:45:05
you are saying but i guess that's also
0:45:08
um i don't think that's the time for
0:45:11
at some point in the future we might
0:45:13
have to go back to the back end and add
0:45:16
what user does the board belong to like
0:45:18
some kind of relation
0:45:20
which is one to many of course but
0:45:24
we might have to go back i mean we have
0:45:30
which means you would have to do two
0:45:32
separate transactions is that what
0:45:38
initially we weren't looking on that
0:45:40
side of things that do
0:45:42
initially like the whole project was
0:45:44
like kind of like an open source thing
0:45:46
that anyone could access um stuff
0:45:49
but if we are thinking to move towards a
0:45:54
um login oriented side of things then we
0:45:57
um set some schema and that's some kind
0:45:59
of relation between the users and the
0:46:01
boards and change that in the back in
0:46:13
but i guess for now um
0:46:15
you're right we can do that by get all
0:46:20
thinking we are dealing with only one
0:46:24
what what do you say sam
0:46:26
i i mean i i've coded applications that
0:46:29
are kind of like this as well but yeah
0:46:31
obviously you have users and those users
0:46:33
have collections of objects um
0:46:38
honestly yeah you sound like yeah we're
0:46:40
not quite yet up to the part where we're
0:46:42
doing authentication is that correct
0:46:44
no no no not even yeah authentication is
0:46:46
a nightmare in and of itself and
0:46:48
obviously when you authenticate you need
0:46:50
yeah you hold the token in local storage
0:46:52
you refresh it you access it you gain
0:46:55
all your data um on by just getting
0:46:58
calling get on whatever the resource is
0:47:02
it depends what path you want to go down
0:47:05
and i feel like if you really want to
0:47:06
worry about that right now
0:47:08
but you probably do actually it might
0:47:10
even just be too easier to just do an
0:47:12
entirely local application for starters
0:47:16
too late for that like i'm not gonna lie
0:47:20
too late i think it's true
0:47:21
i think the amount of time and pain that
0:47:23
you will go through going through
0:47:25
getting an authentication set up if you
0:47:26
haven't done that before
0:47:33
aws cognito for that so
0:47:39
yeah yeah so remember the um app which i
0:47:42
delivered the workshop
0:47:44
oh yeah that was on using
0:47:48
yeah but it used cognito as well but
0:47:50
yeah i mean it uses a
0:47:55
is this an amplified project as well
0:47:58
no no not yet i mean no okay
0:48:05
but yeah um i guess uh if we want to do
0:48:07
it fully cloud we can
0:48:10
think about stuff like cognito but
0:48:12
i i also feel we are not quite there yet
0:48:15
it's good to talk about it but
0:48:19
i don't think there's any action which
0:48:21
we need to we are on that stage here
0:48:24
um then if you wanna should we go ahead
0:48:27
and change how sam said the
0:48:31
post request or is there anything we
0:48:33
want to talk about in the architecture
0:48:37
i think if you're taking sam's approach
0:48:41
which um looks like would be up because
0:48:43
i'm pretty pretty happy with that um
0:48:47
and we can actually
0:48:48
continue to do the
0:48:51
implementation as in changing the
0:48:53
existing architecture to suit those
0:48:56
needs but directly
0:48:58
yeah but i guess one thing i also want
0:49:00
to discuss is that so here's the deal
0:49:02
sam on every board
0:49:05
is gonna have a lot of notes like by a
0:49:07
lot like it could be a lot as well um
0:49:10
so when you are inside a board you're
0:49:12
gonna start posting notes
0:49:15
when you post a note then do you want to
0:49:17
do the same thing do you want to get the
0:49:21
you're going to post like let's say 100
0:49:24
then you won't be able to manage um
0:49:28
the ids of the notes so in that
0:49:30
situation what do you think it's a is a
0:49:35
well a hundred notes is totally fine for
0:49:38
ids i don't think you'd have any trouble
0:49:45
wait what like what like you might need
0:49:47
to paginate if that's what you're
0:49:48
worrying about but
0:49:51
i guess i'm kind of worrying about how
0:49:53
you go if you're gonna use the ids then
0:49:55
to append in the url because it's going
0:49:57
to be a lot of notes and posting and
0:50:02
so you mean like the how do you get
0:50:05
um all of the notes if you've stored and
0:50:08
there's an enormous amount of ids you
0:50:09
don't just want to go get slash bang
0:50:12
a list of 100 ids massive url um yeah
0:50:15
what you would do is that you would just
0:50:18
um you would have a resource course that
0:50:24
slash notes and that notes resource you
0:50:28
and then that would return
0:50:31
yeah the notes wouldn't that i think
0:50:36
i think how sam you're saying that is
0:50:39
only if we want to get a particular as
0:50:42
in one note then only we can append the
0:50:46
id but if all the notes then
0:50:49
we don't append nothing we just do
0:50:52
a board id slash notes boom done
0:50:56
yeah exactly but i guess it also but
0:50:59
then one thing which we need to kind of
0:51:01
think about would be
0:51:02
let's say we are calling a delete node
0:51:06
how do you get your particular what's id
0:51:10
url and just do a delete
0:51:13
well so how did so you're deleting a
0:51:18
yeah so what you would do
0:51:22
i think the front head would know what
0:51:24
board the note belongs to
0:51:26
so i think the front end would be able
0:51:28
to say here's the board id here's the
0:51:30
note id construct the url send a delete
0:51:32
request from the front end and then
0:51:35
like how do you oh all right okay so
0:51:38
that's what all right now i know what
0:51:39
you mean um so whenever the note is
0:51:42
displayed every node is kind of um
0:51:45
whenever it's displayed it's related to
0:51:51
all right i guess that's something which
0:51:53
we can turn the front end team as well
0:51:56
um we would have to
0:51:59
right you have a front-end team
0:52:14
some people are working on front ends
0:52:18
some are um doing the
0:52:21
back and stuff and then yeah
0:52:24
i'm the project lead
0:52:32
i think i'm really happy with um
0:52:36
all the points that's
0:52:39
essentially highlighted and it really as
0:52:42
indicates that that's efficient and um
0:52:46
we're using all the res
0:52:50
only to the point that we we need to and
0:52:56
what's your ranking content
0:52:58
yeah yeah i guess um let's do that
0:53:02
i guess uh for now we just need to kind
0:53:07
get notes and um core function are
0:53:09
working and not really worry about how
0:53:12
they're gonna be implemented yeah i mean
0:53:14
we are worrying about that but not in
0:53:16
the sense that how in a particular user
0:53:18
story it will be implemented
0:53:21
but yeah let's do that um we have like
0:53:24
seven minutes left yeah
0:53:27
let's do that i'll just uh so i would
0:53:35
backhand a bit isn't it
0:53:55
that's some humor there
0:53:59
all right um i'm going to share my
0:54:03
viable product yeah
0:54:05
most valuable product
0:54:09
most valuable programmer i like that
0:54:13
i do have a as a point here what's the
0:54:32
so i think um what we need to as in
0:54:35
backtrack a bit there what do we
0:54:41
in order to get the mvp working up
0:54:46
yeah i mean um so i think what andre is
0:54:49
trying to say is that
0:54:50
um there's a thing when in scrum it's
0:54:53
called like um sashmi slicing
0:54:57
i don't know if sam was in you have
0:54:59
heard about it or even andre i have that
0:55:02
that's just a way of um developing in
0:55:05
the sense that you release small bits of
0:55:07
slices so i guess what he's trying to
0:55:09
say is that we need to
0:55:11
what's the basic functionality um
0:55:14
you can work and then look for
0:55:21
could i make a suggestion on this front
0:55:25
i think this is the third time i made
0:55:26
this suggestion today um no but no
0:55:31
it's a bit evil um i i um i quite
0:55:38
usually when you build a front end
0:55:44
local storage mock of the back end
0:55:47
anyway to do things like integration
0:55:49
testing or unit testing or things like
0:55:56
i would say that if you can mock the
0:56:02
then having that would create a local
0:56:07
and i think that that would make
0:56:10
the minimum viable product without
0:56:12
having to worry too much about a back
0:56:15
yeah i guess we can do that so what we
0:56:18
used to do is we used to set up a local
0:56:20
dynamodb and um it used to the app can
0:56:26
local as well without using cloud so if
0:56:29
that's what you're saying like
0:56:30
that is a possibility even right now i
0:56:34
what sam is indicating and i could be
0:56:38
and correct me if i am that you're
0:56:49
of a system to create the
0:56:52
entire app on that and then when that's
0:56:56
all working then we can superstitious
0:57:00
storage am i right
0:57:03
well yeah as long as i said you can't
0:57:05
release a mock store it kind of is you
0:57:07
can't really lisa box store so what i i
0:57:10
didn't quite mean like local dynamodb um
0:57:13
i actually or a local back end i just
0:57:18
entirely as web local storage using like
0:57:20
indexeddb or window.localstorage
0:57:26
and then from that
0:57:28
you'd be able to um
0:57:30
you'd have you'd interact with a fake
0:57:32
back end which would just interact with
0:57:35
i guess store it inside the browser's
0:57:37
compute local storage and then that way
0:57:39
you could you could release that
0:57:45
i think that's all already happening in
0:57:49
live version which is a scrum little
0:57:53
ca so the whole point of us working on
0:57:57
on this project i'm going to cut it
0:58:00
yeah no you're good
0:58:01
okay cool um the whole point of us
0:58:04
working on this is is because we want to
0:58:07
add some persistence storage so at the
0:58:10
moment what's happening with the live
0:58:13
version is that when the server goes
0:58:17
then all the data is
0:58:24
we want the huge users uh to have the
0:58:28
data even if anything happens to this
0:58:32
so that's when dynamodb comes in
0:58:36
as in as a persistence storage
0:58:39
yeah um i also kind of want to mention
0:58:42
um so we are working on like our project
0:58:46
managing skills as well and going back
0:58:48
is kind of not an option because we are
0:58:50
working in like uh
0:58:53
but i also want to also point out what
0:58:56
andre is kind of saying that we want to
0:58:58
work on the mvp and going back to local
0:59:00
storage is kind of
0:59:02
um literally going reversed rather than
0:59:04
trying to make make the viable product
0:59:07
but i also respect what you're trying to
0:59:08
say like that's the
0:59:10
kind of correct way to develop or won't
0:59:12
say like the credit i guess that's one
0:59:14
way to develop it in a efficient way if
0:59:18
we're going to put it
0:59:20
but if we want to look at also the
0:59:22
project management side of skills and
0:59:24
there are like a lot of people involved
0:59:25
in it and we want to look make the
0:59:28
least product which we can release as
0:59:30
soon as possible um
0:59:32
i guess it only makes sense that we um
0:59:35
um kind of stick it i know sam doesn't
0:59:45
tell by his facial expression that he
0:59:47
really isn't he's really passionate
0:59:50
already about the thing that we're doing
0:59:54
turns things around but uh i i totally
0:59:59
opinions and facts sam and
1:00:02
that is kind of as in the right and
1:00:07
to do but i just really wish that
1:00:12
brought you on the show as in two months
1:00:17
so we can actually
1:00:22
in the first place yeah you know what i
1:00:24
mean yeah i really i really wish that
1:00:27
but um at the moment say
1:00:30
we have come this far that um if we go
1:00:35
it will probably be all the opposite
1:00:38
direction that we want to go
1:00:42
chief goal does that make sense
1:00:45
well that makes total sense
1:00:49
although i'm definitely going to make a
1:00:51
couple of pull requests in your rapper
1:01:08
yeah i could actually invite you as a
1:01:11
contributor in the red pope uh but yeah
1:01:13
let me know i will pull a request i will
1:01:20
yeah i appreciate that
1:01:26
that's time for today uh what do you say
1:01:30
yeah as you know i don't really want to
1:01:33
take more of um sam's precious
1:01:37
already has in given us alone more than
1:01:42
i was uh anticipating and
1:01:45
thank you very much sam as in your
1:01:47
knowledge about programming is way above
1:01:52
i totally respect all your opinions
1:01:56
yeah me too thank you
1:01:58
alrighty um i guess that was pretty good
1:02:04
and thanks again sam for coming in and
1:02:08
we had a good talk and the blog of this
1:02:11
uh stream would be really interesting to
1:02:17
we blog every um stream
1:02:28
and maybe start implementing a couple of
1:02:30
controllers tomorrow
1:02:32
so yeah that sounds like a plan
1:02:34
yeah you have anything to add sam or zen
1:02:40
sam is itching to say something and i'm
1:02:44
waiting for his comment now
1:02:50
you know option three you said earlier
1:02:52
with the actions list
1:02:55
you want to do something like that it's
1:02:57
called graphql and you should follow
1:03:15
no really thank you for taking the time
1:03:21
valuable opinions um
1:03:25
you sound really passionate about um and
1:03:28
i totally respect that and um
1:03:33
look forward to inviting you to
1:03:37
the show again if you're up for it and
1:03:40
uh you want to add
1:03:45
i think thank you so much for
1:03:48
letting me be on the show and and
1:03:50
talking too much about my my unusual
1:03:52
architecture opinions um but yes
1:03:55
wow that's good i mean
1:03:57
on the bright side we are actually going
1:03:58
to implement it tomorrow so yeah
1:04:01
yeah that's that's that's a big
1:04:03
contribution and i was actually kind of
1:04:05
thinking then like when we release the
1:04:07
first public version of the app maybe we
1:04:09
can like kind of invite all these
1:04:11
special guests who came of course
1:04:16
i guess that would be great
1:04:18
but that's like three four months down
1:04:24
the time is very flying past so
1:04:28
it just seems around the corner already
1:04:31
yeah i guess in three days we're
1:04:33
completing 40 episodes
1:04:40
yeah sure okay guys contact
1:04:43
yeah i would i would be
1:04:51
um see you guys smaller than your dad
1:05:00
sam right guys uh thanks for
1:05:06
we'll see you back is same time tomorrow
1:05:11
no a different task and same place right
1:05:15
catch you guys have a good night cheers