Hello and welcome to Donald Vlogsifys Wood Shop. I'm your host Donald Vlogsifys; also known as Donald Matthews in reality.
Back to the bench! We gonna get started on the apron.
I've got my legs ready.
We're gonna cut this apron to length and...
start working on recesses. Maybe do a little bit of planning before. It depends on how things look.
Has a little bit of curve to it when I lay it up flat against this. So I'm gonna plane it down some. Yup.. yup.. yup
Okay one end...
isn't quite square or uneven as opposed to the other end.
So we're gonna square it up. I got it marked. I just got to finish bringing or running a line across.
And cut it.
Now this board has come up a little bit long.
So what I'm gonna do.....
I got three inches marked.
Got three inches marked here. I'm going to turn this up on the side and kind of even things up here.
And... mark this three inches.
Now I'm gonna cut some wedges.
Now I've seeing as how this is a two by four...
Which is going match up with the top part here. All I got to do....
For this wedge is mark up under here. This board is square. I checked it before I started videoing.
Do that.
And there's gonna be one inch
This is gonna be the inch and a half.
Vrrrroooooommm.... Actioncam yeah, okay. Then we'll take this piece
Line it up there.
Now I'm going to do the same thing, I just did here with the wedges and mark the other side of the apron.
Or the other piece of apron. Whatever you want to call it.
So I'll be back when I'm done doin' dat. ummmm mm-hmm
Now I'm going to establish a knife wall and then start hacking this stuff out with a chisel.
Fun Fun Fun!!
Ohhhh Boy, oh joy
Yeah, actually it is. Especially if you're upset or angry. It works out your frustrations.
One down four more to go
Alrighty, then this project is already starting to run a little bit long.
So I'm gonna continue it in another video. ummm...
Because I got a lot more stuff...
to put into it.
And that would make this video dang near a hour long.
So we're just..
gonna continue it in another video.
Thank you for watching.
I'll come back on the next video hope hopefully... well dey aint gonna be no hopefully.
In the next video, I'm gonna be putting the apron on the legs and then the workbench
together
This is the plan. I will stick to this plan. This project is just turning out to take a little bit longer than I anticipated.
Which is the way with most of my projects, but this being a larger project, It's taking a bigger chunk of time.
Yeah, make sense to me. Thank you for watching
Please subscribe and click that little Bell up there when you do subscribe so you'll get notified when my next video comes out.
Follow me on Instagram Twitter and Facebook. The links are down below in the description.
Mmm. Is there anything else? Give me a thumbs up. Pretty please give me a thumbs up. Say something in the comments.
Tell me I'm taking too long or whatever. Tell me. I'm doing a good job. Tell me I'm doing a lousy job.
Say, I'm an idiot. You know whatever you need to say... want to say... feel free to put it down in the comments.
If you've got a question, I'll try to answer it. Not sure I can but I'll try.
um
Thumbs up, like, share my videos if you happen to like them. Check out my other videos. Annnddd...
Above all else have a lovely day. Have a lovely night. Have a lovely whatever your lovelyin'....
Have a lovely life because life is short, and it's meant to be enjoyed.
PEACE!!
Bye bye
For more infomation >> Building a New Work Bench for the Wood Shop Part 10 - Duration: 16:26.-------------------------------------------
Setting Up Your Data & Prepping Your Environment: How to Build a Successful UI Automation Framework - Duration: 8:50.
So we're getting started if you look here in the source control repository I
have - I'm using - git which there is also I will post here in a little bit a link to a
github so you guys can pull down all of this info and see the kind of process
that I went through step by step. But the main thing we did here at first is
setting up just basic our basic structure we have our scripts which is
going to house all of our framework scripts so we have actions, data,
event handlers, different utilities, and verification scripts. We have templates
that we create a project template and that adds all of our scripts and our
name mapping files as existing items so you can then go in and clone the
template and it copies all these references so this allows you to update
only one script unit and have it propagate to all of your tests and then
some basic utilities nothing in here yet so the first step that I was talking
about is to get familiar with the application. So for my example I'm using
today I'm using notepad and then later I'll be using notepad plus plus to show
you how easy it is to switch between different versions and environments of
the application. So for today let's just assume the only requirement we have is
that you can pull test data, type it in, verify that what is on screen matches
what you typed in, that you can open and close the application, or you can save
what you typed in. And so we're gonna walk through process to create these
utilities that we need to make this happen. As you can see the first part
just kind of getting familiar with the application, I went through and just did
a straight record of all of the different elements that we're gonna be
interacting with just so I can kind of get an idea of what we're gonna be
working with here. So you know we can see how our menus are set up we can see that
we actually have a window edit the process name for notepad so on and so
forth. So let me go ahead and check out the branch where we have a little bit more
stuff going on a little more meat in our project here. So you can see here now we
have a smoke test project like I was saying that'll probably be one of the
first sets of tests that you want to create. We have a few more things in our
utilities now and we still have the same scripts that we had earlier. So in this
part you can see that we still don't have anything in action so we're not
even to on-screen actions yet but we do have some eventhandler stubbed out, we
have nothing else in the script genius yet. So we do have a name mapping
and what I've gone through is mapped the different elements of the test you can
see they're still hard-coded to very specific areas. The problem with this is if
we ever decided to run in a new environment or a you know different
version of the application and they put some different elements in between our
main window and our edit fields this test it's going to fail because it's
hard-coded to expect a certain way. So moving on to the next part we'll get
into the really fun stuff and that's setting up your data and prepping for
your environment so for the sake of time I'm going to skip through the first
couple parts of it and just get it to where we have some stuff working.
So you can see here now the name mapping that we had before we actually have
project variables set for the identification properties of some of
these. And this comes into play because the next part is setting up our
environment so you'll see I've used event handlers here. TestComplete's built
in a vest event handlers for starting the test and stopping the test and these
will fire off from a minute you could play until the test is from how many you
play it'll call the start start notepad test and when it stops it'll called the
stop notepad test. There's nothing in here right now what you do see we have
something in our utilities and it's called set up environment and so
basically what we have is a script here that will pull our environment data
based on two different versions of the application dev and test so I have pass
to our config files and we actually I'm using a Windows environment variables so
you can set this remotely you can set it to dev or test and then when you do that
it will open up or it will assign project variables to things like our
main app path the process we're expecting main window so on and so forth.
You don't have to use a config file the way I did you can pull it from database.
There's several different ways you can go about it but the main
important thing is to make sure that your tests can switch between
environments easily inside actions we have our open Notepad and close notepad
and what I did here is actually made both of these have an optional parameter
it's called verify so what this does is you'll see when we add test items later
the first one we're going to run first no custom verify the app can be open and
closed if it fails at any point in that then we'll stop the project log and say
hey there's no point running the rest of these tests because we can't even open
the application now. The thing is once you've ran that test you verify opens
you're not necessarily going to want to have to run those checkpoints every
single time it adds more time to the test it's really unneeded so that's why this
can be set to false and then it will just open the application and not try to
verify its existence. Down here you can see I've already started stubbing out
some actions for our main menu and so the like I said earlier our requirements
for this test for this application is just that you can open the application,
you can exit the application, and you can save. And the reason I set it up
with a JavaScript class for the properties for like the menu options and
everything like that it's so that your test can just call the, "hey, I want to do
the navigation option to save my document" well if that ever changes or
moves to a different menu or there's another dialog that pops up in there as
you're going through that process all you've got to do is update this one area.
Your logging stays consistent, you can now have your new path set up to
navigate to that part of the application and all of your tests are working again
without ever having to go touch an individual test.
Like I said, routine building blocks for tests here not the project for the tests
themselves so you can see we haven't added anything else to any of our other
tests yet except our data so we're gonna be inputting data and again here you
want to make sure your tests aren't responsible for the logic of getting
data all they need to be able to do is call a utility that returns the data
that you're expecting. I used classes here again and I'm setting I've set it
up to connect to an excel sheet as a database that's why you have the
different select statements here when the main reason I do it as an object or
a class in here as opposed to just referencing the data itself is you know
what happens if they decide they need to change a column name or what happens if
they say hey we need another column in our data in our environment
well the nice thing is if that happens all you have to do is just go modify
this one spot and it'll look through all the columns that you're inputting
without having to model by the tests themselves. I'll show a
little bit more about that here in a minute so that's kind of a basic set up
for our data and environment setup
-------------------------------------------
Using On-Screen Actions: How to Build a Successful UI Automation Framework | TestComplete - Duration: 3:38.
So I'm going to move on to some on-screen actions. So at this point we
have our environment setup and teardown taken care of, we have our basic
navigation of opening and closing notepad and getting the data that we
need to test the application. So now that we've done that you can see I have two
more utilities created here: one is input test data, one is a utility to interact
with the save dialog that appears, and one is to complete saving the data to a
file. So again, we've abstracted the actual logic of these so the
individual tests don't have to use this it's really just building the data
putting together the building blocks to create the test based off the utilities
that are created in the framework, and, as you can see, our get test data is being
passed around through the different utilities and it will basically what's
gonna happen here is when we get the data we assign certain things of the
data that are our input steps and so the utility here actually just sleeps
through all of our input data and then does a verification if you want it to.
And so this is what I'm saying if you need to add another column or more data
to your input you don't ever have to go update a single test you just need to
add a new line to your class for your test data object kind of same with the
save dialog we are abstracting the logic into the the framework so the main
options are save, don't save, cancel, none, and so this allows you know say the
dialog changes say it's you know not a dialog it's a new screen on the
application or something like that you can go and update these to just change
it in one spot and then all your tests that need to verify that something is
saved they still work again without having to worry about the logic. The
framework handles the logic and let's see we don't have any
verifications yet but we do have a few more things added to our contest
starting on test stop because we are now starting to get to the point where we
can actually save stuff and we're going to move on to verifications. This is
another part of environment setup and teardown and make sure the path that
we're going to save our results to is clean and empty so we don't run into any
overwrite errors or anything like that. I've also added a few extra utilities in
here it'll indent and outdent the log and add log folders for you,
logging our return data from our test data and added a few more things to our
setup environment and these are all still being used around everything else.
So at this point we can actually open up our smoke tests and you'll be able to
see that I have a few smoke tests created. So we have the verify open and
close, verify inputs text correctly, and verify that you can save. And if you
noticed none of these have any individual according we're just calling
the utilities and passing the data around
-------------------------------------------
Getting Started in TestComplete: How to Build a Successful UI Automation Framework - Duration: 4:54.
that's kind of what I'm gonna be talking about here today is how to set up a
really good reliable and useful and easily maintainable automation framework
for UI functional tests. So we're gonna what we're gonna talk about here
is the process that goes through it. Automation frameworks kind of follow
the same thing that we're just talking about earlier with define decompose and
decide, so you kind of do the same thing with an automation framework. You
want to keep your actual logic for how the application
flows separated from your individual tests. The main reason for doing this
is it allows you to easily update in one spot if application changes whether it
be how its laid out on screen actual flow for doing common test routines
basically anything so you can update in one spot and however many thousands of
tests you're running are not broken when you get a newer version of your
application. So I'm gonna walk through the agenda here in
the PowerPoint and then I will get into kind of more of a live demo and
presentation for how to actually go about this so first of all you should
always be using source control you want to get your project structure your test
asset structure all of that set up the get-go it'll make your life a lot easier
in the long run if you have a really good organized test asset. You want...
first thing you would want to do is familiarize yourself with
the application do some exploratory testing start working on some basic name
mapping or object identification if you're doing it that way and just kind
of take notes on what your common flows are and what you're going to need to
create as far as utilities for your tests to use. One of the biggest steps
is you know we live in a world where there's all kinds of data being passed
around we're running on different environments especially if you have some
kind of continuous integration set up so the first thing you want to do from the
get-go is make sure that your application can be set up tore down data
can be grabbed from your test databases web
services or however you want to do it and start sitting up a smoke test
project because that's going to be your most ran tests every time you get any
release you're gonna want to be running smoke test before you even kick off the
full regression of your new release. You want to keep kind of your data that
you're getting from the wherever you're pulling it from whether it be an excel
file a test database a love service and kind of abstract that data out into your
own objects with inside of your framework. This allows you to not have to
rely on the layout of the data being static doesn't allow so you didn't have
to rely on it being in the same place all the time and so your tests you focus
more on testing the functionality of the application not the logic behind how to
get the application running in the data you need. On-screen actions we're gonna
do basically the same kind of thing we do with the data we're gonna make sure
that the framework handles all of the actions that you're creating and so when
you get ready to start creating test you don't have to worry about that logic all
you're doing is putting in place different building blocks. I kind
of like to equate a UI automation framework is kind of like a mini
application where you're developing tools for other automation developers to
create the tests any actions that are going to be interacting with your data
you want to be able to use those same data objects that you're creating in
your data scripts so all you have to do is just pass one object around all of
your tests and you always know the data that you're gonna have is going to be
there you can verify your expected results and make sure your application
is meeting its requirements. You're gonna hear me say this a lot make sure
everything kind of interrupts together your verifications you know if you're
grabbing data and putting them into a text field and you want to verify that
the data is written correctly well you don't want to hard-code any of that you
want to use the data that you got and verify the application behaves specific
there behaves to meet the requirements. Again we're still everything kind of
works together we're making building blocks here and I'll show you what is
really useful and why this is a really good idea to do when I get into the live
presentation and then finally if you've set everything up properly it should be
very easy to ajust how you're logging exporting your
your test run logs to a specific network share or web server reporting being able
to send out emails to alert people that you know build failed hey we have
problems we need someone looking at this so that's kind of the the really high
level overview what I'm going to be talking about
-------------------------------------------
Creating Your Tests: How to Build a Successful UI Automation Framework | TestComplete - Duration: 6:46.
Let me go ahead and switch over to a printer that has our verifications
included and I'll show you just how easy it is to start writing tesst once you
have a good framework set up. Okay, so you can see here we have a few more
verifications; we have a new method to our data object that's calls verify
saved data and what that will actually do is take the expected data that is
built from our test data. When we save a file, it'll set properties on this object
to the path that it's safe to and then it will actually verify that the full
contents of the file matched what you typed in so for part of that we also
added in some verify that the files are saved inside of our save dialogue and
saved file scripts it sets properties of the data object that we have and then it
returns it again so I'll show you here just kind of how
easy it is to write a test you need to write a new test all you have to do is
drag over some options so open notepad we will get test data we're gonna get
test data that is a type of company
and if you remember that returns the test data object we're gonna do another
actions and we're gonna say input test data and for the data object we are
going to say that is the last result which was the test "get test data" and
we're also going to say true on this clear option. So basically what that's
going to do is it will clear out anything that is currently in notepad in
case there is and then we're also going to say verify and it will say true to
that and basically what that's going to do is everything we type in there it's
going to verify that it shows up on screen correctly and then for our last
action for this test we will do menu navigation and what was the option I
gave for that how did it go so many navigation and it's just exit that makes
sense. So that brings me actually to a another point that I want to make if you
know. I missed it even for me who wrote this sometimes it gets a little tricky
remembering where certain things live, what they do, what you need to call to do
certain actions on your application, so I highly recommend either building your
own or using some kind of free open-source tool to generate
documentation. I actually use one that's called es doc all you have to do is if
you have node.js installed it's an NPM package and what it does is it'll parse
your block comments and give you a nice clean web page for documenting all of
your framework utilities. So like I saw here the or I mentioned earlier the menu
navigation so it will say hey whether the option is and it's from the nav
options object so you can see here that we have X
and save. So within very little time at all I've created a test here that will
actually open up notepad get test data from our test database and put the data
in and exit the test so if you see here I actually still have that pop-up up so
and that's because I forgot to let's see did I not put that in yet so actually I
shouldn't have done the fall nav option I should have done close notepad because
if you see here that has a default of bypassing the save dialog. So let's go
ahead and remove that guy and do close dialogue or close notepad and if we run
that again it should actually close for us.
there we go so let's do a fun little test here, hopefully that'll work for me
better and then it did this morning when it didn't work for me so let's say we
just got a new version of the application from dev and or the purpose
of this demonstration I'm gonna say that the new version is just notepad plus
plus and so we actually set our environments with Windows environment
variables like I said before and so just to kind of show an example here, here's
what notepad plus plus looks like here's what notepad looks like. Looks like we're
probably not gonna be able to run the same test we just created, right?
So let's try it and see how it works.
And there we go! Aame test completely different application changes were made
to it but because we've set everything right up from the get-go we're still
verifying functionality of that you can see it's still putting in the keyboard
it's still verifying that the everything matches what we want same test exactly
completely new version of application with changes we didn't even have to
update anything except our environment config
-------------------------------------------
Building a CNC Controller for Under 120 Dollars - Duration: 12:26.
What's up guys, This is chase from chase's workshop in this video ill show you How I built my CNC controller for under
$120 dollars. this is the actual board right here
We're gonna go through all the parts where to get them how much they are they're all gonna be links in the description too we
Can go down and click on them and go buy one if you want to this helps you out
Please give me a like if you liked it. Please subscribe. Thanks for watching guys
Our guys so real quick
I'm just gonna go over all the parts and then we're going to zoom in and go over them individually so
I always have here. It's not a lot, but it looks like a lot of no
I've got the four driver boards these two are both for my y-axis. I've got a wild one in a white X
I have two motors from our y-axis
And then I have a x-axis and a z-axis
These boards are here are smacking. I think's how you say it smacking like I said, they're linked in the description. These are actually
$14.90 now when I bought them, they're right at sixteen seventeen dollars
So like I said, they're cheap. They have a revised version of these, but the the revised versions
Don't have a good reviews as these I guess because they're new or new all the kinks worked out in them. These are actually
Rated from nine votes to 42 votes so if you get a 48 volt power supply make sure you adjust them to to work
under their specs
The next thing I want to go over at quick is does this breakout board I got this from CNC for PC
comm
They also actually sell these on Amazon now
So I'll link that in the description to the same company doesn't have a lot of good stuff to there if you haven't been there
And seen what they've got
CNC for PC
Dot-com they have all kinds of different things. I'll link them in the description to you. There's a lot of good stuff
This was actually this right now. It's 23 dollars on Amazon
And that the board that I'm gonna linking it looks a lot different than this board a lot of these components and stuff for
Surface mounted underneath now and so this top just looks bare when I first saw it
I was like that that's not the same board but according to do miss exact same board just smaller components and stuff for it and
like I said 23 bucks on Amazon so
$14.90 for each of these and
$23 for this board here the power. Supply is a 24 volt
15 amp power supply about this one on Amazon - and it was
Linked in the description is $23 our $21 $21 right now, so like I said a while ago
if you won't use a forty eight votes make sure if you're going to use these drivers to
Adjust this little potentiometer here down to where you're only giving out less than 42 votes, so you don't fry your driver boards
This right here is just the old computer supply that I that I had lying around
Technically, I don't need this you could just borrow five vote
Power supply or something, but I was thinking in the future
I'd like to have maybe an Arduino board in here something that I can run different things with and so I put this in here
All it's doing is it's sending five votes to my breakout board
And it's sending power to a fan which I have disconnected right now because this stays open now
And I hadn't put a top on it yet
But anyways now we're gonna go I'm gonna zoom in and go through all the different parts of how to hook them up and stuff
Like that so I'll stick around okay
Guys so here's our driver one of our driver boards that we're using and like I said you can see down here
where it shows you your
voltage rating nine votes - took 42 voltage DC
These are just receiving power right here that whatever your power
Supply is is feeding to this voltage DC plus right here, and then you have a ground so it's coming off of
the power supply - here
We're going to go over how the breakout board connects right quick it just comes in
With two P or 3 pins actually there on your breakout board. There's a there would be a pin -
Then there would be a common between it then they're a bit pin 3. I've got on this one you can set up
However you want to but on this one
I've got the pin - coming in and going to direction pulse right here are the direction. I'm sorry right here
So it's on the red, so it's going to this one here
Okay on the common on the breakout board. We've set the breakout board to
Send common as five votes
Plus five votes, and I'll show you when we go how to do that
But anyway so that that's this red wire coming in right here
And this is five votes coming in and it's feeding right into the direction
Plus five right here as you can see
Direction plus five and then there's a jumper right here that circling around and coming to our
posts plus five votes
So that that common that we're running from the breakout board is going to both of those and then the number three pin
That's on our breakout board over. There is coming to here and
It's actually the pulse so we have a direction in a pulse coming from our breakout board
And we have a five boats coming so Direction one pin pulse one pin and then
Plus five votes is another pin over there so each of these job boards is getting
three wires from our breakout board
And then this is where the motors hook up these four wires right here you have
a B negative B plus and a negative and a plus and
Those are pretty straightforward when hooking up your motors and stuff you can figure that out
Once you get your motors did a lot of research. I mean you this really simple so
Like I was talking about a while ago. These these dip switches. They're back here on this backside right here
You know and there's there's six of them, so there's there's three right here and this first block
Try to move this other way where you can see it this first block right here is
The actual first three pins the second block is the next three pins
And so you just go through there what your specs are like I said mine. I'm using let's see
my conception uses 8 micro steps
and that
Tells me I need to off on off for my first three so the first one needs to be off
Only second one off on the third one and then like I said my aunt my motors are pulling about two amps to point to
Peak
Currents to point to somewhere around there
Are two point o2 to point to something my steps are owned off off for the four five and six ones?
Like I said these are
Easy to figure out I mean you can look at them and figure out how to do it
So that's really all there is and like I said this board is
$14.90 on Amazon, so like I said it'll be in the description so you can get one just like it
Okay, and here's here's our power supply and like I said, this is a 24 volt 15 amp power. Supply it actually has three
Different
Voltage pluses out so we have a voltage here voltage 24 volts here 24 volts here 24 bucks here
And we have three ground ground here and here ground ground here, so
For these first two drivers are here for my y-axis
I'm using one of these legs 24 volt leg coming up here, and it's just going to here
Voltage for a driver and it's jumping to this side for voltage so it's feeding both of these
Then I have a ground coming back to my purse on the ground
And then this white one comes up here and goes to my other driver board over here
And the ground come back to here, and then the black goes up here and goes to this driver board back over here
And comes back so the this is why are these UPS pretty simple if you wanted a second board?
You know you second power supply you could mount it next to it
And you would just instead of using this red going to these two and you would put red from?
This board over here to these two and then the ground back to that board so
That's pretty that's pretty simple pretty self-explanatory
Like I was saying while ago. There's a little dip switch right over here on the backside of this
That you can adjust it up and down for like this is if this was 48 boats and this board doesn't
The specs are
442 votes you can come up here and you can put you a
Meter here and adjust that voltage down to where you're not
putting 48 votes on to your 42 vote driver board
That's pretty much it on that
Okay, here is the breakout board?
And I got tenure while I go
We had to set these Commons
So you can see a common is between each of these
Like we have pin two and three there's a common right below that we have four and five here. There's a common there
Six and seven common there seven and eight common eight and nine common so we have a common between every everyone these
output pins
Alright now if you look at this pin right here are this I guess this will be pins
If you look right below it it says 1 2 2 is a common
equals ground and
then if you flip this to 2 and 3
2 2 3 common equals 5 votes
so you want this to be on 5 votes to send five votes to each of our boards and
Like I said a while ago. I've got 2 & 3 hooked up to one one board with the common or to one driver
4 & 5
Coming to a driver 6 & 7 & a common to a driver & 8 & 9 & a common to a driver
so
that's how that's
Easy-peasy hook up there
of course you have your parallel port that comes in right here from your computer and
You have this right here is actually I'm sending a
voltage out and bringing it back on
Pin 15 and this is for my limits I have limits on my
My machine to where if it gets if it hits a certain limit it shuts the Machine down
and then we have our ground and
5 votes coming in and then I jumped this - I don't remember why I did this
But I know you need to to make it work
Jump the five votes to eat in here. That's it this pin says Ian on
en
And you have some more inputs here, too, we could do more if you wanted to you can do more
send more limits out of you and limit for each of these or happy wanted to do that and
That's really it on the border
I will make make sure if you're gonna get on these boards make sure you have a computer that has a parallel port
If you don't that I do have
USBs two parallel, but I've never used it
So I don't I don't know how how all that works if they work good or not?
And if if they do or if you're gonna do that I would do a lot of research on them yeah
That's it for this video
If you have any questions comments, please leave them below I'd love to help you out and getting your CNC machine up and running
If you need information on how to hook this thing up to Mach 3 or any other software that your controller software
Just search on youtube. There's a bunch of good videos on YouTube about Mach 3. I use Mach 3
you can figure out how to hook these pins and different pins up to the
Breakout board stuff like that and it's not hard at all
But if it is hard
Let me know I'll make a video. I don't care
I'm wanting ideas for videos, so if that's something you want me to do
Just tell me hey chase make a video on it ok, I will
also, tell probably gonna make do it do it maybe a
series where I'm going through like my
Workflow and basically where the workflow is if you know what to see and see you know what that is you've got a CAD program
a cam program a controller program
And then you know everything how I get from there to
To a product and idea in my head to a product in my hand how do I do that and I'm gonna go through it?
so I'm
If that interests you please subscribe, and if you liked the video, please give me a like. Thanks for watching guys
Không có nhận xét nào:
Đăng nhận xét