Hey guys and welcome back to another Python tutorial. So in today's tutorial we're going to be doing something really interesting which is creating an API which is going to be based on an EPOS system. So this is going to be a really basic tutorial on showing you guys how to create a really really basic API using Flask and the API is going to be around the concept of a restaurant management system or an electric point of sales system which is EPOS. So to begin with what I want you guys to do is open up command prompt so that we can install all the required modules such as Flask which will allow us to basically host our API. So first off open command prompt and for me I usually like to open it as administrator to basically avoid any errors and stuff that can happen. So open it as admin and then pip install Flask. Now it's going to do its thing. For me it already says requirement satisfied because I've already installed Flask before actually starting this tutorial. So that's one of the things you're going to need along with another module that's called Flask underscore restful. So this module basically lets us create a restful API meaning that it's going to give us the ability to create, delete, update or forgetting another word or read data from the API. So that's basically what an API is in general it lets you request or post data to it based on different endpoints and you can also do other fancy stuff with it. So enough of me talking let me actually install this and as you see again it's saying requirement already satisfied because I've already got this installed before actually starting this tutorial. So once you've got both of this installed we're actually good to go. So I'm going to close down command prompt, go ahead into visual studio code and then open up a new file, save that as I'm just going to save it to my desktop for now. Call that eposapi.py and then save that up. Now I'm going to zoom in a little bit just so that it's easier for you guys to see and the first things we're going to do is actually import all the modules slash libraries that we're going to need to basically code this API. So first things first import from flask we want to import the flask class and then the request. We might not actually end up using request but we're just import it anyway. The second thing you want to do is from flask underscore restful you want to import resource and API. Now these two classes are basically going to let us well look at the different data that's being passed in by the user as well as just handle different actions of the API and initialize the API itself. So once that's done we also want to import another thing from flask restful which is basically going to let us pass the data that's being given to us while users do post requests. Now I'm going to explain that a bit more in depth a bit later when we actually code the post requests. Now post request is nothing more than just the user wanting to store some data into a database so they basically send that data to an API then the API will post that data save it up in a relevant table somewhere in database so that it's saved. So we're going to from flask request we're going to import request pass basically what it does is it passes all the requirements or parameters that are passed by the user and then it will give it to us as a dictionary but I will explain that in the end. First things first we want to initialize the flask class and the API library so this is just part of the setup before we actually start coding the actual meat of the system which is going to be a few functions and classes but we have to first of all initialize flask and then the API needs to be attached to the flask web server as well so to start with create a new variable called app and then assign that to the flask class that we just imported and then we will have to pass in name as a parameter as well. Now the next thing we want to do is actually attach this API so the API module needs to be wrapped around flask because it was built on it so what we need to do is create a new variable called API equals that to capital A because that's the class API and then we need to assign that to app so basically what that does is it wraps around the flask web server or the flask class that's all the initialization stuff done. Now what we want to do next is just for the sake of this tutorial and to keep it simple I'm not actually going to implement this with the database but rather save all the data into a dictionary so I'm going to create a dictionary that's going to be called just let's call it database for now actually let's call it RMS which will stand for restaurant management system and then that's just going to be a blank dictionary for now. Now in a dictionary what we could have saved is things to do with the restaurant because an ePort system will of course have to remember things about the restaurant such as the restaurant name the phone number the address and so on and the main sort of thing that the ePort system will have to remember or must remember is the different items on the menu the pricing of the item on the menu and then the inventory such as the item so how many the quantity of the item so let's start by creating a default key in here which is going to be called restaurant and then the value of that key is just going to be let's say another dictionary which is going to be name and we can call our restaurant KFC for now because it's quite a popular one then we can create another key for phone number and the value would just be a random string so 0789 something something something and then we can create another key for address now obviously you can be as creative as you want but just for the sake of this tutorial I'm just going to create three keys and values inside this restaurant key so I'm going to do something like 122 new clothes London right so we'll just do that for now so we've got a restaurant we've got the restaurant details saved up into the RMS dictionary nicely done now we're just going to put a comma in here and then I'm going to create a new key called menu now this key called menu is basically going to store all the details such as the different items on the menu and then the quantity of those different items as well so just as an example we're going to end up with this item whenever we start our server so as an example inside this menu dictionary I'm going to add a key which is going to be called let's say wings and then we'll assign that to another dictionary so basically we've got menu which is the key that's inside RMS and then we've got wings which is part of menu so it's one it's actually the first item in menu now since wings is a key and the value of wings is another dictionary we could add some more details in there such as the price so obviously each item will have a price and let's say wings are pretty expensive and they're 5 pound 50 for now and then another important one could be quantity or remaining or you could just call it quantity I'm just being very specific and calling it quantity remaining and then I'll do something like 30 for now so that basically will be the structure of our RMS sort of dictionary that's acting as a database for now in a in a real-life scenario you would obviously save these details into an actual SQL database or a non-relational database such as MongoDB but just for the sake of this tutorial we're just going to save it into a short dictionary now the API will obviously let us read the data from this RMS dictionary and give it to the user based on different end points update the data in this dictionary and also delete and add more data to this dictionary so we're mainly going to be focusing on this menu dictionary here so once this dictionary is done this is sort of our presets or template because we want to have something in it when we start the server otherwise it's going to get really confused so once we're done with that what we need to do next is let's create a class which is basically going to be called a restaurant so our class is going to be called restaurant and then inside the class what you want to do is as an argument pass in the resource class that we imported earlier so up here we imported the resource class from class gristful we need to pass that class into our restaurant class right here now once we do that there are specific class names that are reserved in here that basically represent different requests so basically I said class names but what I actually meant is methods because since we're in classes we can create different methods or functions so the specific names that have been reserved for certain requests so if I did def and then get which basically stands for a get request and then I can basically type in self and then something like return and I'm gonna say welcome to RMS so what I've just now done here is I've created a class and then pass then resource as the parameter and then inside class basically what flask will do or flask underscore restful will do is it recognize recognizes get as an inbuilt sort of method that will be a get request so every time a get request is made and this class is run basically what we're doing what we're going to be doing is we're going to be returning a string called welcome to RMS now obviously this is not just magically going to work so we have to sort of assign this to something before we actually get it to work so what we need to do is we need to create sort of a map for all of this to be shown so there's different endpoints on an API based on which data is shown so we're going to be creating those endpoints right now so we're going to be calling this mapping classes to different endpoints right so let's call it that for now and then earlier we created a variable called API which was assigned to the API being initialized so we're going to be using that to basically map so we're going to do API add resource which is like adding a page or adding an endpoint if whichever way you want to think about it and then in this what you need to do is provide the API with a class that it can basically run so I'm going to say the class I wanted to run is called restaurant and it's obviously up here so it's readable and then I'm going to say the endpoint I want this to trigger on is going to be forward slash so basically what that means is every time a user loads up just a default page of my flask server they'll end up on this endpoint which is forward slash and then this restaurant class will be run when the restaurant class is run the flask library is going to go oh is there any requests in here that I can deal with and it's going to see the get requests right here and then it's going to say okay I've got a get request so I'm just going to return to the user welcome to RMS now that's the very theory sort of explanation of it but it will make more sense once I start the server now there's only another step to actually starting the server which is adding the main guard or the name guard so we do if name is equal to main and then we'll do app dot run so app is obviously the initialization of the flask sort of web server and then we're going to do debug is equal to truth now the reason we do debug is equal to true is because if there's any errors while running while running the server the server won't crash it's just going to show us what the error is and then it's just going to carry on its operation unless it's like a serious syntax error in your Python code so once you're done with this sort of statements this could just be called starting the server and API that sits on it well it's technically just starting the server the API is automatically assigned to it but anyway starting the server and then once I run this as you can see we get some messages and then we get told what link to actually open as well so this is the link that we want to sort of open up so I'm going to copy that link and what I'm going to do now is what why it's a really good way to actually view this would be opening up a browser tab and then pasting it in there and pressing enter now when you press enter as you see what it goes ahead and does is with all is it says welcome to RMS now the reason it does that is because whenever we type in enter here we're making a get request to forward slash so obviously we've mapped forward slash and the get request to forward slash with returning welcome to RMS now we don't want this to sort of be a thing so we're going to get rid of that and actually start making our API a bit more practical so I'm going to stop our server right now and what I'm going to do is instead of doing return welcome to server I'm going to return the basically I'm going to return the full dictionary that we have so I'm going to do something like return I'll get rid of this I'm going to do return and then I'm going to say RMS because that's the name and then I'm going to say restaurant now what that's going to do is it's going to return RMS which is the dictionary and restaurant which is the key so it's basically going to return the restaurant details so it's going to say name KFC phone number blah blah blah and address blah blah blah so that's what it's going to do makes a bit more sense to have it in the API because the user can basically make a request and it will show up now obviously we can change the endpoint to instead of being forward slash we can do something like forward slash and then restaurant that makes more sense so when the user goes to the address that the server is running on and does forward slash restaurant it's basically going to run this restaurant class and then there's a get request in restaurant class right here which says return the restaurant details so let's run that again to see if it actually works open up Chrome back into it and then I'm going to localhost 5000 which is the equivalence of doing <IP_ADDRESS> and then I'm going to say restaurant and as you see it works pretty well so now if I refresh this it's going to say not found because we obviously got rid of the forward slash routes and we got the restaurant route in there so if I did restaurant again we get all the restaurant details so as you see name KFC phone number blah blah blah address blah blah blah so that's a basic get request and an endpoint done so that's how you would create an endpoint and basically get a request basically send a response back to a request as well now I'm going to close this off and at this stage what I'm going to recommend you guys do is download something called postman so I'm going to type it in and I think it's the first yep it's the first result that actually comes up so if you guys could actually download this it would be pretty useful because that's what we're going to be using to further test our API along the line now it's nothing too complicated this is what it looks like so if I open it up this is what it looks like and it basically lets you make different requests to your API and lets you test it so if I create a new request in here so you click on new click on request and then or you don't even have to do that you can just click on this add sort of tab button here and then it will be called untitled request or whatever it is and you type in the address where you want to make this request to so one two seven point zero point zero point one five thousand forward slash restaurant now the very important bit is you need to specify what type of request this is going to be so it's already set to get so hopefully that should be fine now when I click on send you'll notice down here that I get the response with name KFC phone number blah blah blah and so and so so basically our request is gone through fine and we've got a valid response as well cool now enough of the really basic stuff what we want to do next is let's just close the server down and what I'm going to do next is add a menu class which is going to help us get different items on the menu because right now what we can do is we can only get the restaurant details but what I want the API to be able to do is allow us to basically get all the menu items either individually or as a complete list as well so let's start with being able to get individual details about individual items on the menu so let's create a new class called menu and I'm going to zoom out of the screen a bit because it's becoming a bit hard to code I'm going to create a new class called menu so class menu and we always need to pass resource through because it's it's sort of like dependencies the way it works and then what we want to do is we're going to be creating a get request and then we're going to call this self now when we do a get request and we want a specific item we want details about a specific item what we're going to be needing is to allow the user to actually add a parameter for a specific item so we've got wings as our menu right so if we did something like this menu we created an endpoint called menu what we want to be able to do is do forward slash menu forward slash wings press send and then be able to get price details and quantity details about wings so that's what we want to be able to do now obviously we don't know what the user is going to type at this end point so we're going to need to be able to make this flexible so that it can be sort of like a variable so what we wanted to want to do is go in here into the API dot add resource section and then we're going to add resource and what we're going to add is the menu class and the endpoint is going to be forward slash and menu because that's the first endpoint we want the user to go to then forward slash again and in small greater than and smaller than size I'm going to create sort of this is sort of going to be a placeholder for whatever's typed in here so it's sort of like a variable so whatever you type in the link is going to get replaced in here now instead of just doing now when we're coding the menu class we've got self over here but we can also get the item so basically whatever the user enters over here is going to be passed in here so when I do this and print item for example and let me run the server quick it's running let's just make that bigger make this a bit smaller and I'm going to say I want to go to 5,000 under menu and then winks so when I send a get request to this endpoint what we get is obviously it says no over here but what you see over here is it says winks so it will actually it actually knows what item is being typed in by the user now if I change this up to let's say burger we should be able to get a response well get get a print that says burger now we basically know the item that the user's adding on so it shouldn't be too hard to progress onward so what we want to do after this is we want to check if the if the item that the user has typed in is actually a valid item on the menu or not so we're going to do a try and accept because if the item is not valid then we'll get a key error since we're checking it against the dictionary so we're going to try returning RMS because that's the main dictionary and then under menu we're going to try returning the item that the user has typed in because if this item is a valid key such as wings then it should show up the properties of it if it's not then we should have a key error so I'm going to do something like accept key error and then we're just going to return an empty dictionary saying that we don't have any data about the item that the user has just typed in let's go ahead and run this to see if it actually works okay and now if I go menu burger now bear in mind we don't actually have burger in our dictionary if I just show that to you guys let's go up here we only have wings and that's it with a capital W so when I send this I should get just an empty dictionary back which I do so basically the API is going oh is this a is burger a valid key in the menu dictionary and it's saying nope we get a key error so it's going to return an empty dictionary but on the contrary if I typed in a valid menu item such as wings it should return the price which is 5.5 and then the quantity remaining which is 30 amazing so we've got the we've got basically different endpoints and get requests working and we've added a little bit of validation as well so now that we've done all of that what we could also do is be able to create a put request so put request is very simple it basically just means update so what if we wanted to update something from the menu so let's say we wanted to change the price for wings or we wanted to change the quantity remaining for wings we could easily do that as well by creating a put request so let's go in our menu class and then create another method for a put request so you may have already guessed since get is called get put is also called put so we just type in put as a method and then flask will recognize that once again self as a parameter and then we go also need the item so that we can actually update the dictionary according to the item name so first things first what we want to do is we want to check if the item that's being typed in that the user want to update is actually a valid item in our dictionary so we can literally copy and paste the lines from before and paste it down here so basically what we're doing is we're checking instead of returning anything though we're just gonna do try and then rms menu item so if it is a valid item then the program will just continue if it's not then we're gonna get a key error and we can return something like an error and then we're gonna say item whatever item they're typed in does not exist on the menu so we've added a bit of validation there so we're checking whether the item that the user wants to update is actually part of the dictionary if it's not then we just return sort of like an error and the function or method just stops there now we actually need to be able to allow the user to add some arguments onto their post requests so that we can update arm we can update our dictionary with those arguments so to deal with that we need the request parser so that's what I was talking about earlier on so we need to first off initialize a parser so we're gonna call this parser and that's gonna be equal to req pass or request pass dot request parser so it's the library we imported earlier on so it's gonna basically let us grab data that the user wants to send to us and we can use that data to basically update our dictionary once you've initialized your parser and assigned it to a variable the rest is pretty simple we need to think we need to basically think about the different the different sorts of data that would be one from the user so one of them is obviously gonna be the item no actually one of them is actually gonna be the price because we already have details about the item from up here so we don't really need to put it as an argument so it's gonna one of them is gonna be the price and one of them is gonna be the quantity remaining so that's the two arguments the user can make so I'm gonna say parser to add argument and then price so basically what we're saying is we want the user to be able to add a price as an argument and then we're also going to say parser dot add argument and then I'm going to add a quantity remaining argument as well now you could have called this anything but just for consistency purposes and for everything to make sense I'm adding it as what it actually means now we've basically allowed the user to send us data about price and quantity remaining by doing this now once we're done with adding these arguments to the parser we actually need to create a new variable called result and then call parser and then do dot pass arguments so what this will do is it will go ahead into the put request and check what data has been sent to us and it's only going to filter out the user data the data from the user for price and the user data for quantity remaining the rest of the data that's posted to us will just or put to us will just get ignored now the result variable is just going to be turned into a dictionary with basically the data that was sent to us by the user so if I do print results at this stage and then if we just run our server we have a key we have an indentation error so we've got up here online 27 back one and try again and our server is running which is good let's go back to postman and now what we need to do is I'm going to go on to menu and then wings which is actually an item and then I'm going to do a put request now if I send this off what you'll see here is when I move this a bit to the left you see that price is set to none so we as I said result is going to turn into a dictionary and it's basically going to look for these details whether the user actually sends them or not now since the user didn't send any price details or any quantity the remaining details in the put request it's saying none now we've also added validation to make sure that it gives an error when we try to update or make a put request to something that doesn't exist so if I did burger and send the error that we created earlier shows up it says error burger does not exist on the menu so that would be the section of code where we have a try and catch for the checking whether the item is actually a key from the menu that's good as well now to be able to send data you basically need to be on the right endpoint such as wings because it's a valid item and then put a question mark in there and then type in your first parameter the first argument that we allowed the user to type or added to the request password was price so the user can type in price and then equals that to something like 20 for example and then any other any other basically any other requirement any other arguments or any other parent parameters that the user wants to add in or any other data that the user wants to send to our API needs to be followed by an and so the other argument we added to the request password quantity remaining so we need to make sure we're typing that correctly and then we'll equals that to something like 200 now what happens there is the price will be updated for wings to 20 and the quantity remaining will be updated to 200 but we haven't actually done the updating bit yet but when I do send what you notice is it no longer says price none quantity remaining none it will actually take whatever values I put in my put request which is here so I said price was 20 and as you see it got that data it says price is 20 and then I said quantity remaining is 200 and as you can see it got that data now what if I misspelled this so if I said quantity something something and send again it's actually going to say none because in our request parser we've created an argument for quantity remaining so we need to be very specific when we're right here so we need to be very specific when we are adding this data on so since we're able to grab the data that the user wants us to update the only thing left to do now is to actually update it in our dictionary so result is what the user senses so data that the user has sent to us and then what we want to do next is update the menu dictionary with data the user has sent okay cool so now when we want to update the user dictionary first off we need to make sure that the user has actually sent some data through because we don't want to save none into the into the dictionary because if the user doesn't send any data as you saw before result gets set to none so we're going to say if the result price is equal to none and the result quantity remaining is equal to none as well then what we want to do is just return an error to the user that's going to say something like update either needs price or quantity or both because obviously without them providing these details we can't really update it and there's no point of them doing a put request if they're not going to give us the price and the quantity remaining that we want to that they want us to update so that's that will handle that and then as else we can basically do the rest of the checks so we can do an else statement up here and then we're going to update the dictionary so we're going to say updating dictionary dictionary and then we can do an if here so we can say if the results and price and price so basically the price that the use data for price that the user senses if the data for price is not equal to none which means it's valid data then we want to go into the RMS dictionary then on to the menu key which will results to giving us access to the the sort of child dictionary then we want to type in item because the item would actually be a valid item since we've already checked that up here so we want to go on to the specific item on the menu and then we're going to do the price and then we'll equal that to result price so we're basically updating from our RMS dictionary the price for the item the user is on to the price the user wants to update it to now we do the exact same thing with the quantity remaining as well so we're basically pretty much repeating ourselves over here where we're checking to make sure that it's not none and if it's not none then we update it so we say we go into menu we go into the item the user is on but this time instead of the price we're going to update the quantity remaining set that to results and quantity remaining hopefully I haven't spelt that wrong anywhere so that will basically update everything and then we can go one end and back and return a message that says that we have successfully updated the the item so we can say something like item plus updated so that will basically tell the user that we've updated whatever they wanted to update with whatever data that basically sent to us so now that we've got the pot working which was quite long but we've made sure that it's pretty robust so we've added quite a bit of validation we could have done without the validation but there they would basically expose our API to the user so that they can somehow break it but we don't want that so now when I run my server if I go on to my put request and I'm going to get rid of this I'm going to change this to a get request and then send and as you see initially I haven't done a put request yet but the price for my wings is 5.5 and the quantity remaining is 30 now if I essentially when I do the put request to wings and then I send new data so if I said price is equal to 1000 which is crazy expensive for wings but oh well and then quantity remaining is equal to one so let's say we just had one pack left when I do this put request what we want it to do is basically updates the dictionary on our flask server so the next time I make a request to menu wings so when I make a get request to menu wings I should see this stuff being updated so when I send this off voila it says menu message wings updated and then if I go ahead and get rid of all this stuff because I'm about to change this to a get request and send it off we actually don't see any updates for some reason but we will figure it out we don't see any updates on the price but we do see an update on the quantity remaining so let's take a look at the thing again so we've got price is equal to 1000 and quantity remaining is equal to 1 let's take a look at our code so I'm pretty sure I might have spelled something wrong with the price I said if result price is not equal to none then we will go into menu the item and then update the price with the the price that the user has sent to us so that should be correct I'm not sure why it is not okay let's try that again so I'm gonna make another request so another put request and send that off it says wings updated so hopefully it will actually show up let's do a get request there and it still shows 5.5 that is that is a bit weird but we can figure it out because we still let me try another put request where we do quantity to one something and then we'll do another put request send we'll go back to wings do a get request and obviously it does update but the price for some reason isn't updating feel like with it's going to be a really simple mistake that I have made I saved this up we've got RMS menu item price is equal to result price then let me just check up here I've got price then I have if result is none and okay is equal to none we give an error else we do this don't seem to see anything wrong but let's just try it again so we'll go do a get request and it should be 5.5 and 30 which is we do a put request and then I'll send all the data that's required so we've got price is equal to 1000 and quantity remaining is 10,000 let's send it off do a get request get rid of this data here send again and voila turns out it was just a need to refresh my server which is a bit crazy because I would have been spending ages just to look for it but either way the put request is now successful because we've been able to update the price and quantity remaining for wings now if you had additional items you'd be able to do that for them as well which is pretty cool now we still need to go through two more methods which is a one one of which is a post request and the other is a delete request once we're done with that we have basically created a a restful API that allows us to create read update and delete which is pretty cool so once now that we're done with the put request and it's working fine we're going to go ahead and explore how we can basically delete we can how we can delete a menu item using the API as well so what we want to do is inside the menu class again we're going to scroll down past put past the first put request that we made and I'm just going to check that I'm on the right indent I am and then I'm going to go ahead and create a class for delete so death delete and then we're going to pass in the self and item as well because we want to know what item from the menu of course the users trying to delete so now we like always we check if the item is actually valid so if it's actually in the dictionary so checking check if the item is valid do a try and then rms menu item now obviously if it's if it doesn't exist and we shouldn't get a key error so accept key error return error and then we can do item plus does not exist so that will sort that out so we're basically validating to make sure that the item is actually valid and then what we want to do next is if obviously the item is valid then deleting item from the menu so we just use the delete command or Dell and then we do rms menu and then item simple as that so basically saying go to the rms dictionary go into the menu key and then in the menu key if you see another key called item just delete it off so obviously item is going to be replaced with whatever endpoint the user is on and then we probably want to return a message to the user saying that the item has been deleted so return message item plus space deleted so that should look after the item item being deleted and that's how you would create a very simple and basic delete request as well so let me run this up just to make sure that it's actually working so servers running fine which is great news I'm gonna do a get request to menu wings and then send it off and as you see prices 5.5 again because obviously we restarted the server so everything defaults back again but obviously if I did a put request and updated the price and quantity remaining that would work as well so let me just do a put request and then put the price to something weird like a hundred and then the quantity will just do it let's say 20 send it off and go back into wings do a get request send and obviously it's been updated now let's let's say we wanted to delete delete wings the only thing that would need to change is the type of request so we'd have to change the get request to a delete request because that's how we've coded it and then we're basically saying we want to go on to the menu and then we want to go on to wings so we want to delete wings we want to make a delete request to the wings endpoint so it basically deletes wings from our RMS dictionary send it off and let's hope it works and it says wings deleted now if I change delete to a get request to try and get wings let's send it off and we get return nothing because wings does not exist anymore since we just deleted it and hence we basically get the empty dictionary since we coded it before now if I try to delete something that doesn't already exist we should probably get an error so try and delete that it says wings does not exist which is perfect we've coded validation for this as well amazing so now the only bit that's left is to be able to create a post request where we're able to add new items onto the menu as of now we only have wings which we manually added to the dictionary but we want to be able to make a post request and then add those items to the menu so let's close this off and what we actually want to do for this is we want to create a new class and I'm probably going to call the class let's call it main for now so let's go above here and then obviously we have a menu class down there but I'm going to create a new class and then I'm going to call this main pass resource brew again because that's important and then the first thing I'm going to do is I'm going to create a get sorry a post request and then in the post I'm just going to pass self now one thing you may notice is for a post request you don't really need to be on an endpoint you we do we don't need to know where we're adding this we just need to be on the menu endpoint and then we can make a post request passing the details for the item name the price and the quantity remaining that's why we don't have item as an extra parameter here now that we have a simple post method in here I'm going to add this to the API resources so let's scroll down a bit and then I'm going to do api.add resource and then I'm going to say main because that's the function I want it to run and in main what we want to do is we're going to assign it to the roots forward slash menu so basically what that's going to do is going to say anything any post request or any requests that come on the forward slash menu are going to be forwarded to the menu class so let's go up here and we've got a post request so let's start coding our post request so what we need to do first is create a parser because obviously we need to get the data that the user is sending so like before we have to create a parser so I'm going to copy and paste the lines one before because it's going to be very similar copy the parser and the bit where you add the arguments and also copy the bit where you pass the user data so I'm going to paste all of that in there so we're basically creating a new parser to deal with all the data the user is going to be sending us now we need an extra argument which is going to be the item since the user is adding a new item to the menu obviously we want to know what the item is going to be so item is going to be a new argument that the user can specify in the post request and then once the result runs the we're basically result is going to turn into a dictionary that's going to have item price and quantity remaining so we can simply add that to the rms dictionary now we need to run a few checks so we need to make sure that none of these none of these items so item price and quantity remaining we need to make sure that none of them end up being none because we want values in all of them otherwise it's going to be a bit weird so we're going to run a validation we're going to say if result item basically the data the user senses if the item from the data is equal to none or the price from the data is equal to none or the quantity remaining from the data is equal to none then we're just going to return an error and the message to the error is going to be missing fields right because we basically need all three fields in order to add an item to the menu make sense because we can't add an item without the price and we probably shouldn't add an item without the quantity remaining because that will ruin the integrity so if this is not the case and if all three items obviously have the data that they need then we can go ahead and add this onto the dictionary pretty simply so we're just going to do adding item onto rms dictionary and then we can do something like rms then onto the menu key and then the next key is going to turn into the name of the item so we're going to go into result and then item because that's the name of the item and then we're going to assign that to a new dictionary which for which the price is going to be the price that the user sent to us so price and the quantity remaining is going to be set to the quantity remaining that the user just sent to us so basically all we're doing is we're going into the menu dictionary adding a new key which is the key name is going to be the item name that the user just sent to us using the post request then we're assigning that to another dictionary just like we did with the wings where the price is going to be the price the user sent to us and the quantity remaining i need quotes around that by the way just add quotes and then the quantity remaining is going to be set to the quantity remaining the user just posted to us as well oh why did i do that okay going back to it again where is it now there is going back to it again this should basically do the job for us now the only thing that's left is we can do a return statement here which is going to return a message and the message is going to be let's just say an f string because we want to be fancy and the message is going to say result item so basically the item name that the user sent to us added to the menu successfully and voila that should do the job now that's the post request you might say it's very similar to a put request and it is because all you're doing is you're grabbing data from the user and then in the case of the put request that data already exists somewhere you're just trying to update it with the data users giving to you but in the case of a post request you're adding it to something so it's fresh data so i'm going to run this again hopefully there's no errors nice and we're going to go in here and i'm going to do a get request to menu obviously nothing shows up but if i did a get request to wings something should show up and we get price 5.5 quantity 30 so let's do a post request to menu and let's send it off and it says that we've got basically a 404 but let's try doing a post request again and obviously i was getting a 404 because i had an extra forward slash in the end these type of things can cause errors so we did add validation to make sure that the user obviously needs to add the item name the quantity remaining in price if they don't provide that data then we just return an error which is doing perfect so let's actually provide the data let's provide item name to be let's say wings no not wings because we already got wings so we'll do burger let's send it off and it should still give us this error because we're still missing the price and the quantity so let's do price as well this time price is equal to just to troll 10 pence and then let's send it off still missing fields because we're missing the quantity remaining i do and quantity remaining is equal to 100 and now if we send it off we have an error because it says item is not defined okay let's go back in here and it says item is not defined result item okay that's because item actually let's go back in here result item oh it's because item is obviously needs to be in quotes since it is a key and not a variable so let's run that again that was very silly of me we can basically just run the same query again so run that again and it says burger added successfully to the menu now the only way to verify this would be to do a get request under the menu and if we did wings here obviously we get the price for wings and quantity remaining for wings but if we did burger here as you can see the post request did actually work because now we're able to grab the price which was 0.10 that's what we set it to and the quantity remaining we did set it to 100 so it's working flawlessly now another last thing that i would like to do with this API is to be able to return all the items on the menu if the user does a get request to just menu because it'll be so much easier for the user to just be able to get sort of a dictionary with all the items on the menu and all their details rather than having to go forward slash burger because bear in mind a user that didn't use your API might not know what these items are so it will be a good functionality to add so let's do exactly that let's close this off go into the main again and we're going to do a get request so we're going to say def get and then self now bear in mind this time we're not asking for an item because we're not going to request or return data about a specific item we're just going to return everything that is in the menu dictionary so we're going to return rms and then we're just going to return menu so that will basically just return the entire rms menu that we have if it's empty it's just going to return an empty dictionary so that's pretty much the final ending touch that i wanted to add to this let's see if it works let's go ahead and try that off now if i go to menu let's just make sure it's not in full screen send that off as you see i get wings price 5.5 quantity remaining now i no longer have to go into wings because oh wait why did that uh oh of course because i have to go into menu first then wings so i no longer have to go into menu and then wings i can just go into menu and be able to see basically all the items inside menu now you might say it looks the same but obviously that's because we only have one item i can prove that to you by making a quick post request so let's make a post request to add an item and then we'll say the item is equal to burger again and price is equal to 10 pounds and quantity remaining is going to be equal to 100 let's make that post request burger has been added successfully now i can prove my point by going back to the menu end point and then just doing a get request and i should be able to see wings and menu so as you see in the correct order as well it says wings first and then burger now obviously we could change the order and stuff if we had a more more usable more viable more generic database which we could just make a query to to sort by but i'm pretty sure we could sort by keys as well if we added timestamps in here but that would just make things complicated either way guys that was just a short tutorial on how you would create a simple basic api using flask being able to use all the methodologies from crud such as create read update and deletes so that's all the points we covered while also being able to wrap this logic around a sort of real-life ecosystem hope you guys have enjoyed this tutorial and were able to learn something new from it i would like to apologize for not posting for so long but i would try and push out at least one video per month now that i'm back if you guys have any ideas as always make feel free to join my discord chat and post your ideas there or you can leave them in the comments as well if you would like to subscribe go ahead and do so if you'd like to like or any of the following go ahead and do so i would really appreciate it as it really helps and guys thank you so much for sticking around i will see your beautiful faces in the next tutorial peace


I think I just realized more that I can live without a lot of different things that obviously the day to day when you're able to go a lot of different places and stuff like that you kind of realize that hey maybe I don't need this right now or maybe the flashy cars or stuff like that you know it can wait a little minute you whatever so patience you know we don't control um you know everything like like we think you know things that are out of out of our control you just have to let it happen have to stay patient just continue to grow in your own way um when things don't go your way what I've learned through spending time with quarantine this year is just you know it's great to have family time great to be able to come together and it's a lot of time to think to yourself and get to work I probably needed a little bit of this a little bit of time to sit learn reflect and um just be more comfortable with myself to appreciate life itself and what you have in front of you and the people that you have around you feeling quality time with yourself getting to know yourself and being able to adapt to the new normal to make it better for yourself and anyone else too never take any time you know for granting you know every every every day we step on on this earth and every every moment that we have you want to take full advantage of because you don't know when is your life value your loved ones spend the most time that you can with your loved ones because you know that no day is promised I got a lot of family time and it was unbelievable spending time with my daughter my first daughter win is just indescribable it's unbelievable man I think I became a better dad and husband let's go fishing or something like that I like to ride a tv like I'm the type of guy you know I don't need no one else to you know to do something fun I'm really like a documentary type of guy like to watch a lot of documentaries but I start picking up more books and actually reading more books uh that's something I'm very interested in right if it's you know financial education uh spiritual growth books and different things like that well I went fishing for like seven days in a row and I didn't catch anything you know I'm a competitive so I say I'm gonna try this uh this eighth day and I went out there and caught too bad so 2020 has been crazy I mean I think no one really saw a lot of these things coming especially COVID so everyone has been able to take a step back and learn what's truly important the people around you was truly important and be ready for anything you never know what life's gonna throw your way it's not a matter about what happens it's how you handle it and how you push through and learn from it so I wish everyone the best as we finish out 2020


Hi, it's Bridget. Welcome to above-life channel the purpose here is to inspire your spirit and to fill you with hope Today I am recording without my microphone because I'm just sitting on the couch. I was actually going to do a meditation and Then I started thinking about Marilyn Monroe So I thought I would just turn on my camera and start a chat with Marilyn Monroe from the afterlife If you've watched above-life channel before, you know, Ms. Marilyn Monroe has a playlist here You know that I like to connect with her and I feel I feel a kinship with her and so I Wanted to ask her specifically though about forgiveness So let's talk about that today All right, Marilyn can come on in. Oh She's so sweet. I have a really tender heart today and my heart feels tender and maybe it's because I've been doing some mega-channeling in my groups, you know ascended masters and Goddesses and deities and saints and all that stuff have been coming up. So maybe that's why today. I feel tender in my heart So right Marilyn, can you talk a little bit to us? She's so sweet.  She's so so so so sweet. All right. So can you talk to us about forgiveness? I'd love that energy for you to share with us about that because it seems like you have this incredible ability to forgive And so I'd like to be able to share that with the viewers here Because the channeling that we do is about healing too. And so let's talk about that Okay guys, she says it's not it's not for me to say it's not my place to say How to go about about that I'm not really sure you could say that I'm an expert in that I don't know what makes you believe that I am so good at that Bridget what she's saying I think that in the afterlife Marilyn you and I have talked a few times quite a bit and You seem to have you've had a lot of experiences in your human life and you in the afterlife seem so forgiving so able to heal and Despite the things that you had to go through and experience and so I think That's what I would like to know like did you Were you always just a forgiving person? It's not part of our nature or in the afterlife. Is that something that you learned? Can you talk about that a bit? Everyone has a chance to I think everyone has a chance to Be the the best version of themselves that they can be And that requires a love that is far greater than what It seems to be possible when you're a human and Maybe it's because of the afterlife that I have this renewed Feeling that you are connected to about forgiveness I don't really know that I can't say that I I Tried to forgive or I was intentional in it. I think I really feel like it's a A survival thing It can suffocate you if you have hatred hate in your heart Or if you hold on too long to a grudge it can just make you just playing crazy That's not something that anyone needs My dreams to have a family was one of the greatest Saddest quite devastating really parts of my lifetime Being able to come to terms with that or just accept that was very very difficult and and I Even upon my death. I didn't I didn't actually accept that I I really thought that I could have a baby at least one just one. I just wanted one one child one healthy beautiful child and I didn't even care if it was a boy or a girl. I just I was one healthy baby I thought joe and I I wanted To be the kind of mother To be the kind of family That a child would serve I would have liked to have that with joe But I don't really believe that he Really wanted to be a father But I'm not entirely sure.  I think for forgiveness Myself for myself. That's that's the one thing that I would share from the afterlife that That is something that comes true for you for for all of For everyone everyone can You can have that peace Even after there's been so much pain I never really Felt like I was worthy of Being given a child I'm not really sure that I believed in my heart that my lifestyle could support that that that I wasn't in Contradiction with my my career and my mother My desires for my career and my desires for my mother for motherhood. I I suppose She says the universe which I think is interesting the universe had different plans I wasn't angry or mad at god or anybody else. I I really just felt like It was because of me you could say I blamed myself but after knowing you know after Realizing there's not There's no one really to blame and meant not having a child wasn't a punishment wasn't a withholding for me from happiness Happiness was a choice that I had and I I couldn't bear the loss and Others in my life as you know betrayed me as well I had a lot of betrayal. I tried so hard to trust To trust love You could say to trust my heart, but I I fell in love way too easily I really did. I really do say that that's I really would I would admit that and I don't regret that I don't regret that part of my life that part of an existence is simply a Something that I was looking for something. I was chasing love and To forgive myself or something like that. I'd know and really I know what you're asking without saying it because we've gotten to the point where we've talked a little bit about things related to relationships public and presumed relationships, let's say that Yeah, so let's say that Marilyn public and presumed relationships that you had or perhaps maybe we'll rumor enough And relationships that people hear on the youtubers universe Feel like caused your death or influenced your your passing your untimely death And so let's talk about forgiveness related to that and the circumstances or the relationships you had that Some people feel Resulted in your death whether you took your life or someone else or other people were involved Which you and I've talked about and I have very strong views on You can watch that on the playlist my friends at above the channel Here on the playlist So Can you talk about that? You know, there are some things that a girl never tells You know how I feel about this Bridget. We have had conversations. We have had many many Dialogs about this and I don't feel like it's anyone's fault, but our own It's my own fault. It's on it's it's my choice And perhaps did I act irrationally? At times yes Maybe obsessively yes Mental illness most certainly played a part in that and my patterns as you would say my patterns my choices of Of drinking and and medications and all those things. Yes And my need to be loved to just be loved to have that attention that acknowledgement is Is all I ever really wanted, but I needed it constantly and it wasn't enough. It was never enough one man one person One caregiver. It was never enough for me. There's so many rumors and so many false Accusations and assumptions that are made around me and my life and Those are from people who don't even know And I'm not really I'm not really angry. I'm not upset They don't know they just don't know they didn't know me. They think they know me. They can analyze me now Looking back upon my life and then draw all sorts of conclusions, but they didn't they never know and they never will know They will never know me really know me Or understand the relationships I had or the desires I had or the means I had for for The men in my life that I was that I that I had in my life that I was drawn to that I wanted so desperately to be loved by them and To say that I need to forgive it would be more so to more that I would need to forgive the media and the social conversations around the discussion around my end of life experiences When really they don't know what they're talking about no one no one has the full picture No one knows but me no one They can speculate they can talk and maybe that's where the forgiveness comes and maybe that's the forgiveness To just not care you can't care about what other people think of you and The pursuit of your own happiness and taking care of yourself is something that I Misunderstood or miss she says misinterpreted. I didn't allow myself to let myself be loved within by me I needed that outside. I needed that the validation of a man I needed the attention I I did Not because I was conceited it wasn't any conceit It wasn't any of that it was the need to be loved and just to be to be treasured and valued and validated and and and just so So appreciated and trying to fill that that empty place without a family was so hurtful for me that it confused my Reality with my fantasy I saw I thought things were possible in those relationships when The men were married and When you fall in love with someone you just fall in love. I fell in love over and over and over again And I don't need to forgive myself for that Forgiveness isn't something that I can teach you I'm afraid Maybe in the terms of maybe what you would relate to better is to think of it as Not caring as much about what other people think of you or how they're going to judge you What they're going to write about you in the papers after you're gone because they can say or do or judge or Write anything they want to It doesn't have to be true as you know, you can see that now I don't have do I really have to say that you can see that now Far too much time is wasted on that You see my desire my seeking of love and attention was not Was not for public status or icon status It was truly and genuinely for love It wasn't for the money. It was for the The attention and the love I think the closest thing to forgiveness and to knowing forgiveness is to know love And you see Bridget, I never really knew that Until now and now that's all I have.  Thanks, mare You know, I love you. I appreciate you coming and and sharing and I hope the audio works on here you guys since I didn't get up to grab my microphone But thank you so much, Marilyn. This has been a channel here at above life channel Hopefully to inspire your spirit and fill you with hope but myths Marilyn Ms Marilyn Monroe from the afterlife. What did you think of this channel? Go ahead and put your comments below I'm interested and curious to see what you guys have to say Thank you so much for watching. Remember, this is your life. It's your life now So live it just live it. This is Bridget. Thank you so much for watching


Hi, welcome to the video tutorial on how to download and test the ST Timer Flight Sensor VL53L1 example application. You can open the browser and go to st.com slash VL53L1X and you could scroll down the page and find the X Nucleo 53L1A1 link and at the bottom of the page click on the get software button. Accept the license and log in to st.com this will automatically start the download of the software package. Here I'm trying to show you how to find the STM32AC6 project files, extract the zip file and traverse to the directory as shown in the link below. Two platforms are currently supported F01RE and L476RZ. More likely it will be F401RE. Now I'm going to start the AC6 project edit, save, compile and run. Click on the .c project file this opens AC6 IDE and this may take a while. Select your preferred workspace directory and choose a new one in which to save the project files. Expand the project to traverse to the application user directory. Edit main.c to make your application specific change for instance change the timing budget and save the file by clicking on the floppy disk button. To compile the project click on the top project directory then click on the hammer button. The compilation may take a while. You can launch a debug session by clicking on bug button then select debug as AC6 STM32C C++ application. More waiting. Accept the default to confirm the change of perspective. The execution starts with a breakpoint at main. Debug as required. You can check the value of variables by hovering the mouse over variable. You can find the stepover resume buttons on the top. Open a serial communication application like TerraTerm. This is the TerraTerm application setup on my system. The serial port settings are 11, 5, 2, 0, 0 baud rate, 8-bit data, no parity and one stop bit. On my setup the COM port number is 4. The example application prints range status range in millimeters signal rate and ambient rate in mega counts per second. You can find detailed description in the user manual.


Planning a lesson which is efficient and which is effective is key towards designing syllabus for second language writing. So we will look at lesson planning practices and procedures, what are workable and what are not workable and how we can make them useful for our students in this module. So our lesson plan should be based on with the purpose, with the reason and we should prioritize the skills and knowledge which our students would like to acquire or which we would like to develop amongst our students and it's important that we write the lesson plan and from my own personal experience as a language teacher when I taught English for academic purposes course, for instance when I taught students of international backgrounds, the use of may and might, can and could, probability and possibility. I wrote my lessons, I planned my lessons, I planned each and everything, I wrote each and everything, I wrote the objective, I wrote the aims, I wrote the rationale and I used to write like the class management, I used to write each chunk of the lesson. So this is important when you become language teacher and as part of your training that you write, what sort of skills you want to develop and have the sequence. So experienced teachers or skilled teachers, they know how to make lesson plans and execute them in a productive manner. However, on the other hand, some inexperience and newly hired teachers may lack this skill and this is important that they learn it and the purpose of this module is to raise awareness amongst you about the usefulness of lesson plans in a writing course. Like we plan lessons for speaking courses or listening courses or reading courses, but how well we plan lessons for writing courses is important. So each activity in our lesson needs to have a reason and teacher must think why an activity is important and how it needs to be generalized or sequenced, right? Lesson plan varies from situation to situation from students to students from class to class and I would suggest you to read much literature available on how to plan lessons effectively. And some teachers are experienced, efficient, skilled and they can use the lessons plan in a productive manner. However, some may be constrained because of time, because of their personal experiences. So overall lesson plan is a practical, tangible dynamic and those teachers who plan the lessons efficiently for writing classes, they embrace expoliteratory approach which make them think of lessons as opportunities for experimentation, to know what went well, to know what didn't go well and how they can improvise their teaching for the better learning opportunities of their students. What the literature suggests on second language writing is that not each, not every lesson works the way we want because there can be some unexpected or there can be some challenging situation some there can be some questions which can detract the student deviate actually them from the main course of the lesson. So we should see the classroom go into the classroom with an unexpected mindset and it's important that we make reflection an integral part of our lesson plan. Reflection allows us to think of our own practice. Let me share my own personal experience. For example, when I was teaching international students at an international university, in my first class I couldn't name students because naming them creates sort of association. So that was the deficiency that I learned through my reflection and I just realized it's important. So a written lesson actually facilitates processes such as post lesson evaluation, problem diagnosis and skill enhancement.


The one thing I figured out today is how to make Trader Joe's mochi cake from scratch. So I feel like this always happens to me. I fall in love with these items at the supermarket and it goes the next time and it's no longer there, especially with a lot of these fun seasonal items. I figured out how to make this mochi cake from scratch because I was really disappointed to see that they no longer have it anymore. So to start off, you combine the sugar with the eggs. Just whisk those together until the eggs combine into sugar. So next you have the evaporated milk. So this is the ingredient that gives it that tropical feel. It's coconut cream, not to be confused when you're at the grocery store shelves looking at all those options of coconut milk or cream of coconut, which is what goes in your pina coladas. Although if you get that and you have to make the pina colada while you're making this cake, goes perfectly well together. You add some vanilla and you continue to mix this all together. So next you have a little bit of melted butter. All right, and then next it's just an entire box of this. No measuring needed. Just open it straight up and dump it right in. Start mixing it together. And the other great thing about this is because it's made with rice flour, this cake is completely gluten-free. All right, I'm gonna add the next ingredient, which is some baking powder and then a little bit of salt. Continue to mix that all together. Final ingredient to add is some dried coconut. We're gonna have to check. Let's see. It's best used by April 5th, 2020. So I still have a good half a year. So I have a nine by 13 pan. I have it lined with parchment paper so that's just easy to take the cake in and out and you also don't have to worry about getting all those little bits stuck in it later. So you pour in batter, just about an inch tall. This is not a cake that's gonna rise a whole ton so you don't have to worry about it bubbling over in your oven at any point. So now we're gonna pop it into a 350 oven and let it go for about an hour until it sets. So nice. And golden brown, all the crusty little edges that you normally love with a cake. I'm just gonna finish it up with a little dusting of coconut to give it even more texture and flavor. So now I'm gonna cut a piece and give it a try. And so you can see from the inside, it's all that kind of like smooth elastic texture which gives mochi cake that like really great kind of bubbly kind of texture. I'm gonna eat it. That perfect balance of like something that's like really springy on the inside but then you have these really lovely little golden edges. I feel like it's pretty close. I can't, I don't think I can tell the difference. So you know, for those of you guys who have tried mochi cake from the supermarket and you're gonna make this at home, you have to let me know how close did I get. If you liked this video, watch more one thing videos on thespruceeats.com.


hey guys shipper 1000 here just a quick vlog we're gonna go ahead and pull this hub off here this is not really how to but it's just what i'm doing because i'd like to take the boat out this weekend we went got our we got it registered got our sticker got the plates for the boat or for the trailer so thought i'd just bring you along with me on this let's go ahead and let me jack this up a little bit the heaviest thing about this this boat is just the motor so wow all right go ahead and pull these off of here monkey's gonna stop by where he used to work tomorrow at the trailer place my buddy johnny there he'll he'll hook us up with what we need i don't know might just get a whole hub sometimes it's cheaper well as cheap to buy a whole hub as it is to buy new bearings and seal um but we'll just have to see they easily don't wear these things but that stuff nasty that grease in there so i thought i'd put a pair gloves on yeah they did not um they didn't grease these bearings i can tell you that right now and the place they got it done at is right beside where i used to work at the trailer place right beside it because they would send any trailer work they would send up to us so i know they didn't they didn't send this one up there because this this has never been greased and they wouldn't do that where i used to work well at least i wouldn't anyway i mean so we're just going to have to see i forgot to bring something to some of the parts on it should come with all this if they got it they should have this pretty common pretty common bearing stuff and i say they never greased that look at that seals completely gone there's the seal right here's the seal this is what's left of the uh so the spindle feels good this is what's left of the um the inner bearing race what happens is when that bearing starts going out these things get hot when they get hot it kind of welds us on there so i'm going to have to go get a hammer and probably a chisel i may have to crack that to get that off there we'll just have to see um yeah there's there's pieces in here of the old of the old bearing i might be able to just get the bearings and seal but whatever's cheaper you know so let me go get you know sometimes sometimes you can get them to spin but i don't think this one's going to this one's going to fight me all right let me go get a hammer and chisel i'll be right back okay what i may have to do if this don't work i may have to get my cutting wheel give it a little slice there i'll bring you a little closer so you can kind of see what we're doing here like i said this is not really how to it's just something i'm doing i may have to give it a slice right there but we'll see if i can't get this to come off first doesn't feel like it's moving any i don't think it is it doesn't seem like it does it i'm going to have to slice it when you cut these you don't want to get into that spindle too much but like i said it's not really how to that's why i just put a slice in it i should have went over here on the side but and then that should just crack it enough where it'll slide out of there okay we got it to move so that's a good thing now these are case harden you know they're very hard to steal probably can't see inside there but there a little crack in there that's all it takes that crack down through there it's all it takes and that just gives it enough to wear see sometimes see this is part of the bearing and uh sometimes these will actually spin on that spindle and it wears a spindle out and then you got what you got to do is you got to cut this with these welds and put a new spindle in we got lucky uh it's a pretty beefy spindle for what what axles on it just uh i think it's a thousand pound axle so now all it needs is see the uh the bearings sometimes you got to step down where the rear bearings bigger around than the front bearing but we can just we can see it takes the same size bearing off to clean that up with some sandpaper or emery cloth you're not going to want to you always want to do that by hand don't use your power equipment for that so all right so i think i think we can get by let's let's check this out i think the hugs are okay i think i think what we'll do is just put new bearings because it comes with that race you just knock that race out of there yeah the hub is okay the studs are okay the lugs i think we can get by with just the set of bearings and a and a seal seals what keeps the grease in it okay so i'm gonna get that i think really all she's going to have to take is you know is the bearing i'll put it all in a bag for and johnny will take care of he'll get us taking care of he was my parts guy uh that's all he does all day long look up parts sell parts and stuff like that so he very much knows what he's doing there um so i think i'm going to check the other side see how it is we'll go from there and here's another example now i just adjusted it it was just a little out of adjustment but look at that see how brown that is those were not greased back in march okay see it looks like they may have tried but to me those are not greased that should either be fresh red or fresh green so i'll have to go ahead and uh i'll have to um grease them up but this one feels pretty good now so all right got a little dry crack on the tires i'm not really worried about it we do have a spare so that's good all right guys okay so i thought i'd go ahead put this ball on here i thought that was an inch and a quarter but it's an inch and seven eight and that's the ball i've got here so let's go ahead this is a two inch ball so let's go ahead take this off if we can hopefully we won't have to heat it am i recording there we go all right that's good okay but what i gotta do real quick is i gotta make sure i either have to have it like this or down like that so since this truck's a little low i may have to put it like that so what i'm going to do is just measure it out real quick and how i'm going to do that is usually wanted about knee high so i'm going to measure the trailer about knee high where the trailer's live i'm going to stick this right here right in there like that you're going to want to see right there's about knee high by the time i get the ball in there it's going to be about knee high so that's exactly how i'm going to put it because that's how i'm going to hold that boat okay it looks like this is going to be about right that trailer you know just it's got them little ass small tires on it this is the way we're going to do it here i don't know why they had that on there but i'm going to put it back i'm going to put a lock net on here this is this is a lock washer this is a lock washer too because it's beveled like this see don't hammer loose flat they're supposed to be like that what you do is when it tightens down it spreads that out and puts pressure on your nut keeps your nut from coming loose so what i'm going to do i don't think i'm going to use that i'm going to use this here hopefully this will spin it on here where i don't have to break out a wrench and i forgot that stuck in there probably could have used that nut but okay hate when this line gets to leaking like that this kind of buggered up so we should be able to take it out for its maiden voyage there we go and this puppy is ready to rock and roll i also got these these are locks so see these these inserts the balls aren't too bad about 17 bucks but this like 50 bucks here all right so somebody can just if they see out they can pull that pin pull that pin out slide this out and run off what this does is it takes place of that and it has a lock on it so let's go ahead and open this up he gave this to me it came in the boat with the boat oh shit probably going to have to find something now these locks are not foolproof but somebody don't they don't like messing with them they'll just look for something like that let's go ahead make sure this is going to fit get you down here you can see okay but put this in here just like that and then this slides on i guess i need the key to lock it so here we go comes with two keys these are pretty pricey too but they're handy like i said they're not foolproof but you know it's only protecting you know 60 or 70 dollars worth of stuff so every little bit helps right so i can see it it should be just slid on there and it's locked there it is nobody can pull that out to whereas the other one like i said all you had to do you know what you saw hopefully is you just pull this pin out slide that out boom they run off with your stuff least is some kind of deterrent if they got to work for at least you know maybe you're only in somewhere for a few minutes you know getting a sandwich maybe you can see him or whatever so there you go like i said other day man these things have hurt more people than a gun i think man i know i've been boom so what i'm going to do is i'm going to take this back out so monkey don't hurt herself on it i'm going to put it inside the truck what i'll do is i'll put this pin here that way it doesn't get lost like i said it's got the little rubber boot kind of keeps your the water out like i said it's not foolproof but i get what these cost i think they're around 20 bucks depending on where you go and you might be able to get them online cheaper but they're well worth it of course this is for smaller that's half inch but i'm going to keep this i'll keep this in my toolbox and uh in case we want to tell something else you know that for somebody or for us or whatever all right so there's that now i'm going to put these on the key ring well i'm going to keep one in the shop with my toolbox keys i'll put one on the key ring of the truck had a guy one day had a work order had to cut that lock off of there the guy lost his key okay he wanted to put another insert in to haul a different size trailer all right so i got up under there my cutoff tool i just cut it off and there we go i said why you need to cut that off for anyway what's he said well you come out with the other one he says well because it's a different size ball i said why didn't you just have me change the ball it would have been cheaper because we would change these balls for people for nothing well i had to charge him labor to cut that lock off and then he had to buy a new pen i said you know i could have just changed that ball for you for nothing good but you know it didn't sound a work order what for he just wanted to cut off so i cut it off for him and then he was like you shouldn't see look on his face he was like uh dude i don't know i wasn't even thinking because you know like i told him i said didn't sound a work order it just had cut it off so i did i could have just changed that ball for him for nothing for free ended up costing him well actually i think he went and bought another set of these i think they were like 25 bucks 20 25 oops 20 25 bucks and then labor i had to charge him a minimum or you're supposed to charge a minimum of 30 minutes but i felt bad for the guy so i'm only charging him 15 minutes which that was uh about i say 20 40 60 it was about 25 so then i'm costing him around you know 50 60 bucks for tax and stuff when i could have just changed the ball for free but he wasn't thinking you know what happens to the best of us okay guys like i said it's not really how to it was just i thought i'd bring you along with me monkey's going to she's gonna go to wendy's get some stuff to eat um because they got late by the time we got back from the the title place and getting the getting the the boat registered and they had trouble with the trailer because her birth date was different and it kept saying september and she's like no and so the woman had called tyla hassey find out what's going on to get that story now that took almost a half an hour but anyway so oh i need to get the sticker put on the boat to see the numbers stay the same down here in florida you keep the number the number goes with the boat you just got to buy your sticker your registration sticker um so we got the tag for the trailer everything's legal there so hopefully saturday fingers crossed weather permitting um and hopefully they got the bearings or the hub assembly that i need um they should have they they keep a lot of stuff in stock it's not a special spindle so um i looked at the numbers and it's it's a it's a pretty common bearing we keep in stock there i keep saying we i don't work there anymore but because of my physical condition but yeah i miss it though had a lot of fun working there but anyway so providing that goes good and i can get that put on tomorrow night maybe i'll do it maybe that'll be the late night in the shop tomorrow night i'll put them uh i'll put the hub on but um saturday hopefully if it's not raining we're going to take it out for its maiden voyage at least maiden voyage for for us and we're going to make sure it runs good and everything you know um i still got to have i still got to do some adjustments um which you do right there at the motor it's no big deal i don't have to get excited or anything or i shouldn't have to i mean if i have to i can but it seems to run pretty good in the tank test so i want to make sure that it's going to run all right under a load you know with you know pushing the boat and me and her and all her stuff so although it's not that heavy but even in water i mean you know make sure there's no leaks he said there isn't any leaks he said it will take on a little bit of water around the bung plug not worried about that he probably just not tightening it up enough but that way i can make sure there's no leaks at all somebody's out front hang on guys okay guys sorry about that boy's looking at the Ford um they stopped by the other day and looked at them they came back wanted to hear it around they took a fur drive so anyway i forget what i was talking about so hopefully saturday we can take the boat out make sure there's no leaks and stuff like that and then if not hopefully we can get a good weekend before it gets cold and i can get it up there and get it painted and you know scrape all the old paint off she wants to go with the same color so we'll just take a chip in and match it up the best we can because it looks good with a bimini top on it so anyway so that's that so so that might be our uh late night thing tomorrow night i might get a big old light over there we can shine on us and we'll put the bearings on it and and that thing should be pretty close to being dunked in the water well it will be ready to be dunked in the water so that'd be awesome all right guys anyway thanks for watching appreciate it monkey should be coming back in a minute she took bruno with her he likes to go for a little ride once in a while so anyway guys again thanks for watching shabarra the met the man legend i'm gone for now we'll see you guys soon thanks for watching the vlog bye bye guys


Hi, my name is Ben Harrington and I'm a candidate for Amherst School Committee. Some folks know me as Coach Ben because I coach basketball for LSSE. We just ended a fantastic season. Go Huskies! I'm a proud union member belonging to the American Federation of State, County and Municipal Employees through my full-time job in the facilities department in the Amherst School District. I'm a veteran of the Army Corps of Engineers and served from 1995 to 1999. I have associate degrees in communication and journalism from Manchester Community College in Manchester, Connecticut, but the most important title I hold is as a single parent to two children. One was a third grader at Crocker Farm Elementary and the other a first year at the high school, which gives me an invaluable and incredible network of friends and family that I can count on. I'm running for school committee because I believe that our students are our most precious assets and that they represent the future of Amherst. It is important for us to fully support our students and to provide the most fair and equitable opportunities for them to grow and thrive as learners. One issue I'm passionate about is nutrition. Our food service program impacts all of our children. I'm proud to be part of a school system that has taken meaningful measures to avoid the shaming of students whose parents can't come up with lunch money. I support programs like Breakfast After the Bell and Project Brent, which help to remove stigma for economically disadvantaged students while providing the necessary nutrition for all of our students to be alert and attentive. For some students, these may be the most substantial meals they receive all day. I'm also very concerned about the physical condition of our schools. I have over a decade and a half of construction and building maintenance experience to offer the school committee discussions. A diversity of knowledge and skill sets will make for a stronger school committee. Together, we can find creative and sustainable solutions to issues regarding infrastructure that will work for the entire community. I'm an advocate of dual language education, starting at the elementary level. As the district's enrollment working group focusing on dual language found, we have an increase in Spanish-speaking students and we have an overall declining enrollment. As the reports so eloquently spelled out, both of these challenges can be addressed by a robust Spanish-English program. The future of our schools will present many different challenges, and it will take a school committee with a diverse cross-section of viewpoints and experiences in order to address these challenges successfully. With a broad range of skills and a unique perspective, I intend to serve as a productive member of a school committee that will nurture progressive learning for our children for years to come. I conclude with this request. I, Ben Harrington, humbly ask for your vote on Tuesday, March 27th. For more information, you can visit my website at www.electbenharrington.com. Thank you.


President of the United States and Mrs. Reagan. Thank you very much. Thank you all very much. It's a privilege to welcome you here to the White House this evening. You and those you represent were not only the key to the successes of our bipartisan coalition. You're the key to economic recovery of this nation. I see many familiar faces just as we hurried through the crowd here. Where I met with many of you as we pushed for the largest tax and budget cuts in our history. But I know that all of you here worked very hard to make those goals a reality. You and your neighbors and coworkers wrote letters and made phone calls and visited your congressman to get them passed. And members of Congress later spoke of being overwhelmed by the outpouring of support. Spoke of it. They screamed about it. No one could get through on their phone lines. But we do owe you a great boat of thanks. You didn't do all that work for a thank you. As you better than most see the necessity of restoring free enterprise to American life. You understand the bottom line of profit and loss. And you know that people, businesses and governance must live within their means. Representing all aspects of American life, you know the opportunity in store for all of us if we reawaken our entrepreneurial spirit. For too long there's been an adversary relationship between government and its own business community. The freedom to take a risk, to reap its rewards, to work harder for a better wage, to climb as high as your own ambition and effort will take you. That kind of freedom is basic to the dream that is America and essential for the return of economic health in this country. After decades of big government spending, there were some who didn't believe that the American people would take action to change that. But they did. When I first came to office there were some who said the people didn't care enough to insist if Congress went along. But they did. And now there are those who doubt the staying power of the American people who don't understand our commitment. And for those doubting Thomas' I have a message. They're wrong again. I think what must have been a thrill to you and it's been the biggest thrill to me in all these months was to discover how the American people believe in America and in themselves. There's a great deal of confusion at the moment. I know, yes, our economic recovery program has been passed by the Congress signed into law, but it's not yet in effect. The legislation that was passed this summer was historic, but that was only a beginning. We've only started on the long, hard road toward recovery. Yet suddenly we hear some saying that our programs aren't working. Well, of course they're not. They don't start until October 1st. And when they do start, they're aimed at reversing three decades or more of mistaken economic policy and they're not offered as a quick fix. It isn't going to happen overnight, but they will work. I'm as committed today as on the first day I took office to balancing the budget, freeing the people from punitive taxation, and making America once again strong enough to safeguard our freedom. And I'm sure today that I ever was that we can achieve all three of those things. We'll continue to make budget adjustments as needed and we'll hold the line. And I hope we have the same kind of bipartisan support that we had in passing the program as we now have to need to resist the efforts to increase spending through appropriation bills. As for myself, with regard to that, I will not hesitate to use the veto to block any such efforts. And let me silence those, those who would scare our older Americans. The budget will not be balanced at the expense of those dependent on social security. That system has serious problems, but we have sent our proposals to the Congress and we have no plans to change them. Now, I thank all of you for all that you've done to give our country a new beginning. But I remind you that there are many trials yet ahead. I hope we can count on your help, the help that was so invaluable in the past. Together I think that we're equal to our challenges and together we'll surmount them. So again, it's just a heartfelt thanks and now I have a couple of presentations to make. You know, there were a lot of you and all the help, as I've said, that you gave. But here in Washington, there were a few people that before the fight was over, must have wondered why they have made the decision to come here in the first place. And so I have a couple of presentations to make to people that had to have worked as hard as anyone in the world were Dave Stockman, Office of Management and Budget, and he put in more hours than there really are. And this is just a little souvenir we thought that you might like. It contains the first page and the last page of that great reduction in government spending, the one where you put your name and make it legal, and one of the pens that was used to sign it. Dave and then someone else who must have wondered if he shouldn't have second thoughts. But he was one of the heroes of getting this done. Equal in the number of hours, day after day, and doing a great job of selling all the time. This is the front page and this is that last one, the bottom line where the signatures go to Don Regan and this is the tax program that we do without tax. If there's a double signature on there, I thought there ought to be a little personalized note on these ones. Well, there is no way to measure what they did and the work that they put in. And it's a shame to just have to say that that was only a battle, the war still goes on. So they'll be still at it for months and months to come. Not only in getting this 82 budget passed, but then as we said before, we're working on the unspecified cuts that must be made in the budget for 83 and 84. And we're going to now make them specific. But again, and I know they'll agree with me, there will be no retreat. So I'll turn you over now.


The use of woody biomass for bioethanol production has become increasingly popular due to its abundance and low cost. However, the presence of lignin in these materials makes them difficult to break down, requiring a pretreatment step before enzymatic hydrolysis. Thermomechanical pretreatments have been shown to be effective at breaking down lignin, but the type and severity of the treatment must be carefully considered to ensure efficient conversion of the material into ethanol. This article was authored by Maria L. H., Nicholas Luca, Sidokmed Rezog, and others.