hey everybody welcome to live coding
with jesse i'm jesse and today we're
going to
finish
uh the division mode
and depending on how much time we have
we'll we'll see what else we're going to
do but i definitely want to try to get
division working properly
so let me check the live chat just say
hi to everybody
um
real question about the programming
language we'll use it's going to be
javascript also have a question or
suggestion to get fire code and enable
ligatures
uh for those of you who don't know what
that is that's uh like a font for
a code editor and it
does some cool things with like arrow
functions and
equal signs and stuff like that
so i actually have had fire code
installed before uh on a different
computer so on my work computer at my
old job i had that so it is pretty cool
i may do it again
uh but
probably not for this stream because i
want to get other stuff done but uh
definitely
definitely looks cool
so i'm open to having that again
uh for those of you who are just joining
i'll give you a quick breakdown on how
this goes
this is a live project i did not
rehearse any of this before so i will
most likely make mistakes uh and also
some of the stuff we do on the show a
lot of it i've never done before at all
right so we're gonna try to figure it
out as we go along
i usually try to set a pomodoro timer
that means i'll do 25 minutes of coding
take a five minute break and answer some
questions in the live chat if i have
time at the end of the live stream
streams usually go about an hour long if
i have time at the end i'll answer as
many questions as i can in a live chat
so
go ahead throw the questions in there um
any you can ask whatever questions you
want so don't worry if if you think it's
a noob question or something like
there's a lot of beginners in here
so
any questions are are fine also feel
free if you see a question in the live
chat that you can answer go ahead and
answer it uh i like to have a nice like
community that's helpful to each other
on the streams
and
i think that's it for all the
getting started stuff uh so let's jump
into it uh first things first i want to
give a shout out to uh sid to do uh for
the pull request that i just merged i'm
not gonna go over this one because we
did in the last stream so if you're
interested check it out only thing that
changed was uh there was some division
logic in there
uh that was removed um because it was i
did a bad job of explaining what i
wanted to happen
uh so
we cleared that up in the last stream so
this just clears the input after a
submission
so we'll see that now since it's merged
in if you have the project running
locally make sure you update
uh update your fork
so you get all these new updates also
harshit submitted a pull request where
he migrated all of our our testing
from puppeteer and mocha to cypress
i checked out what changed in the code
but i haven't done anything with it
myself so
we'll we'll run our tests sweet just to
see like what it looks like
um but thank you so much harshit i'm
excited to try out cypress so i've heard
good things about it
and those are the pull requests for
today
uh the link to this
repo is in the description for the video
if anybody's interested uh please check
it out feel free to contribute code if
you want or list any issues uh we still
have some open issues here we're gonna
do this one today
but
this project is definitely a great
project for beginners to get in your
first pull request if you need help
doing that just let me know i'd be happy
to walk through it with anybody
if you submit a pull request and it's
totally wrong i'm not going to be upset
um i want this to be
like a very pleasant experience for
anybody who's trying to get into using
github
all right so
let's go over what we want to happen
with division and then we'll we'll go
through if anybody's interested in what
this project actually is i recommend you
uh check out like video one and two
uh of this series so
i don't even remember what this is um
what number this is project seven so any
videos you see that have p7 in them it's
that's part of this project so if you go
to like p7 d1
that would be the first video i explain
it more
in there but you'll catch on as we go
along it's a pretty simple app
okay so here here's what i want since
this is an app for
little kids
who are just learning math
at least for the level one
which i hope to add more levels to this
eventually level one division
needs to be
only numbers that when you divide them
will give you a whole number so i have
examples here
so examples of good
problems to have would be 9 divided by 3
4 divided by 2 but we're never going to
have one that would result in a decimal
or fraction right 3 divided by 2 9
divided by 4.
so
that's the problem we're going to try to
solve today is how do we make sure
that
it's only
numbers that equal a whole number
i could see
the easy answer is we could hard code it
just right off the top of my head
however
in my mind i could see
this game
having increasing levels of difficulty
that would include
right now it's only single digit
it could include double digit triple
digit
in that case
hard coding wouldn't be a great option
uh at some point
you know we may want to include decimal
numbers in the game
when it gets that hard but at first i'd
like to continue to keep it whole
numbers so
we need to keep that in mind so i'm
going to say hard coding is not an
option for this even though
you know for
for just our problem sets for this show
specifically it probably would be the
fastest solution
um let's go to the code
where are we at there we go all right
first things first and i recommend doing
this
whenever you open up your code editor at
the beginning of the day always do a get
pull
right
that way if anything has changed
in the project
you
have the latest changes
let's see use ref is not defined no
undefined
what do we have
all right let's check out so we we have
an error here
uh
let's go
i shouldn't say that this is uh
it's not an error error is just kind of
like our es lint rules since we haven't
actually run anything yet
uh line 21 in our app.js
file
use ref submit input us
all right this
hmm
all right let's check this out
oh
harsh i can see heart already has
some ideas for how to um
how to implement the division so
hardship i'm gonna i'm not gonna forget
that i'm gonna read that in just a
second first i wanna see
uh let's let's go back to github and
check out that pull request
for this one to see what changed
uh
files changed
if you haven't used github before this
is so useful to be able to go back and
see changes like this
not you couldn't do it
other ways but this makes it so easy
i just that's what i thought okay
so that used ref is an addition here
and this this might be
we might need to import use ref
that's what i i think yeah
okay harsh had already caught that yeah
so let's go ahead and just import use
ref um
and
where's our code here
all right so you can see here so
we're trying to use the user f here but
we haven't imported it okay so that's
why we're getting
uh
that error so use ref
okay
and now if we save that it should be
fine
oops
and that looks like use it should be use
effect
did i accidentally delete that probably
uh okay cool
so
let's
check this out
here's our our app just to make sure
things are working and what should
happen now is i can put in a number in
here when i hit submit it clears
and the focus remains right so
great and
our
i'm just hitting enter now with that
awesome
okay
so let's move over to division
um hey that actually works out
for
cool
um
now i'm gonna read what harsh so uh
harshit is a long time uh
live stream contributor here uh
so
uh harshit is a really really awesome uh
software engineer um
so he's suggesting
that we make two random numbers multiply
them and make a problem
dividing them it will always be a whole
number and an easy problem
okay
yeah that makes sense
um
yeah that'll work uh we do need to add
for level one at least we need to add a
check to make sure
um that the the product of the
multiplication
is
not
two digits right
okay
uh also let's see what we have currently
for division too
that might be a great place to start and
just say is is there anything we could
very easily do to modify what we
currently have
so
everything
all of our logic
is i believe in app.js
right
here's our
is it or did we move it no we we moved
it
sorry i haven't even looked at this for
uh for a week so
um
i've been working on other stuff i do
want to let you all know once we get the
um
the logic done for level one
uh what i'd like to do is actually run
this in
a simulator so probably in like the ios
simulator
or oh no i'm on windows machine
so maybe i'll try to run it on my my
android either way like the next step
what i'd like to do is is actually run
this on um on a mobile device
uh at first it would just be like proof
of concept that we can run the same code
on
a mobile device and on the web
but i would i don't want to get too far
into this without at least
testing it on a mobile device that way
if we do have some code that won't work
on mobile
then it'll be
easier to debug that with less code
overall also just remember i forgot to
start my pomodoro timer
so let's
start that now
okay and i did not mean to start spotify
all right
oh harsh it also says don't forget to
try cyprus okay we we will we will try
cyprus okay
all right so harsh it's saying like okay
two multiplied by two
is four
now our problem would be two divided by
four okay
um michael creel says if the answer
um modulo one
is not equal to zero
then get two new numbers
okay yeah that actually works as well
because then
yeah
okay
um
i still need to figure out where our
division stuff is
and i'll change your callback
it's in our reducers
yeah the logic got extracted out
yeah here it is okay
uh so we at one point we did have
everything in app.js and then we had a
bit of refactoring uh that happened in a
pull request and
now we have some
some of the logic probably most of the
logic in this appreducer.js
okay so we're returning right now
we're just getting random numbers one
through nine
yes we're definitely going to have to
switch that
so i don't think there's much we could
do like with what we have right now
um
we're gonna have to have something based
on
based more on what mode we're on
okay
does that make sense
let's see
oh wow okay so yeah
i gotta keep up with this chat over here
um because archer's putting in some
extra extra stuff
uh
let's see that x equals math for me
okay
um
all right so let me i just need to go
over this file just for a second because
i haven't looked at this file for a
while
it's probably been like a month since i
looked at this since we've just been
doing testing
uh
okay so all right here's our random
number generator
which
new problem set mode
enemy remove enemy
check answer
okay
right now we
we do have
all right so we're getting the operator
from
our state
okay so we're passing in that state here
and an action
okay
um
okay yeah harsha said you have a
function for random number use it then
okay
then michael's saying the logic is in
check answer
yeah so i guess
yeah so we'll need to
check answer
should still work as is right because
all we're doing in check answer is just
taking
whatever our value one
value two is whatever operator is so
that should be fine
what we need to change though is our our
new problem
right
because
what we really want is just to make sure
that we've given
the user
a problem that we know will result in a
whole number so this is what we need to
to work on
so currently right now
this though doesn't
it doesn't know about what mode we're in
or care about what mode we're in so we
need to change that the the mode that
we're in is going to matter
in this case
uh
so
let's see how we're gonna do this
so right now we're returning
i guess we could just put an if
statement in here
um
maybe a switch i'm trying to think what
else
we also want to make sure that
subtraction doesn't result in negative
numbers so i guess we'll have two cases
where we'll have
we'll want more than just plain random
numbers so
uh
let's see
the answer is this won't get a new
problem
okay
oh okay michael caro says if the answer
in check answer is a decimal get a new
problem oh okay so
michael's suggesting that
we just
go through
it's basically just keep going through
a loop of
generating random numbers and then
checking
the answer
until we get one that's a whole number
and then present that
or negative
okay
that's actually not
it's not a bad idea
okay
yeah um how about that yeah so if we
extract out
some of this into its own function
which shouldn't be that hard let answers
yeah so
this
could actually be
its its own function or at least this
this part
and then that would let us
a problem keep calling it
all right let's do that first then
so
let's take this
and make its own function so i guess
we'll put it up here right
um
do we really need
to export this function probably not
um
what are you going to call this um
check answer
and
uh let's give it
let's see
about one
route two
and
actually we could probably
just do this
okay so this is just going to return so
if you're not familiar with arrow
functions so this is an arrow function
right
so basically the the value then of check
answer is going to be equal to whatever
this is
right it when you do an arrow function
like this all in one line it
automatically returns that so you don't
need to actually write return okay
okay
um
my my auto linting just put it on the
next line here but it's this should
still work uh okay so now that we have a
check answer
down here
what we could do
is
um
we could say so i guess we need to get
the mode
here cased
all right so if the types is new problem
are we passing in
state action let's see what our state is
that we're passing in here just for a
second
uh
mode
okay so we should have access to mode
i don't remember what we called the
different modes though
what did we call them
uh
handle mode picker
where are we adding submits handlebar
picker
dispatch types
okay so that the mode should be
whatever the value is here so
you should be able to just get mode uh
division here so
just like we're getting state value
state operator state we should be able
to get state
dot uh mode
in our
where's the set
in our new problem okay so let's say if
state
actually
actually i'm going to do this now
i don't want to put it in that return
let's do it here
see if i can put one in here
uh state dot mode
equals
division
okay so we're going to wrap this in
our
if statement here so
we do want to
at some point return this right
um but
not not exactly like this right so
what we want to do is call check answer
and we'll give check answer
oops didn't want to do that i guess
that's fine
so you want to give
actually let's let's do this this is
going to be a little weird but um let's
say
uh
i don't know if i want to name it the
same thing but wow i guess we could
well one is going to equal
oops
say let's
r1 equal
random number generator
one two nine
and we're gonna do the same thing with
vowel two
okay so we're going to get two random
numbers here and then we're going to
pass those in
[Music]
about two
okay
so we're running check answer
and
let's make that
um
let's
press equal
so res for like result
equal
check answer so then we'll say
if
res is
greater than zero
then we're actually going to return
something
and what we'll return is
val 1
val2
else
we're going to want to
actually we're going to rerun this whole
thing so
let's grab this and say
statement division
let's grab all of this
put it up here and say
division
division problem
and
okay
else we're gonna actually run
division problem
um
and i didn't
there we go
all right let me go down here now and
say let's get rid of all of this
division problem
okay
that's a state division problem
oops let's get rid of this as well
and
this
all right so let me
all right looks like
i had some commentary on what i was
doing
um
let's see if this works first so here's
what i
think will happen right so
if it's division if the mode is division
we're going to call division problem
right
division problem is going to generate
random numbers
and then it's going to check the answer
okay so our check answer function is
here it's just going to return an answer
if the answer
oops not greater than 0. what am i
thinking i had subtraction on my mind
okay
although it's this will work for
subtraction now too so we could just do
that so that's not what i need it needs
to be
a whole number
um
so
what is that um
i wonder if there's is there a way in
javascript to just check to see if
something's a whole number
or
oh okay uh michael says you just need to
check
um
oh okay now i'm turning
okay michael's saying
it's easier in the check answer you
already have the logic do you need just
to check
um
oh okay i'm seeing this now
oh he's saying check for that in
um
subtraction at the same time
okay all right that makes sense uh let
me put this there okay so res
um
where's my there it is
uh
slow one
and that should equal
let me sing all right let's explain what
modulus is and i'm going to explain it
you all let me know if i have it wrong
it's been a while since i used it
modulus is like the remainder so if
we're doing a division problem and we
have a remainder
then
that means
um it's not gonna be a whole number
right so it should be zero
so like four
divided by two is two there's no
remainder right
um
but if we did something like
i don't know let's say like
four
or uh i'm sorry um
let's say like eight divided by three
right so like eight goes into three
i'm sorry three goes into eight
uh
two times with a remainder
of two
right
so our remainder would be two so when we
use this
percent sign which is our our modulus
operator
we're getting that that remainder right
so
anyway
that's it
okay
um
okay yeah so michael's saying yeah
that's it now hold on a second
okay
all right
i'm sorry where is okay so we're right
here so if we don't have a remainder
right
then we'll return
our our state we'll return that all just
like
we were doing you know down here
now if we do have a remainder that means
we need to get more random numbers so
we're going to call a division problem
again
right so it's going to call itself
and
that's what is that that's called that's
recursion right
i believe that's what we call
uh a recursive function right when it
calls itself so this could
i mean hypothetically this could just
keep going and going but the odds of
that happening are so small right um
if we end up having a problem where it
just takes way too long to get a random
number then maybe we can come up with a
different solution but i think this
should be okay for now
all right so we have that
uh and this shouldn't be that hard to do
the same thing with subtraction but
first let's make sure it's actually
working with division
and
also the rest of it is just simply if
it's not a division problem we just fall
back on doing what we were doing before
which we know worked
all right so let's save that and
go
to our code okay so in about three
minutes i'm going to answer some
questions
in the chat no state is not defined
uh-oh all right so we use state
oh i see what's happening we need to
pass in
let's pass in our mode
actually no where's our
that's not what we need we weren't using
state there where are we using state
here
and why can we not get state there
percent state
all right we're inside of this
yeah i should have accessed the state in
there should i not
let me double check that error to make
sure it's
the one that i thought line
6 and line
16. okay maybe that's not the same thing
okay so line six
oops yep
i need to get rid of state
file one
val2
so we're passing in value one value two
and we need to pass in the operator as
well since we don't have access to state
right there
operator
uh and then line 16
evident oh okay
and line 16 we are
okay so we're trying to return the rest
of the state let's
pass in state here then as well
okay
um
and we'll just continue
to pass in the same state right
uh here which we should have access to
from here okay so then down here when
we're actually calling this
we can call
we'll pass in state with our division
problem right that should give us access
to all of the state
which means when we call check answer
here we should be able to say
state dot operator
because we have access to all of state
let's see if that fixes it
yeah let me know if that made sense at
all i can go over it again i know i went
through it pretty fast yep
um eval can be harmful expected break
statement before case no fall through
okay those are not like critical errors
right now this we should still be able
to test this okay so we have division
six
divided by one
um
dang it sorry my mouse is
there's like some bit of i don't even
know like dirt or sand or something
below my mouse that's driving me nuts
all right
all right i don't need whoa
okay
cannot read property background color of
undefined why would it give me that if i
just tried to submit nothing
okay
i have touches
what a weird error to get
after js
what did that what was that again
51
active theme background color
i don't even remember what theme i have
themes background color
division orange
this didn't happen before right
oh you know what's happening it's
something with the state i bet
um
all right let's see what we're doing
with state let's see if somebody
all right it looks like harshit actually
has a pull request
harsha did you do this well
all right we'll have to check that out
but i
what i think is happening probably is uh
something with the state like we were
so the problem's not in app.js it's up
here um so when we try to return state
here
it is not the same
hmm
okay
um
let's
let me go to the chat so i did say i
would go to the chat when the time ran
out and it actually was longer than
normal since i started the timer later
so i will stop take a five minute break
and then we'll check out harshit's pull
request
and uh knowing her should he probably
solve this in a better way than i did so
i'm excited to see how this uh
how he went about this
um
let's see it's actually cool though like
well i'm assuming harsha did it a
different way but it'll be cool to see
two different ways to do it
um
although my way technically didn't work
because i messed up something with state
all right so i'm going way up to the top
of the chat i'm just going to go down
through and i see there's a lot of
hellos so i'm going to say hello to
everybody
and i'm going to try to just hit the
questions for now
uh we had one question is what is he
doing lol
uh
i like big picture uh making a
children's math game with react native
web
uh just for this stream i'm trying to
figure out the logic to
give uh
the user a
single digit division problem that
results in a whole number
oh okay i got i saw harsha's message
about trying cyprus again so gotta
remember to try cyprus before we end the
show
um and a question which compiler is this
i'm not sure what you mean by compiler
um
if you mean the uh like the ide uh the
code editor it's visual studio code
uh so says how late is it for you
um it's actually early so um
right now it is 8 14 a.m
uh so start this stream at 7 30 a.m
eastern time
i have a question should i learn react
or python um i mean they're used for
totally different things so it really
depends on what you what you want to do
right if you want to do more front end
stuff uh like front end web stuff
learn react um if you want to stick like
back end stuff or machine learning or
something like that then
python is probably better
chris says uh how java or javascript um
again that kind of depends on what you
want to do uh i'm gonna say javascript
because it's both a front end and a back
end language
so it's a little more versatile but
there's a ton of jobs and a ton of
things to do
uh with java
so
um
you know you you wouldn't be going wrong
either way it just depends on what you
want to do
chris says angular or react again that's
going to be a
a preference thing like what are you
trying to accomplish uh what do you know
more of already or you know what is your
team more comfortable with
um nick says hello i'm fairly new to
programming uh mechanical designer for
15 years but i want to get into some
coding for enterprise systems any
recommendations for languages or
starting point uh enterprise systems
uh i mean you'd have to look up maybe
like exactly what systems or what
companies you want to work for but um
enterprise systems
from my experience are more likely to be
on something like java or net
you're less likely to find like node
apps running for enterprise but i mean
it's starting to change a little bit
um but like that's just been my limited
experience though so i mean i would you
know do more research on what systems
are using at the big companies
um
all right like michael looks like maybe
has a
comment on harshit's pr so let's go back
to that i'm not going to start another
pomodoro timer because i'm gonna have to
finish up the stream in a few minutes
so the last thing we're gonna do is just
check out this pull request
and we may have to leave this stream
with
kind of unfinished we'll see
all right so here's y'all can see this
i'm just going to read it out quickly
um
let's assume we have two random numbers
between one and nine like three and
seven we're multiplying which is three
multiplied by seven equals 21. now 21
divided by 7 or 21 divided by 3 will
always be an easy problem as 21 is a
multiple of both these numbers also it
resets problem
now uh if you
change a mode
okay
okay actually i didn't realize we didn't
reset the problem before
all right so let's see what's actually
happening this is our reducer.js file
okay
um
all right and harsha did put in that use
ref
because obviously i hadn't pushed any
changes up yet
okay so if
we have our new problem here if the mode
is division
we're getting our random numbers right
and then we're multiplying
those two random numbers
uh we're saving that to
z
right and then
we're returning
z
and y so it would be like z divided by y
okay
um
okay
state mode operator provide
and then
returning
type types new problem
oh okay so this is just doing a new
problem okay so i like that um
here's the thing though
we'll end up though with a
a number that's greater than two digits
here right
uh
so this would actually
this could potentially work
but
we would have to change the max number
right on here so
publish an update refresh you can limit
it okay so it looks like there's an
update so let's refresh
all right if z is greater than 30 return
a new problem
okay so we could potentially just change
it here
okay um
all right what do you think
so
i guess everybody in the in the stream
now let's let's do a comparison then all
right so in in this case
for this would work
and then for each mode
we would
just
change this value so this
um
i guess we would end up saving
i'm sorry for each level
so essentially this would change for the
level
um to increase
like the max amount that it could be
right
[Music]
this is nice i like this so this
compared to
i guess
what we had done here
where
we kind of have a
we're actually like checking the answers
of our problems and then running through
this
until we get one that works okay so
let me know what you all think
i'm gonna take like 30 seconds to see
what you all think and then i'm gonna
tell you what i think
let's see
all right uh let me see what some of you
are saying
um
okay so
harsh it's saying if you just check so
the the issue that's raised in the chat
here is uh you know this would still
return something that's
uh two digit numbers arch is saying if
you just check
to make sure
z is not greater
return reduce or stay types any problem
then we're just going to call new
problem again
okay so either way it's just going to
keep looping right and it's it's going
to keep going through that
um
the benefit of this one i would say is i
mean i didn't test it yet but the one
that i did
is throwing an error right so
uh i'm assuming this one wouldn't
uh
so
let's let's try this out
let's see if i'm gonna have time oh i
might not have time
i gotta end i got a meeting at 8 30 so
that's why i'm i have seven minutes
right now
uh all right let's see if we can
if we can get this in here
really quickly
um
get
check out
b
um
division all right so i just switched to
another branch here so i could save what
i have
okay and let's go get
commit
all right so
i'm trying to just go really fast here
all right now we can do get
um
get fetch
oh what is it i always forget it
um
i test a
poor
request
locally
uh and a locally fetched i got a pull
request
get out of here i don't want this bit
bucket i want github there we go
there you go get fetch origin pull okay
so what's our id
[Music]
fourteen
full
fourteen
and then
almost had it
head branch name okay
h i'm going to say h division for
hardship
cool
good check out
uh h
all right
now let's try this out
sorry i didn't explain what i was doing
more i just i got to go fast because i
got a meeting
um
let's see
all right so we get i forget the changes
let's change this down to
nine
we want it not greater than nine
okay
seven seven six six nine one
one like three six four four two
seven seven eight two six three six one
looks good
you know what i'm just saying like uh
occasionally we get the same problem in
a row
we may want to put logic in to say like
um
don't show the same problem twice in a
row
so
dang it
i'll have to remember to add that maybe
as an issue or if somebody else wants to
all right so uh harshit solution works
i'm gonna go with it because it works
um so i will be
i guess
let's let's merge this in
now
you can merge from the command line uh
so i could do that right now or i could
just
never mind i'll just do it i gotta go i
gotta go to my meeting so i have to stop
basically uh what i'm gonna do though at
some point is i'm going to merge this
pull request in so we're going to use
what harshit did i believe it
accomplishes
uh the same thing without errors in less
code which is always good thank you
harshit
and then i'm gonna try to remember to
put in an issue to say we need to check
and make sure we're not giving the user
the same problem that they just answered
okay
um
harsha says yeah that's not my fault
yeah i'm not saying it's your fault
hardship that's just it wasn't part of
the
it wasn't anything that we had thought
of yet anyway so
um
and it happens with all the other modes
as well
all right awesome so
i don't think i missed questions but if
i missed your question just put it in
the comments below this video or send it
to me on social media or something uh
thank you so much for
hanging out with me this morning
um
i'm buying a house later today
so
i don't know if i'm going to stream on
friday or not because i'm going to be
busy moving into the new house oh
harshad says cyprus you cyprus though
all right one last thing before i go
let's use cyprus
what's my code so
yarn e
to e
what
package json
oh i forgot to run
i've got to install cyprus
always remember to run yarn when you
first do your get pool in the morning
i've said that a million times on the
stream and i forgot myself to do it
what time is it oh i have one minute
till my meeting
come on
come on yarn
no
i'm not gonna be able to get it in
all right i'm waiting
so the
the meeting hasn't started yet
why why is it taking so long
ah har i might just have to wait i
got i gotta go i go to my meeting um
all right so
i may just have to wait if anybody
doesn't want to wait to see cyprus go
ahead fork this repo uh clone it and you
can run it on your own uh the command is
the same as it was before yarn e2e for
some reason
it's not
working for me right now what a terrible
time to not work um
uh harsha says downloading chromium i
thought you had i thought i would have
had it too because i was using puppeteer
anyway um yeah next time i will
definitely try out cyprus and we'll do
that the first thing so i don't run out
of time or forget
um anyway thank y'all for watching and
um hopefully i see you back here next
time until then have a great day a great
great couple days great week