The second part of this lecture 20 is going now into unit testing. Just as a short reminder there are tons of different things you can do, different ways of testing, different grades of optimization, different focus, different abstraction level. We focus mainly on unit testing here and now if we go into server-side JavaScript there are a whole bunch of things you can do. So you can do unit testing for single functions. You can do something that is called endpoint testing. So we test our HTTP server endpoints, the different methods we have been programming. Of course you can do integration testing. So once you integrate multiple functions, files, libraries and as a matter of fact endpoint tests are quite often integration or system tests. So they usually test more than one thing and you can do system acceptance testing. You can of course not do any UI testing since server-side JavaScript does not have any UI. And all of this is luckily highly automatable. To recap, when we did not use Node, we did not use NPM, we used Mocha through the browser. And as you of course remember we included our JavaScript files with a script tag and then to run Mocha we also had to include Mocha itself. So the Chai and Mocha libraries. We had to set up Mocha and we had to include the test file which was then run automatically. Luckily with NPM this is getting a whole lot easier and it's much more like traditional unit testing. So we simply use NPM to install Mocha and Chai, the two tools and then we use the executable. We use Mocha to specifically say please test the following file. The test file then is responsible for including all the JavaScript files that are relevant. And this is now a much neater separation of tests and application codes. So for instance you see that there is a .test subfolders. So all the tests are in one folder, all the production code is in another folder. So it's nicely separated. There is also no test setup code in our application code. Which is exactly as it should be. So that's much much neater. That being said you can run Mocha like this also on JavaScript files that run in the browser. It's just that back then we did not introduce NPM or note but you can also do that. So that's important. There's one last thing here that we haven't maybe mentioned that much is the minus minus safe def. So you have seen minus minus safe. That simply means that the dependency is saved in the package.json file. There is a difference between regular dependencies and def dependencies. So these kind of development dependencies are only installed for development purposes. If you are on the productive server they are not installed. So it's just less. It's less dependencies that could cause problems, security vulnerabilities and so on. It's less space that is being consumed and so on. So quite often in real cases you see this distinction between regular and development dependencies. Okay let's just jump into an example. I have shown you this module at some point when we did lecture 14 on some advanced JavaScript. I showed you that in note you can simply write a module and export individual functions. So we had for example this get SSID function. We had another function and we had a variable and because I used this export these two things were not accessible. Only the get SSID function was accessible from outside. And now we can write a test for that. So we simply write another file for example called test slash my module dot test dot js. So often you use exactly the same name as the file you are testing. You just add dot test. So that way it's clear. This is what you're testing. And now you start your test file by actually including the module.  You include the JavaScript file. You assign it to a variable. And then exactly as you did before you write the mocha test. So you just do describe, give it a string, give it a callback function and then you have your individual tests. So for instance a test that checks that get SSID is returning a number would look like this. It would just say chai expect then there is the function call my module dot get SSID. So we call this function and we check that whatever is returned is a number. So that's just a type of check in JavaScript. So essentially checks that this variable here is a number. So let's look at that in VS code. I just go into the appropriate code here. I open it. Here is my module exactly the same that I just showed on the slides. So I have my get SSID that's exported. And here's my test. So it's down here in here. I called it tests. Let's rename that test like in the slides. I import my module. I also have to import chai. That's nothing that I have in the slides. And then I check whether the return is a number. Let's try to run this. Here we are. I still have to install the dependencies. So we could try npm install save death mocha chai. That's exactly what's on the slides. And now you'll see that there is a package.json file created in the moment. No, it's not. They directly install it because I don't have a package.json also fine. But if you look into the details here, you see that there is chai and there is mocha. So those things have been installed. And now if I go in here, I can simply run it. So this is just the executable. It's in my node modules in the mocha folder in bin mocha. And then I pointed to the test file. So in my current directory, it's in the test subdirectory. And it's called my module test.js. And if I run this now, this looks exactly like it did in the browser just in my console. And you see that my test fails because one, two, three, four, five is apparently not a number. If I look into my code, I'm actually returning a string. So if I change this, now it's a number. And now I rerun the test and the test is passing. So this is pretty much the same as before. It's just that it's much, much easier to execute these tests. You don't have to write any HTML code. You don't need any HTML code. And that's making the whole story much easier. Also here, this is our module. This is our application code. There is no reference to the testing stuff here. So it's really clean application code. The testing them is responsible for importing whatever is needed. So that's how we do it, basically. But now there's an interesting concept here. One thing I have mentioned a bit is that we are actually doing unit testing here. So we should only test a single unit, like a function. And the other thing is when you do that, what are you actually testing? And I've mentioned that a bit. One thing of classifying this is to say you have the success case. This is how the function should work. And then you have like edge and corner cases or something that is at the edge. If you have any input at the edge of an interval, like in assignment three, for example, the date has to be in the future. So one edge case could be to take the exact date. What happens then? Or the end date of an event had to be larger than the start date. So what happens if you make them equals, for example? So these kind of things are typically edge or corner cases that you should be very careful with. Those things you can check.  So that has to do with input checks, input validations. What happens if in the date field instead of a number I put in a string or I put in undefined? What happens then? Those kind of things you should test. There are a number of other things we should be looking at. One is don't do random values because then you get something that is called a flaky test, a test that fails sometimes, a test that doesn't always fail. This is in practice one of the biggest problems companies have when they have large test suites. So that's what takes them a lot of time that there are so called flaky tests. Instead of random values, you should really think about the cases, like as I said before, you have edge cases, failure cases, success cases, and then make the test deterministic. One test only tests one thing and it does it in the same way every time you execute it. If you want any kind of random behavior, there's other stuff to do that. For example, you have things like monkey testing, which is just doing random things, pushing random keys on your keyboard if you have UI testing or so. So the aim of unit testing is always that a single test should as precisely as possible test something that has to do with the cases, but and that's now where we get into the next step. It also has to do with other functions. And if we look into the example here, if we look into our module, the get SSID function is calling another function. So it actually depends on what this function is doing. And that means our unit test is not a real unit test, but it tests two functions together. And this is not good because imagine this other function is developed by someone else and it changes behavior, suddenly your function fails or your function changes behavior, but it's not because there is a problem within your function that it's because someone else has done something wrong. And that's something you do not want to have in unit testing. In unit testing, you really want to assure that your function works assuming that all the other things work. So you do not want to care about what happens here. And that's that's an important thing. And this is why we have something that is called mocks or stubs. So we want to replace other functionality by some kind of fake behavior that does exactly what we want. So we want to limit external resources, not only other functions, but also database access. So you don't want them in your unit test, you don't want to start querying the database, you don't want to start doing HTTP requests, because those things can be slow, they can behave in a strange way. So it could be that sometimes your test passes because the database is quick, sometimes your test fails because the database currently has a lot of load and that's why it doesn't reply on time. There might be bugs in those things. So again, this is nothing that has to do with your functions. It's something else. So that you want to avoid. And the main reason why you want to avoid that is if your test fails, it's very hard to tell what exactly was the reason. If you actually only test your function, then you can tell exactly if the unit test fails, it's because of your function or because of the test, one of the two things. But if you have a lot of dependencies, you have to start looking at all the details. Remember also in lecture nine, we discussed system testing, UI testing, you saw that there were a lot of different error sources. For example, we don't wait long enough after clicking and so on. So everything that is extra that our function depends on, we would like to reduce. And one of the main ways to do that instead of programming in a certain way is to use certain things for testing specific facilities. And there are essentially two things we use. One is called stubs, which means we are replacing a function with some kind of fake thing. And mocks, those are essentially things that replace external resources. So instead of doing an actual HTTP request, you pretend to do an HTTP request. And we'll just look at two libraries here. There are lots of tools for this. But one is called sign mjs. That's what we use for stubbing. And then there's something called knock, which we'll use to replace external libraries. So stubs are there to replace other functions so that we can really make sure that we only test our function. This is something I adapted from one of the labs, I think. So that's a piece of code where we first want to check a URL. If the URL has somehow the right format, then we want to load a file from there. And then if the file is being loaded, we say, okay, if the file is not being loaded, we say file could not be found. And as you see in that code, I'll quickly open it up here as well. Yeah, it's from lab four. As you see in this code, the function we want to test depends on two other functions. And it could be that we are in here, we're doing everything correct. But someone is messing up check URL. So for example, the check URL function assumes someone does a bug and it always returns true. So it does not have the right behavior. So suddenly if we would test this, our test might fail. But it's not because we have done something wrong, it's because someone else has done something wrong. And then we have to check where exactly is the problem. So what we would like to do is we would like to exchange these actual function calls for something fake, we just assume that this thing works in the way it does. And one way of doing that is to use sign them. What we could do is we create a so called fake function, that's these two lines here. So we say create a function that always returns true. So this thing just returns true, very basic. And then we replace a call to mod dot check URL. That's just our function call. Down here, you see mod dot. So mod dot check URL is replaced with this fake thing. So now every call to check URL is simply returning true. The function is not any more called. And that makes sure that no matter how messed up this function really is, our behavior is really just testing the check and get URL method. And we do the same with the other function. Here it's slightly more complicated because load file async is an asynchronous function. So here sign and offers the yield option. So instead of returning, it means the callback function, the input parameter is called with null. But otherwise it's exactly the same. So we basically replace two functions with a specific behavior, replace check URL always returning true, replace load file async with always calling the callback with null. So if we go back into our code now, what will happen is this thing will return true. And this thing will take the callback function and put null in there. And then we can actually check, is this behavior here correct? There is not a lot of behavior here, but at least we have gotten rid of our dependencies. So then the test looks like this. Before each test, we create these fakes. And then we simply do the call to our function, we put something in as not valid. And we assume that the return value is null. Let's run this. I again have to install mocker and shy and also see not knock. Those sort of things I'll be using. Take some moment. And now I can run mocker on my test app stopped. And there's lots of stuff happening. I don't know what's going on. Cannot find module. Okay, there's a lot of other stuff I haven't installed. Let's hope it's not too much. Okay. Now this looks better. Now this is passing. So you see that the behavior is exactly as it is. If this thing returns true, so it goes into the next call, this statement returns null. So it goes in here. And then the callback is actually null. And that's exactly what we test for here. Now assume that I do a mistake here, I accidentally do not equals, for example, then our test would fail. So that's what we want to test. Instead, if I now do a mistake in my check URL. So for example, it returns false. Now you see that this would be not true. So it would go in here and will actually give me a different callback. So our test should fail. But you see that the test still passes. And that's because I have replaced this function call with something else. So even if someone messes up this function, our unit test for the check and get URL still runs because we have not made any mistake in here. So that's an important concept. Stopping. This is as I said, in in sign in, it's called a fake. But you'll see similar concepts in other programming languages. Sometimes it's also called mocks. So there is no clear distinction there, I would say. But in this world where we're using here, stubs of fakes means replacing a function. And then the next thing is mocking, you kind of replace some kind of external service. For instance, if we look at the load file as a function in more detail, let's go into our code. What happens is, I'm using a different library here, but we basically do an Ajax request. So someone puts a URL in, and I do get request to that URL. It's asynchronous. And then, if we get a reply, we just send the text back, whatever the URL replies, if the status code is 200, we send the response back, otherwise we send null back. So that's just some kind of asynchronous call. But this is an HTTP request. So it's again, something external. It's something that has unpredictable response time. So this is really tricky to test. So if we want to just unit test this function, then we would like to replace the actual get call with some kind of fake thing. We want to check that this works, but we don't want to check that our network is quick enough. So we replace, we don't send an actual HTTP request. We mock the HTTP request. And this is the test. There's nothing special here. We call the function and we use an asynchronous check. We check that the loading this resource sends back, backend is online. That's what we check. And we're done. But now we use knock, we use this other library to say replace any call that goes to this address that uses a get function to test. So if anyone sends a request to a URL slash test, then you should always reply status 200 back end is online.  It always replies this is just a fake in our code. Each get request to this URL will return 200 back end is online. And they will do so immediately. So we don't have to wait any certain time. So let's look at that. That's the other test here app mocked test. So I am saying any kind of request that goes here, flash test should reply this. And then I try to trigger this and I get exactly that result. Let's try it. It would be surprising if this now behaves strangely. And it passes. And this is interesting because if you go to the real URL. So this is what I used last year in the course, this URL does not anymore exist. So if you do an actual call to that URL, it would not work. No such app. So you would get something else left. So if I actually remove this, if I let the test run the actual HTTP request, then this would fail. Because I get null back. And I expect that back end is online. Again, this would be more of a system test because I'm testing my functions in addition to external things. In this case, some kind of back end that runs somewhere. So if I really just want to test the load file as a function, I should replace these calls. Okay, that's roughly what I wanted to cover in this lecture. So we have gone through linting, static analysis of our JavaScript code, what are common errors, what are bad smells of code that might lead to problems. It's not a problem in itself. We looked at debugging. Do try it out. You will have to try it out in the assignment for the issue here is our note file, our note application runs somewhere it doesn't run in the browser. So we somehow have to connect to it. We can use Chrome Inspector VS code for that. But we have to run it in inspect mode. We did unit testing much much smoother than we did it in mocha. Because we don't any more mix application and test code, we not any more mix HTML with JavaScript and whatever. So it is nicer. But then we looked into the details. If we want to do proper unit testing, if we really don't want to have any dependencies on functions, databases, HTTP requests, whatever, you need to use techniques such as stubs and mocks. So you need to replace external resources. And I've just shown you two very basic examples. I've replaced two functions. I have replaced an HTTP request. But you can probably imagine based on those five minutes, that this can get quite complicated in an actual application. If you have a lot of calls, if you have a lot of dependencies, this is not easy at all. So that's another skill that you will have to develop over time. And this is not just in web development, this is everywhere the case that you need these kind of techniques to write good unit tests. Okay, this concludes lecture 20. We'll continue with with testing a lecture 21. And there we look specifically at endpoint testing. So we look at how to test our restful APIs, what should we be checking for? Overall endpoint testing can be seen as a form of integration system testing. So we test the entire backend through the HTTP request. But more on that in the next lecture.


The study found that Beijing's reported incidence rate of hepatitis A decreased from 59.41, 100,000 in 1990 to 0.80, 100,000 in 2017, and the average age of infection was postponed from individuals under 20 years old to over 20 years old. The hepatitis A vaccine introduced in Beijing decreased the outbreak of hepatitis sharply. The adjusted anti-HAV positive rate in general population increased from 68.23% in 1992 to 82.47% in 2014, and the coverage rate in target population was higher than 99% after hepatitis A vaccine was integrated into expanded program on immunization, EPI. However, a higher proportion of adults may be susceptible to hepatitis A virus due to the decay of antibodies as they grow up from childhood to adulthood, which may result in possible outbreak of hepatitis A. This article was authored by Huaiwang, Pei Jiayou, Wei Xunchen, and others. We are article.tv, links in the description below.


Assume that this is the deceased and I have him on the table and it has some coverings probably. So the first thing what we do is, we lay him down on the... So by the way, the Qibla for the deceased or the living and the dead as Prophet Sallallahu Alaihi Wasallam said is Kaaba. So we make sure that the person is laid in such a way that the right side of his is facing the Qibla, the Kaaba side. So that's where we make it a point. And then before starting Ghusl, we make an intention of giving Ghusl to the Mayat or the deceased to purify him and to also fulfill the obligation as well as according to the Sunnah and for the sake of Allah. So with those intentions and with those, you know, the things that I mentioned before about no Quranic recitation and those things, we start off undoing the clothes. So before undoing the clothes, I have the Tamim here. So what we do is quickly we have two towels. We just lay down two towels. There's another one for Ghusl. So we make sure like I said, the Sattar. Sattar is the area between the navel and below the knee. So that area we make sure is covered all the time. And so one vertically, yeah, so this way one horizontally. So we make sure the Sattar is covered and basically we undo the clothes. What we do is basically unzip if it is a hospital bag or any kind of a thing. What we do is unzip everything. If you need, we turn him on his left or right. Make sure each and everything is taken out of the deceased with the Sattar covered. We also make it a point, any kind of cubes, you know, cubings, we take the consent. I mean, we ask the family members if they can take it out on our behalf because we are no experts here while doing this. So that's why we tell if they are in the hospital to take out all those tubes and stuff away after the deceased to the hospital. So we undo the clothes, any kind of patches, bed sores. If it is very hard to take it out, we let it stay there. But any kind of a thing like a bandage or anything, we make it a point to take it out with all this. And one key thing is, again, when we have the Sattar covered, whatever we do, we make sure that we don't gaze at the private parts of the individual at no point of time. All the time we have our gaze down and we start up with this. And the first thing what we do like, and this goosal, goosal is washing. This goosal washing is very similar to our Juma goosal that we give for our Juma or any kind of a goosal that we give. Basically, there are three parts to it. The first thing we do is, before doing that, the first thing we do is to wash the private parts. So the private parts and then any other area which has filth, we make it a point to clean all those first. And that is exactly what we do even in Juma goosal. And the second thing is the vadoo. Vadoo is the second thing which we do. And the third one is a body bath. And the one key thing is we always start from the right and then do the left. So these are the three major parts in a goosal which is very similar to what we do with our goosal for Juma or any other goosal. So the first thing what we do is, is to wash the private parts. Assume that the disease is completely taken off the cloth. It's just the sattar himself and the sattar covered. The first thing we do is lift him up and lift him up to the shoulder a bit and press his abdomen three times. So this way we put all the muscles on the brow, make sure all impurities come out of the disease. So that's the first step before we start with istinja. So for istinja, the rule is we make it a point, if you see there, there are many small clothes like this where we tie, wrap around. We make it a point that the hand doesn't feel the private parts. And so we use small turkey towels like this and we soak it in water and we use soap as well. And there are few brothers, at least five or six around us to hold those towels up. So he's holding one so he puts his hand down and make sure the front part of the private part is washed. So we do this and throw away those towels. We use as many as small towels are needed to clean the private on the front of the private part. And also I make it a point to make sure that the groin area, because these are the hard areas, make sure that those areas are also washed and cleaned until they feel good about this. Now, as soon as the top part and the groin is done, we tilt him or the disease to the left so that the right side of the private area from the back is cleaned. So you turn him, you move the towels a bit to the other side so that you are not able to see the private parts. Now, you lift one of the legs here so you have some clearance. So you reach out under the sutter to wash the backside of the private part. So we make sure we do that with again throw away as many small clothes we need to throw away. And the same thing, he will come over this side or if I am on this side, I make it a point to do it from the backside from this side. So this way, both the front and also once the backside of the private part is cleaned up, I make it a point also make sure that the lower back and other hard areas are also cleaned. So at this point, the first step after pressing the abdomen, the stinger will be complete. And in addition to that, then before going to the second step, which is the Vadoo, we make it a point, you know, sometimes there are a lot of bloods, blood and other fluids coming out of the mouth and nose and stuff like that. So we make it a point to use a cotton swab to just clean up all those nasal. So we just take a, so the brother here has a cotton. So he will wet it up with a cotton and just clean up the nose, the left side of the nostril, the right side of the nostril, take out any blood or any of those that is there on the face, the ears as well. And sometimes because of the rigor motives, you can't open the mouth wide. So we also make it a point to just use a cotton swab to wipe the lips as well and the teeth as well. So those are the part of the stinger where all the dirt is cleaned up. So that's number one. Now comes the Vadoo. The second part is the Vadoo. So we start with the right. We just wash the palms, the right palm three times and the left palm three times. The Farayda Vadoo is done. Basically the Farayda Vadoo is washing the face three times between earlobe to earlobe from the top to the bottom of the beard, every nook and corner of the face three times. Then we do the right arm till the, so let's go and do it. So we're going to take water and we want to make sure the water doesn't go into the nostrils, into the body.  So that's the taking care of the Vadoo, the face part, which is the Farayda. And then we make sure the kill all of the fingers, all the fingers between the fingers are washed three times all the way to the elbow below the elbow of the right. So always we start with the right and then we go to the left. So we started the face with the right and then we go to the left side of the hand all the way to the elbow three times. And the water we use is lukewarm water. So it's similar to what we take shower with. We feel good about the water. So we make it a point that it is a mixed hot and cold and so it is good for that. So once that is done the masa, masa of the head is done. So we make sure the masa of the head is one time is enough for this. So and some people can also extend it to go all the way to the ears. And finally we come to the leg ankle. We again kill all of the fingers from the right. So the sunna way is from the right side and you go all the way to the left side. So you do the kill all of the fingers and also wash the ankles three times. And same thing with the right leg and same thing with the left leg. So this basically completes the second part. So after istinja we are done with the third one is we have to. So now if you want to change before doing the voodoo, if this gets dirty, we change them. Now we go to the final giving a bath. All we do is three times water bath. We start before giving a bath, we make sure we close the nose and ears. We plug it in with the cotton. We also cover the mouth and also the ears. And then we start with the body bath. The body bath basically is the right side. You have right side body bath three times and with the hand under the arms, everything. Then we turn him around and give a bath on the backside on the right side. And then we do the same thing with the left and we complete the left. So this basically and after this we press the abdomen once again. The voodoo is not necessary after that we do that again that completes. And the last is with the camphor. We have camphor is some kind of an aromatic stuff that we put in the water. And we run through him three times and that completes the goosal. All that is that completes the goosal. And basically what we use is some kind of a camphor here tablets. We just crush them and put in the water. It gives that aromatic. So this completes the washing and we now dry them up. So once we dry them up, we go to the coffin. So what we're going to do is like I said, there are three pieces of cloth. There's a big one that's a small one. So there are three big, there are going to be three big clothes. Not this one. Okay, there's a big one. Okay, so we lay out the bigger cloth. So like I said, it's an unstitched piece of cloth, three big cloths. So we just lay out the top one. And then we have the trouser part. So you can see the slit here. Can you show the slit? So if you see here, basically there's a slit here. And that's where the head is going to come. There's the top part of the shirt. And then you have the isal. So I think we're almost done. We'll just place the mannequin here and we'll just wrap him around. Just put it quickly. So once it is dried up, once we are dried up, you know, the sattar is still covered, you know. So you see here the head, the shirt, the top part of the shirt, which is, you know, the kameez that comes on top. And at this point, you know, if there is ittar, we put the ittar on the body as well. And then we, with the sattar covered, we can take out the two, the two turkey towels. And we have changed the turkey towels a couple of times and once it gets dirty. So we have the sattar still covered. And the next one is the left side of the isar is, let's put it quickly, two minutes. So what we're going to do is just wrap around this, put it on the leg. And then we have the right side, which goes on top. So we have these two together. And then the outermost is the biggest one. So beneath this, there are three tie ropes. So basically we tied the leg side, the midsection and the head side. So with this set, you know, the thing that I try to tell the family is what comes next is the three questions, you know, that is asked in the cover, in the burial. And that is key. And I tell all the family members to, you know, prepare themselves to be in a position to answer those three questions. The Mar Rabbuka, Madinuka, Man Nabiyuka. This is the question asked in the burial, in the burial by the Munkara Makir. And so it's very important for us to say, because our mouth is not going to speak, it's our conviction on those things that's going to, because the life of the hereafter is from the burial, you know, from the, once the person is buried, that's when the life of the hereafter starts. So I think that completes the wrapping and we show the face for the marums and then we tie them. So there's a tie rope at the bottom. We cover the midsection, the leg and the head. So that completes.


One of the themes I keep coming back to is simplicity, minimalism, and looked at minimalism of my physical possessions, the clutter that is around me, having clear open space physically, and could also look at that in the clearness of time having not too much clutter-filling time so that there's open space in time, not trying to consume too many experiences and just fill up time with everything, and maybe the next frontier, or just another frontier of that that I hadn't thought about before as much, is just even within my own mind the clutter of knowledge, the clutter of things that I know. Now, you know, the word knowledge covers a lot of things and overlaps with something like wisdom where we really know the most important things and we have some idea of the best way to live, so I think wisdom is really the true knowledge, that's the true, the things that we really should know, knowing how to live well. That's the core knowledge that I think has a great value, but then there's just so many things that we know that I begin to question how useful it is to know all these things. Now it feels good to know things and I have this weakness, especially just, you know, collecting trivia, knowing all kinds of things and then it makes me feel good that, you know, I have this some kind of obscure knowledge, but you can see how it can become a little bit foolish or a lot foolish to sort of have this notion that we know a lot, because it really has a parallel with having a full space, like having a full mind full of knowing things is like having a room full of objects and possibly it's missing some kind of opening in order to learn new things, in order to become aware of things that we didn't know about before, and you can use the metaphor of like the air pressure, like when you have high pressure air, like it doesn't let anything else in. If you have the vacuum, then it lets other things in. So we're for full. Whatever we're full with, we tend not to let other things in, whereas if we have a certain emptiness, then we let things in.  But I think there's a room to have just a certain space of just saying that I don't know and to just be okay with not knowing many things and really just letting ourselves be aware of what's happening around us, so that if I don't have that sense of I know, then I can just be more neutral and more open to simply seeing what's really there. Because coming to a situation with a sense that I already know what it's all about. Well, not only does it make it hard for me to actually learn more about what's really happening, because I already think I know, but also it kind of just makes things a little bit more boring too, because I imagine if we really believe we know and we have a good idea what's going on, then it just seems like the things that happen every day, they just seem very predictable. It's like, oh, I knew that was going to happen. No surprises. Oh, everything's just as I expect. And even going into every situation, expecting that we know, oh, it's going to be, yeah, there might be a few little surprises, but it's basically going to be within this range of things that I expect and I already know. And so everything kind of becomes fixed and set in stone and we possibly even become blinded to what's actually going on. That makes me think of the difference between child and adult. Maybe as we get older, well, one of the many differences in mindset is the adult mindset is more of a sense of a fixed idea of what is going on in the world, the way the world works, what's happening, what everything is. Everything has a clear place and we know exactly what it is or close enough. So everything just becomes kind of fixed, whereas imagine for the state of mind of a child that when you're experiencing something, if it's completely new, imagine what it would be like to just see ordinary things like the ordinary room around you or the people you know. Imagine you were seeing them for the very first time and you had no idea what even there, what category they're in or what type of thing or person they are or whatever it is. You just have no idea and you're just completely open to seeing this thing as if for the first time. And maybe that's connected to the idea of having that kind of childlike wonder and openness to the world. So I think this could definitely be taken too far and we simply like forget everything we know. Obviously knowing things can be very useful, but I think there's also a place for simply letting ourselves be mentally empty and just like just say to ourselves, okay, I have no idea what this is and have that sense of complete freshness and we may be surprised by what we see.


YouTube team keep it clean and we got a lot to talk about in this video, but let's get business out of the way first Yesterday Luke Jones. He reported per the transaction wire that the Ravens placed Ben Cleveland and Titan Jake Breeland on the active non football injury list now We explained this on Twitter, but I know not everybody's on Twitter. So that's fine So I just wanted to explain it really quick now that this is not a big deal I mean my opinion personal opinion, I would be more concerned over this for Jake Breeland But not for Ben Cleveland reason being cuz Jake Breeland He was injured from last year and we don't know the status of where he is right now where he is moving forward But we know that Ben Cleveland is healthy So all that this means for Ben Cleveland is that he did not and could not pass the Conditioning test and you know the Ravens conditioning test is something serious That test is just they they hate it a lot of them hate it because it is known to be one of the hardest conditioning tests in the NFL So Ben Cleveland will be fine once he passes the conditioning test You're gonna see him removed off of this list now again with Jacob Breeland We don't know where his health is so it's kind of hard to say what's gonna happen with that But nothing to worry about Anyway, moving on y'all y'all don't miss a thing y'all don't miss anything That's why I love TV team keep it clean and that's why I always say that we a family man Cuz y'all know if something's up with me like y'all could tell that my voice is a little bit off Cuz yes, I do have like not even a cold I didn't know what it is.  I'm gonna be Lamar Jackson and you be Gus Edwards I'm gonna hand it off to you and I ended up being Gus it was I wish I would have been Alex Collins and fumble But I didn't I took the handoff I took the little mini cold or whatever it was and I kept it in It's just I'm on the back end of it And it wasn't even like a full blown cold like one day my throat was hurting a little bit And that only lasted for a day and then for the past like two days I just been like sneezing a little bit and uh having to blow my nose a lot But that that was it So I'm good though. I appreciate y'all that that and actually noticed that like y'all y'all are good Something else that y'all noticed I saw a lot of people commenting and making fun in yesterday's video of the way that I was pronouncing Yannis's name Now originally early in the video. I said G honest, but guess what? I saw having so many times should a screenshot at all of them and put them in this video But I'm not petty like that or some days. I can't be though, but Early on in the video throughout the early portion of the video I was saying G honest G honest G honest, but then I caught myself. I was like hold up It's Yannis and then I saw some people put comments Oh, hey, look at him saying G honest or G out of G honest and then when I would go to reply to those comments a lot of them Would be deleted so I say, okay Well, some of them actually they kept listening to the video and heard me correct myself, but it's all good I still love y'all me. I still love y'all now Speaking of that video One of the last things that I wanted to talk about today In the beginning of that video from yesterday about comparing Lamar I was about to say Lamar G honest Lamar Jackson to Yannis on to Tocumpo. Oh But in that video in that episode of question from subscribers, which was a really fun one We got some more questions from subscribers to it's like man We talk about basketball for a tiny bit then y'all start throwing these questions these basketball questions in it But anyway In that video in the beginning of the video we put up two clips one of Baker Mayfield playing cornerback with the kid at the camp then we put another clip of say Juan Barclay playing cornerback with a kid at the camp and One and I saw it all over Twitter yesterday. I even chimed in myself a bit, but We haven't heard anything from Shannon sharp regarding this Now Baker Mayfield is in the same position as Lamar Jackson Say Juan Barclay is in the same position as Lamar Jackson to where they have huge Contracts coming up the teams have picked up their fifth year options. Obviously with those other two players They're definitely we're gonna pick them up They picked up their fifth year options But we didn't hear any uproar about them playing with the kids And I know a couple people were like, oh, whoa, it wasn't on asphalt. That's the reason why no That's not the reason why That's not it because if this just goes to show you Because a lot of people say they try to say oh Ravens fans you guys cry so much about Lamar Jackson Oh Ravens fans always shaming Lamar Jackson gets overly criticized and overly talked about in a negative light, but it's true It's true Baker Mayfield does he play cornerback? No, he's a quarterback But he was playing cornerback against those kids at the camp and whether it was on grass or not He was still engaging in physical activity that could have resulted in an injury But did you see any Shannon sharp outbursts or Mike Florio making articles about no? No, I didn't see anything and then even worse was say qualm broccoli He's coming off a major Injury major injury Where he got he got put out for the season. He didn't just miss a couple weeks No, he missed the majority of the season And he's out there does he play cornerback? No, he's a running back But he's out there playing cornerback against these kids and you didn't see not one article about it You ain't see any you ain't see a segment on Whatever Shannon sharp and skip Baylor show is called always getting confused whether it's first take or undisputed always forget But you didn't see a thing. You didn't hear peep So this is what we talk about when we talk about Lamar Jackson. It's almost like Lamar Jackson versus the world This is what we're speaking of now me personally. I didn't have a problem with anything that any of them did I didn't have a problem with what Baker did. I didn't have a problem with what Saquon did I didn't have a problem with what any of them did and of course didn't have a problem with what Lamar did but you see how Things with Lamar Jackson Get blown out of proportion They get extra emphasized Everything that this guy does and somebody else does the exact same thing and you don't hear peep Even the Trevor Lawrence video that I'm sure many of y'all have seen Trevor Lawrence he got a kind of important training camp coming up and I think they may have started. I'm not sure but Trevor Lawrence was with DJ Shark and With two other guys as well and they jumping off of a boat into the water. They could have slipped on that boat If he could have been wet and we've all slipped when our feet have been wet before He could have slipped fell on the back of his head hurt himself. Oh man, that would have been good Not a peep not a peep But again with Lamar Jackson the what ifs if Lamar Jackson would have gotten hurt What if Lamar Jackson Turned the wrong way. What if Lamar Jackson came down the wrong way? Oh, he's got this big. He's about to get the most money. He's ever gotten in his life He's on the brink of a 40 million dollar deal Lamar Jackson, what are you doing? What's wrong with you? But not for the other guys and the thing that um a lot of us Ravens fans talk about when it comes to things like that Oh, all we want is consistency That's it. We just want consistency But when these analysts and experts and whatnot when they speak about Lamar most of them don't bring consistency That's where a lot of them lack Because again, it's they're in the same situation Baker's about to get paid a lot of money a whole lot of money And I know it's been said that they were probably gonna take care of Nick Chubb first And I could understand why and it might take care of Denzel Ward first and I could understand why But Baker's about to make a lot of money regardless Seyquan and with him he's about to make a lot of money and again with him What and with with those guys they doing it have speed They're not going full speed. They wasn't going full goal. You know, it was Lamar Jackson, you know He wasn't going full goal And he and he still look crazy fast But these got like I just Because the I just I just want to express that the point yes in yesterday's video and what I'm talking about today I'm not trying to turn a positive situation into a negative one. That's not what we here to do But we just here to show that it should be in an even playing field But with Lamar Jackson it never will be ever ever I Love what Baker Mayfield did for those kids because those kids are never gonna forget that I saw somebody yesterday say um, oh If Lamar Jackson if he would have just talked to the kids, it would have been the same It would have been the same thing the kids would have never forgot that and you're right It they would have never forgotten it, but it wouldn't have been the same You could talk to somebody all day It's great. The conversation is great and the conversation can be memorable but to actually take action and Engaging in activity that that person loves or that person knows you for That can make the world of a difference to them to make the world of a difference Having a conversation with Lamar Jackson would be great. Be nice Like even for me for example We the conversation we had with Lamar at his fun day. There was no long conversation when he talked to car There was no long conversation. It was quick But I'll remember that Well, Carter probably will too because Carter got a really good memory but if on the day that I went if Lamar would have been out there and he would have been like hey, let's line it up I Would be like, okay, let's lock that up. I would have got a little cornerback stance. I said, okay Let's go and the results of whatever happened after that we would have seen but I would have loved that that much more So much more because Lamar Jackson is a professional football player He plays in the NFL. He plays for my favorite team and whether he plays for your favorite team or not That's a football player. So for a football player to play football with you as a fan. It's like whoa That like whoa, so it's not the same as just having a conversation Baker may feel again same thing. Love what he did for those kids. Love it Say Kwan Barkley love what he did for those kids love it because he could easily get up there at his football camp Get in front of all the kids. Hey, this is what you guys need to do You guys need to stay focused. You guys got a bright future ahead of you. Hey, things are gonna be great Just keep working at your craft.  What whatever it might be Keep going at it. Keep going get it. Keep striving. Keep pushing yourself. Don't give up kids And that would have been fine and all the kids could have said oh, I went to say Kwan Barkley's camp He spoke at his camp, but to actually engage with them For somebody to be able to go home and say I played football with say Kwan Barkley today. I Played football with Baker Mayfield today. I Played football with Lamar Jackson today It's not the same and it hits even more it hits even deeper and that sticks with them that much more And it's just it makes the experience that much better And it makes you appreciate them as a person that much better because you feel like they actually Can relate to you that much more Because anybody can get up somewhere and talk But to actually engage It's much different so shout out to Lamar shout out to Baker and shout out to say Kwan But the the our thing was nothing against them It's nothing against them We were just wondering why Shannon Sharp Didn't keep that same Energy that he had with Lamar when it came to those two Wonder why Mike Florio from pro football talk didn't keep that same energy with them with Lamar I mean excuse me with Baker and say Kwan when it came to Those two we just wonder it. That was it So anyway team keep it clean. I love y'all. I Appreciate y'all and and I hope these foot. Well, I can't really say I hope these football players continue having their camps Because now they got to go to their training camps. So all these summer camps coming to an end But the football season is coming to a beginning and we're very excited to see how that goes One last thing before we get out of here new episode of the team keep it clean podcast is up. Y'all check that out And I just love y'all man. I love y'all. Thank you for always being willing to listen. Thank you for supporting the channel again Thank you for 43,000 subscribers And let's keep this thing We out


Hello everybody, welcome back to another Canva AI video and this one going to show you how to do basic animations from images and then essentially turn them into animated videos kind of like these ones. These are just some of the basic examples that come with the starter pack so to speak. These are the ones that Canva set up but I'm going to show you how to animate them step by step. So I'm going to close this up and we're going to look at it from the beginning. So there's two ways to access it. There's one through Canva dash create so canva.com forward slash canva dash create and you can go down here and it says create an animation. Alternatively you can go to the canva.com homepage login and then also create an animation. If you don't see these here they may be behind wrappers because they want you to unwrap them so just keep in mind that they're there they're just they might be hidden on your first time. Anyways click on it and then it says here make your own animation try it out. Okay let's keep rolling here and I'm going to close that one here and this is the first screen and they're going to basically give you a default example. Now when I click play there's no animation so what you need to do to make an animation is very very simple.  Okay let's see what we got now it's pretty janky I'm not going to lie there's no smoothing it's a very janky animation but it's kind of on purpose because you'll see here now once the animation path is done you can go to the left side and you'll see here the original movement style but if I want to smooth it out this is another option so when I click on that I'll just hover over it and then you'll see here that it's got a little bit of a smoother look to it and it's still not perfect but it's pretty darn good and then there's also the steady option as well. Now one thing I want to show you here is if you want to speed it up you can go ahead and do that it defaults set to like a speed of like zero like the slowest speed so if anything if you go faster like if I put it in the middle you get a really really really fast animation so it actually doesn't hurt to go very slow on your animation because it's very easy to speed it up but you can't speed it any lower you can't make it any slower than that so go slow on your animation now I've gone ahead and added I've selected smooth also you can orient the path so if you want the B to do like like if you were animating and you want like yeah maybe not quite like that but there are there is orient element to path so you know it kind of follows the direction including the face and the head or if you're if it's a plane going up or down etc etc so keep that in mind that is available but I don't tend to use it okay now if you click out and you don't see it anymore let me show you another few things one you can click on custom you'll notice here that I'm clicked on the B and I click custom I get that back again but what happens if I'm clicked off the B and I'm clicked on nothing well I can click on animate but when you do that you're going to see here page animations and this is a little confusing because they actually override the current animation that I just made so if I wanted to have like a very basic animation like this one like you can just hover over them and try them out parties pretty good chill is an opacity reveal for those of you that know your share of animations a pan and a rise but they actually overwrite the animation so keep that in mind I'm going to click out again now I'm going to go ahead and click back on the B and then I'm going to click on custom and I've got my movement and my animation that I've already created for the B okay now let's go to this one here and this is another one if I hit play you'll see here that all of these are already in movement and they're doing their thing so that's kind of cool let's go ahead move the playhead back and now I'm just going to show you if you click on this and you click on custom you will see their motion path so keep that in mind that you can go ahead and adjust these as you see fit for example if I wanted this to be out here I've gone ahead and moved it so these are the different ways you can animate it once you're done just go up to the top right side click on share and then click on download you can download all the pages or you can download for example just the B page so I would deselect these ones and I would just get page one which is that little B animation for example and I would just click on done and then let's see what we get yeah it should only take a few seconds and then it's going to download and then that's going to be it so there you go guys that's all there is to it thanks for watching if you have any questions or if you get lost or if anything doesn't make any sense just ask me I will do my best to help you thanks for watching


Part of a series, please check out the annotation on screen for the full playlist, obviously watch the previous videos, make sure you have everything set up for that you need for editing the code and that you downloaded the code. Working with PRBOOM, which is a version of DOOM, and we're just having fun with the source code. I think this last week that we're going to be looking at the source code, really well we'll be looking at the source code, but next week and the week after we're probably going to be looking at modifying the binaries that we compile with a hex editor, but for today we're going to be swapping out some items and in the end creating a endless blood bath of enemies. So let's go ahead and if we jump into a file here, I'm going to use Vim as my text editor and I'm going to go into the file called source, in the folder source info C and we were in here in probably the first or second tutorial and I showed you that each item in the game is defined here and its initial settings are set up. So you know, spawn health, we remove this make shootable from it and the bad guys ignored us. I can set the players, well here it says speed is zero because it doesn't move until you move them. You can set the mass, the height, the radius, now damage it causes, sounds that it makes or those are sounds or types of deaths, animations, these are animation frames that we looked at in the shotgun tutorial, but important thing is each item has its own doom number. Now if it's negative one, I think I accidentally said in a different story that negative one is the player, actually negative one is I think any item that's not there initially. So you shoot a rocket, you shoot a plasma beam or a BFG shot, I think all those things will be set to negative one, but for the most part items and monsters and weapons all have their own unique doomed number. So possessed here is our zombie, its number is three thousand and four. The shotgun guy is nine. So what I could do theoretically is change this to nine and you would think oh wherever a zombie goes a shotgun guy will now go. Depending on what order things are in this list that might work, but it will mess something else up. Everything has to have its own unique numbers. So the shotgun, the zombie is three thousand four. So what we're going to do is we're just going to switch these two. It's the best way to do this. So now anywhere there was a zombie guy, there's now a shotgun guy, anywhere there was a shotgun guy, there's now a zombie guy. So let's go ahead and save this and we will make it and we will run doom. Oops, if I could type today. So before those are just pistol zombie guys now they are shotgun guys and anywhere there was a pistol guy there's now a shotgun guy and the other way around as well, which at this difficulty level there are there were no shotgun guys on this level. Hard difficulty, I think there were some outside, but you get the point. So if you were to just change one of these, again, depending on the order one will work and the other one will just not be there. So like if I was to change the shotgun guy back here to nine, make the game and go in, let's see. There's nothing there because it's going to recognize the second one. So the shotgun guys where they are, I believe are still going to be there, but these guys are gone because the second one overrode the first. That being said, now when you are creating your own level or editing a level in doom and using level editor, if you have a good level editor, it lets you import or at least you specify which binary you're using. So this binary is probably look at that and it will grab all the ID numbers out of there. If you're using an older editor and may not have that feature may only be able to use monsters and items that are already there. So if you wanted to create your own, you can do that, but you need a level editor that allows you to do that. But let's have a little more fun with this and I'll show you. We'll go in here back into the source code. I'll change this back to was it three thousand four. So actually according to my notes, the chainsaw is two thousand five. Now if I go and find two thousand five somewhere else, I can change that to three thousand four. So I just swapped the chainsaw for the zombie guy. So now if I make that and I start the game, you can see everywhere there was a zombie, there's now a chainsaw, which I can go pick up. But initially in the original game, well secret, if you turn around at the very beginning, there's a chainsaw over here. There's not now. There's a zombie guy. So I can pick up the chainsaw, but all these bad guys are now chainsaws. Same with these in here. So let's swapping items. Now, I said earlier, this is going to lead to a blood bath. There's another way to set where items are. So let's go ahead and go back into our code. We're going to change this back to three thousand four. And we're going to look for two thousand five. Oh, that's right. It's not two thousand five. I want to change it back to two thousand five. Change, type in the right number. I keep typing the wrong number. Okay. Okay. So zombie, the possessed, we want to change this back to two thousand five. So chainsaws back to being the two thousand five. If we make that, just make sure I did that properly. Things should be back. Okay, they're there and there's a chainsaw over there. Okay.  And there's already an ammo clip over in the corner here.  That's logical thinking, but that's that's not how it works. Because the we're changing the doom number here, the doom number, which is set for placing items on a map, not when they're spawned elsewhere necessarily, sometimes possibly. So what I want to do here is that, as I said, the shotgun guy is nine, ammo clip is 2007. So if I find 2007, I'll change this to nine. And then I will find nine comma, let's go back to the beginning of the file and search nine comma, keep searching for that a little bit down a lot. Okay, here it is right here shotgun guy. And we'll change him I said the clip was 2007. We'll make that. We'll run that we'll go in here and look, we got those guys where that clip was over there. It's a shotgun guy. So that worked. I swapped out those two. But if I shoot these guys, they're still dropping ammo clips, not shotgun guys. That's because we need to find the function where bad guys drop stuff. So real quick, let's find that. And for my notes, I know that if I use my text editor and I jumped a line 787 of source P underscore into C enter C. Here we see drop stuff. This determines the kind of objects spawned during a death frame of a thing, a thing in this case will be our enemies. And we have a case statement here. We're saying, okay, if it's possessed, so if it's a zombie, drop a clip. If it's a shotgun guy, drop a shotgun. If it's a chain gun guy, drop a chain gun. So what we can do here is we'll change this instead of dropping a clip. We have to know what an object is called. Well, we already know a shotgun guy right here. It's called shotgun guy. So we'll say, and this is case sensitive, shotgun guy. And we know that a chain gun guy is called chain guy. Be sure to spell things properly. And here, that's not what I want to change. We can change chain gun to possessed for the zombie. If we save that, make that and run that.   When I drop chain gun guy, he turns into a pistol guy. So you will end up with an endless bloodbath because you can never kill all the bad guys. IDDQD, IDKFA. Let me have a little fun here too.  Now you do have some bad guys. I don't know why I'm bothering killing these guys because they're not dying, such as the imps that don't drop anything when they die. I have not done this, but I would assume that you could go into our code here and add a case. You've got to find out the imp's name. I don't know if it's MT, imp, or whatever they're called, but find that out. And you can add a case statement and say that they're item and you can tell them to drop something. You can tell them to drop a BFG.  So you can add your own case statements there. I'm not going to do that in this tutorial because I think I've shown you everything I wanted to show you today. But thank you for watching. Please visit FilmsByChris.com. That's Chris Decay. There should be a link in the description as well as a link to hopefully some notes on what we just did here today. I hope you're enjoying this. And again, next week, we're going to start working with a hex editor to modify the binary files of Doom. So as always, I thank you for watching and hope that you have a great day. Okay, this is an introduction to FilmsByChris.com. I'm Chris. That's Chris Decay. That's me right there. My daughter, Ember. And my wife, Jennifer. We pretty much live in the swamps of Florida. I'm a firefighter by day as well as by night. We work long hours. But that's not why you're here. You're here about the videos I put up on YouTube. These videos are mainly about computers and programming, which means most of my videos look something like this. And if that's what you're interested in, great. If not, that's all right. I do videos on other topics too, such as video editing, special effects, photo editing, 3D design, and music creation.  So I ask that you take the time to go to my Patreon page and look at different levels of rewards you can receive for different levels of backing. There should be a link in the description of this video if you were watching it on YouTube. Otherwise, you can visit patreon.com forward slash metalx1000. And I thank you for your time and your support. Have a great day.


Hello and welcome to another episode of the Private Property Home Shopper Show. Today we are somewhere we've never been before and that is Kingsington, Johannesburg. This is the first home we've ever had on the show that is situated here. It is going for 4.5 million rand, a four bedroom, four bathroom, six car garage home that comes with a host of other features that would make an entertainer lose his mind. So join me as we tour this house and you find out if this is going to be the next home of your dreams. Coming through your large front door, you find yourself in a home that easily is reminiscent of a safari style lodge but this time you're right here in the heart of Kingsington. Easy access to Bedford View, Bedford Centre, Zawala Santan City and the highway means getting around is never going to be easier. And this home at this price point is an absolute steal. Right here we find ourselves in an indoor, dry area. A really cool way for you to still enjoy South African style living but still keep it indoor, protected from the weather when it's cold or too hot outside. You've got an informal breakfast nook right here, lots of space. It doesn't feel cramped at all. Then this double sided feature wall fireplace, live edge stone gas fireplace that is passed through. So you get to enjoy this on the other area which is your formal dining room area. And then what makes this area so special has to be this right here. A massive fireplace slash bribe. It's got all the netting that you might need to be fully kitted out for any entertainment purposes. Beautiful down lighting and then you've got your flue, your chimney that funnels the smoke out. Really not any smoke will come and penetrate your house or make it uncomfortable to continue entertaining people using this bribe area. If we look up to the ceiling super tall, you've got your bulkhead ceiling with your LED lighting strips. Really cool feature. And then I love all this stacked wood underneath place there for your bar fridge. And then this right here, we're talking about fire pits, we're talking about fire. Got a fully enclosed fireplace right over here. Really beautifully kitted out in wrought iron and that services this area here. A massive, massive living room area with cultures that possibly look but as comfortable as you can get. Got stackable sliding doors on both edges. This is, without a doubt, an entertainer's dream because of how well it's set out. I mentioned that fire pit being passed through. Here is your formal dining area and one of the coolest dining room tables we've seen. Beautiful live wood slab acting as your dining room table. Unfortunately the furniture is not included but it gives you such a good idea of how incredible your area could be in this home and how nicely decorated it could be. Then if we come outside, you easily see why I say this is an entertainer's dream. We've got tiled floor as well as low maintenance wood decking. On that deck easily my favorite feature for every single home would be this right over here. Massive jacuzzi. Beautiful, beautiful garden, plenty of space, lots of greenery. So it is nice to be out here, it doesn't feel barren at all. Then as I mentioned, you've got space for seating but with that space for seating comes a lot of space for you to entertain the people that are going to be sitting here. Full prep area, prep sink, plug point. Got a draft machine right over here and then all underneath here along the way are inbuilt fridges. Then over here you've got your outdoor fireplace. Maybe you don't want to do it inside, you can definitely do it outside. A couple of other killer features when we talk about this garden area is your low maintenance mosaic pool tucked all the way to the back with a fountain again off of those live edge rocks. Beautifully, beautifully done, shade netting over it and then something else that makes this home so, so special is its size. Or should I say it's a land size, massive piece of land right at the back of it. You've got staff quarters or at least place where you can turn into staff quarters. All the building is there. You can turn it into an office, into staff quarters, into another outdoor entertainment area. You can maybe even turn it into a huge play area for the kids if you'd like. Then talking about other quarters located on the ground, you've got a two bedroom, two bathroom cottage with its very own kitchen, dining room and lounge area. That is a ready built two story tucked away beautifully there. So you've got so many options if you're living in this home, but now we have wrapped up the outdoor area. Let's go back inside. Let's talk about the kitchen and then it's time to take a look at the bedrooms. And now it's time to talk about this kitchen. So we've got the two toned Caesar stone countertops. We've got cream and then the dark tone right here, keeping this prep area clean because of that dark color. Gas burner at the top, prep sink, under counter storage, bar area and then also breakfast nook. Up above us we've got three downlights acting as your spotlights when you are cooking in built appliances. More prep areas running the length of this kitchen space for a extra large fridge. And then you've got your back area, your pantry, should I say, or your scullery area. Got more of a continuation of that live rock. So much storage, under counter storage for appliances, double sink and then a door leading out onto the atrium as well as the back side of your house, which we're going to show you in a moment because we're going to be going down this passage. Going down the passage, the first thing you come to is your guest bathroom. This bathroom comes fully kitted with a shower as well as toilet, under counter storage and plenty of downlighting. Right next to your guest bathroom is a storage cupboard that acts perfectly as a linen closet and making your way down the passage you come to your first bedroom. This bedroom is amply endowed with space, high ceilings built in cupboards and then sliding glass windows that open out onto the back area. That atrium that houses quite a lot of indigenous plants beautifully, beautifully spruced up with a little bit of greenery making that home so much better. But now we look at the next bedroom. This one is even more special than the last but sliding doors that open up onto your garden ample space for beds of any size built in storage and again an en suite bathroom, single vanity, toilet, bath as well as glass enclosed shower really does make all the bedrooms in this home feel so much more special. And then that passage continues and leads you to your third bedroom which is this one right here. This is very very close to the one we just saw. We've got these sliding glass doors that look out onto your garden area, lets you really enjoy the greenery, lets you enjoy the beautiful weather that we're experiencing today. But in terms of features here it is a carbon copy of what we've just seen. We've got plenty of cupboard space, so much space acting as a bedroom. En suite bathroom with a shower as well as bath, gigantic mirror above the bath. Really increasing the size of what this bathroom feels like. Then toilet, single vanity and all the storage you could ever need. But now it is time for that creme de la creme, that master suite. Lets take a look at what a master suite right here in Kensington has to offer.  Maybe even another desk if you'd like to bring your office in here. So much space for any types of beds and then again you're looking out onto that beautiful garden. Then on this side of your master suite you've got all your cupboard space with a section right over here where you can sit down and get ready really nice dark wood and so much storage space reaching all the way up to the ceiling. We've also got an air con in this room and behind me is your master bathroom suite and it comes with some killer features. Lets take a look. And here we are in the master suite in the heart of Kensington and I love some of the design choices they've done within this master bathroom.   But another one right over here, this mirror really really making this bathroom feel twice maybe even three times the size it is. On my left hand side we've got a walk-in shower decked out in glass beautiful shower head and all mosaic pattern that matches the patterns here as well as the patterns we find in the pool. I really love the light and the air coming in here. Also I like that they've thrown in a heater on those cold winter days but that does wrap up this incredible home right here in Kensington. Let's talk about the price point and how you can become its next owner. Let's go. Guys we've had a come outside to now talk about how you can become this house's next owner. It is on sale for 4.5 million four bed, four bathroom, a six car garage and all of the incredible amenities in between. If you'd like to schedule a viewing of this house or setting an offer to purchase contact Bedford Brokerage. Their details are on screen right now as well as in the description of this video and don't waste any time. Then if you're looking for a house anywhere in between larger, smaller in a different area for more expensive or anywhere below this price point go on to privateproperty.co.ze as we list every single property in South Africa in one easy to find, easy to search and easy to contact place. If you'd like to see more from me you can see me on at MrVerveiros on Instagram and we'll see you again Monday and Friday at 8 p.m. as we tour some of the most incredible, exclusive, unbelievable and breathtaking homes around South Africa. Thank you so much and we'll see you soon. Goodbye.


Applying this meeting of the board to order. I'd like to confirm all members and anticipated officials are present. Members of the zoning board of appeals, Roger Dupont. Here. Good evening, Patrick Hanlon. Here. Good evening, Kevin Mills. Here. Good evening, Sean O'Rourke. Here. Good evening, Aaron Ford. Here. Good to see you. Thank you for being here. Steven Revillac. Good evening, Mr. Chair. Good to see you as well. I'm here on behalf of the town, Kelly Lenema, the assistant director of the Department of Planning and Community Development is helping us out this evening. Good to have you here. And we are joined this evening by town council, Doug Hine. Good to see you. Thank you for having me. You're welcome. And as we mentioned last time, so Paul Haverty, our normal consultant for 40B is unavailable this evening. And so I had asked Mr. Hine if he would sit in with us to help us as legal questions may arise as he is the counsel to the town and also therefore counsel to the zoning board of appeals. So this open meeting of the Arlington zoning board of appeals is being conducted remotely consistent with an act extending certain COVID-19 measures adopted during the state of emergency signed into law on June 16th, 2021. This act includes an extension until April 1st, 2022 of the remote meeting provisions of Governor Baker's March 12th, 2020 executive order suspending certain provisions of the open meeting law, which suspended the requirement to hold all meetings in a publicly accessible physical location for their all members of public bodies are allowed to continue to participate remotely. Public bodies may meet remotely so long as reasonable public access is afforded so the public can follow along with the deliberations of the meeting. For this meeting, the Arlington zoning board of appeals has convened a video webinar via the Zoom webinar application with online and telephone access as listed on the agenda posted to the town's website identifying how the public may join. This meeting is being recorded and is being broadcast by ACMI. All supporting materials that have been provided members of this body are available on the town's website unless otherwise noted and the public is encouraged to follow along using the posted agenda. So with all of that, there are no other administrative items on our agenda this evening, which brings us to agenda item number two, Thorndyke Place, the term to the comprehensive permit for Thorndyke Place. At its October 20th, 2021 public hearing, the board voted unanimously to close the public hearing for Thorndyke Place. This marked the end of the acceptance of testimony and new information in regards to the project. It also initiated a 40 day period for the board to consider and render a decision. On October 28th, 2021, the board initiated its deliberations. They were continued on November 3rd, 11th and 16th and we continue them again this evening. Tonight's discussions and deliberations are being held openly and publicly but the board is unable to accept comment from the applicant, the board's peer review consultants, the town or the public. For this reason, tonight's meeting is being conducted using the webinar platform, which allows the board to limit who may participate in the discussion. Now, on behalf of the board, I appreciate everyone's understanding. The board will resume its discussion using the draft decision available on tonight's agenda. It can be differentiated by the text in the footer noting in 11, 16, 21 revision date. And the board will briefly review the revisions proposed at the previous meeting then resume the discussion with the findings, discussing proposed provisions and a few proposed substitutions. And then at the end of tonight's meeting, the board may either vote on the final decision or vote to continue the meeting to continue its deliberations. Under state regulation, the board must issue a decision by November 30th or request an extension from the applicant to further continuous deliberations. Okay, so I will, as I've done in the past, well, Kelly, if you could give me a version to share my screen. Here you go. Perfect, thank you. So this is the draft that's been posted. It has some additional comments and notes I've been making on my own behalf during the day. So there will be things in here that are not in the other version, but we will be discussing them as we go through. So yesterday we had gone through and completed all of the conditions and the waivers. And I just wanted to briefly go back through to see if there are any questions on the conditions in related to comments that Mr. Hanlon brought forward in regards to the findings. There was one finding that sort of made a work that there was a question whether we should adopt an additional condition. And so I have penciled something in here, which we can come back to when we will view that portion of the findings. Otherwise, I believe at the beginning of the last meeting we had gone through and sort of cleared out everything. The only other question I had on the conditions and it's really just a Scribner kind of question is we do have voids in the numbering which we had left so that we could, our referencing to numbers continued throughout the review but now that we're done primarily with the conditions, does anyone object to taking out the numbers that we're not using and just re-sequencing the numbers? No, perfect. There's no objection. Oops, I don't know how. Mr. Chairman. Mr. Hanlon. Just at some point, I think not, clearly not tonight but once we do that, there may be cross-references that will be affected and that's a more extensive procedure to find those and to get them corrected. Okay. Yeah, I think the first number I believe is I-24. So it's really just the last portion. On that cross-referencing, it might be easiest to just do a control F which is a find and you can do a find I-40 before you delete them. So that might help. So it's a very good recommendation. Thank you. Conditions and then the waivers. And there was a question that had come up in regard to last time to the adjusting the hours and days of construction that we would need to include a waiver for that and so it was something we should look into but in reviewing it, it appears that we had already put that into the meeting prior. So that is a waiver 32. Which allows to change it as it's condition. Are there any questions then in relation to the conditions or the waivers? Being none, back to the top. We had last time looked at the procedural history and we had looked at the jurisdictional findings when we left off at the factual findings. I don't see, just to sorry to briefly just jump back to the jurisdictional findings. I don't know if 16A, we were looking for an infill date here for the DHCD subsidized housing inventory. So we have copies of the inventory from May and November of that year. But I don't have one any closer than May to the filing date of the application, which was August and so that's, so I think May 13 is probably the most appropriate date to apply there. And then to the factual findings, we looked at the first few and then we got to number 21 and Mr. Hanlon had put together a very nice substitute for 21, which really sort of laid out a formatting for how to address all the findings going forward. And so we adopted that and then what I had done was try to take all the findings and stick them into these categories. Some of them sort of fit more successfully than others. And as we go through, we'll also note that there was a large scale substitution for transportation and one that came out more recently both for stormwater and wetlands, but also for climate change, which I'm gonna propose that we call climate change and resiliency, just because I think it gives a little more sense as to what we're trying to accomplish with it. So this is essentially the text that Mr. Hanlon had provided and was provided as a part of the agenda last time. Actually, let me go ahead and make this bigger so we can actually read it. I was gonna propose under C that we did call climate change and resiliency. And in G, I wanted to change it slightly. So the town has a strong policy in favor of keeping the subject property or as much of it as possible as open space as well as ensuring that it's managed appropriately. So just changing the word into as. Any other questions on 21 or what we would like to do with 21? Seeing none. So that gets us into the first of these new topics, the need for affordable housing. And I believe that Mr. Revlak had provided text for this, is that correct? That is correct. And that was posted to the agenda last time. I don't know if you'd like to take us through this. Okay, so two of the, I'll skip over the first item 22. Items 23 and 24 were existing findings that I'd just taken perhaps, I think I reworded 22 a little bit and put them under the heading of affordable housing. As far as 22, 22, the main thrust is just kind of framing the current state of, or the number of affordable units and Arlington and framing it as an area of local concern. And just talking about some of the measures that the town has done like adopting a housing production plan having it approved by the state. And just a little bit of, just an outline of what we had in terms of affordable units and eligible households in 2016 when our current housing production plan was adopted. So I believe, yeah, I believe those are the three sections. Thank you. I had just, there were a couple of two quick typos I think we're missing just missing a verb and this one sentence just capitalizing to be in board 23 and then there was just a script note at the end here regards to I think where it was originally coming from. So these are the paragraphs in the findings in regards to affordability, the need for affordable housing. Are there any questions or are there any additional findings which we would like to include? Looks good. And Mr. Chair, didn't we go through this language last meeting? Don't recall how, where we exactly ended up last time. I know it was definitely submitted in time for last week but I don't know if we specifically went through it. I think we did, Mr. Chair and Mr. Hanlon probably remembers. We had, we, I think we went over this. We did a little bit of the wordsmithing on 22. Oh, okay. Mr. Chairman, I think that we got all the way to flooding in wetlands, although I think it's useful to see it all set out and to look at over the way we just did, but I think that flooding in wetlands is about where we are now. Okay. So flooding in wetlands, so I had gone through and the version that I had posted, I had taken all the paragraphs that I had found and tried to stick them under flooding in wetlands. The ones that seemed appropriate that I put under flooding in wetlands. And then I went back when Mr. Hanlon issued his version of flooding in wetlands, I went through and I basically went through this list here and sort of crossed off things I could find, specifically in his to make sure we weren't missing anything particular. So I will go back and cover those but essentially everything that we originally had, I had originally identified with the exception of 21 is in his. So I will go ahead, I will stop sharing on this one and switch to the other one. Stop the share on that one, pick up this one. So I was going through this today and so there are some additional comments on here from me. So Mr. Hanlon, I don't know if you want to present this or should I keep going? Well, let me just quickly say that there's something peculiar about the way in which spell check works that it didn't notice that flooding has a few O's in there. I thought that that was the Scandinavian version. Yeah, it'll be three O's. It did seem Danish or something like that, yeah. So believe me Hanlon, you had two versions of the first paragraph depending on whether or not the letters in reference had been included in the record. And so I did go back and confirm that yes, these letters are in the record. Okay. So the first letter was from actually Nova Armstrong Associates to the town council dated August 10th and then the second was dated August 15th from the conservation commission to the select board. Okay, that sounds fine to me. And this note here was just to check those citations to work it there. And so because A works, we can scrap B. Mr. Chairman. Yes, sir. That's, this is all fine with me. I'm just wondering and maybe Mr. Han can help explain to this, I think we say early on that the filing date for this was September 2016. And obviously there was things going on before that was officially filed. And what I'm wondering is whether these 2015 letters are actually properly in the record in this case or whether they're preliminary correspondence that might have related to the appeal for a finding letter from mass housing and that sort of thing. So I can actually address that slightly before you with Mr. Han. So we have received comment from Mr. Rarick on behalf of the Arlington Land Trust. We have received a letter back in March, I believe. And then the letter was reissued for later in the year. And I had asked him, and he specifically referenced these documents. And I had asked him for copies of those documents at that time. And so those were officially added to the record and you can find them on the ZBA website. Okay, that's all that's my concern. That's fine. Okay, perfect. Mr. Chair, do you want me to add anything or you're all set? If there's anything you think we need to add to that? How far back does the record go? So the original application I believe is from August of 2016. I believe that at different points in time you incorporated a variety of things including the mass housing project eligibility letter which is dated December of 2015. Some of the studies that were relied upon for various different purposes which stretch all the way back to 2014. But as long as they were incorporated into the application directly or later into the record by the ZBA, they're all a part of your record for consideration. Okay. So Mr. Chairman, I think maybe the helpful thing is I can at least indicate to people what in general I did and then maybe we can just go through and see how the wording works. And what I attempt to, what I actually did was copy out the existing draft that had to do with this general subject and looked further on at later provisions that seemed to me to also relate to this subject and then to try to get them all to come together in an orderly way. And so that more or less starts with introducing the general subject of flooding and the importance of that as a local concern. It turns to the final summation that we have from both the applicant and beta about the underlying circumstances on flooding that it was intended to and I think does summarize what occurred during the record after that period of time. At that point, and this goes in then in what my version would be number 19 to mention other aspects of wetlands and to turn to much of the regulatory structure that we talked about with the Conservation Commission. And I attempted to bring in the various aspects of the way in which the applicant addressed the concerns relating to the application and their compliance with the wetlands bylaw and regulations which brings us ultimately down to 24 and 25 which were conditions that were originally proposed much later on by the Conservation Commission but which related to the subject of how you deal with the remediation that is taking place in order to meet the wetlands bylaw. Originally, you may remember that those were at the beginning of something that we incorporated into conditions relating to a mitigation plan for plantings and so forth. And so those provisions are intended to provide the basis in the findings for what we did in the conditions. At that point, I turned to climate change and in contrast to the way in which I did it before where I went to directly to the net zero issue I spent more time on resilience and response and went back into the objections that were made by Samson and Weston and the concerns they had that notwithstanding that adopting the NOAA 14 plus may make this up to date it isn't up to the future and the future is fast approaching. And so I went through that correspondence which also led to a consideration of the way and the reasons for raising the building up and how that all came about. That ultimately goes through 32 and then in starting with 33 I outlined in slightly more detail than I had before but not a whole lot, the rationale for the condition that had to do with building electrification. I thought that, I mean, in light of all of the other things and just sort of part of what's going on in my mind in the other 40B, they originally proposed to do all electric and nobody said a word about it even though it's an important part of the town's policy no one said a word about it until much later when they decided that they preferred not to do that. And it seems to me that when people are voluntarily because we're not in a position until we have a home rule amendment and in a 40B not even then when they actually do align with town policy on this that we ought to call it out. And my objective here is to make sure that when other people read the sorts of things that we're thinking about they don't think that because we're silent we're passing over such an important movement that the town is engaged in. So that is the reason for squeezing that in there. Now, hopefully I have succeeded in not leaving anything out. I wasn't intending to leave anything out although there are some provisions that I boiled down a bit to avoid going into sometimes confusing detail when we didn't need to but we can get into that if there's anyone who has questions about the language that I tried to put together. Mostly it was a matter of weaving stuff together and making a quilt rather than starting with anything very fresh. Mr. Chairman. Mr. Dupont. Just a thought. Mr. Dupont, you're back on mute. Just paragraph 33 if you wouldn't mind going back to that. So I believe I understand what net zero policy refers to but I'm wondering if people reading this for the first time might find it helpful to have some reference to the control or the elimination of greenhouse gas emissions. So where it says the town adopted a net zero action plan maybe in parentheses, something just to reduce or eliminate greenhouse gas emissions just so people know what that actually refers to. And it may be somewhere else. I didn't go searching for it but I don't think it hurts to have it in there. So maybe to, okay, that I would include green, I would say I think that maybe greenhouse gas emissions would be more appropriate. It's only partly true that greenhouse gases are all a matter of carbon. They mostly are. Thank you. Mr. Chairman. Yes, sir. In that same section, the word onsite is that one word or two? On the last line of 33, eliminating onsite fuel. The word, and then that's Microsoft word thinks it's a word. You can hyphenate it. I've also found that's not, you know, a final aperture of good English. No, we can hyphenate it. Maybe any of you is fine. All right, so just to, so we had talked about 16. So this is your handle. So in through 17, it's more about Western and Samson. In 18, the last sentence was just changing that the board has also asked its peer consultant. I would just say the board asked its peer consultant to review the inclusions. And this is, that's a comment. It says, this section here summarizes that Don Hitchens memorandum that Mr. Hanlon had asked him to prepare. So in A, about the flooding currently, basically about localized flooding, which is the street flooding after rains. So I had just wanted to change. So it was, there is some question whether the municipal storm drain has adequate capacity. And that was, it was specifically raised by the applicant as to whether that was an issue. And so I wanted to put that in and so to add that, sort of change the sentence to, there was a question raised by the applicant as to whether the 12-inch municipal storm drain has adequate capacity. Is there any objection to that change? Mr. Chairman. Yes, sir. I don't object to it, but I would like to look and see what beta said to see whether or not that's something that was just raised by the applicant, which is kind of this implies or whether it, or whether beta specifically endorsed it. I don't remember. Okay. And Mr. Chair, I recall beta deferring that claim to the town engineer. Yeah, because I remember we had that's, I remember that the town did not necessarily take well to this suggestion or this implication. So I'm not, but I don't recall specifically what beta's response was. Mr. Chairman, I do have a recollection that they did not challenge it. And there was a separate issue relating to stormwater here. If you'll remember about whether or not they were combined sewer and stormwater that as apparently Cambridge has in summer ago, but we do not. And somebody had raised that. One of the public commenters had raised that, had been told that we did have those things and the town engineer intervened to say subsequently that we didn't. I don't recall the town engineer addressing this particular issue. I don't recall either one way or the other. I can look at the record. But then even the only point that I would like to make is if beta actually endorsed it and I'd like to say that and there's a good reason for it. And that is, is that if in fact this is true or even if it might be true, we've been living with the neighbors here for a pretty long time. And, you know, if there's a question of the capacity of the stormwater sewer and that that is causing the daily problem that has led to the frustration and agony that they've expressed over and over that everybody ought to be talking about that. Absolutely. So subsection B, it's about stream flooding which is related to flow from the Y-brook. And so the NAVD's 88 is included everywhere in the document but there were some numbers from Cambridge and I can't recall, Mr. Hanley, did you remove the references to the Cambridge Datum? I did, yes, I removed the specific references to the data and you'll see when we get to that paragraph though there's a reference to the Cambridge material supporting the conclusion that had already been made earlier. And it turns out that once you change the Cambridge data into the NAVD data, it turns out to be essentially the same point that the applicant was making without doing that. And so it was just, it was just duplicative and confusing because dealing with different measuring systems for height is even one set is a little bit confusing. Two sets at the same time is more than we need to inflict on the public. Okay, so we'll leave that then we don't need to say unless otherwise there is nothing else. NAVD has agreed to require the two to one compensatory storage by meeting this as just referred to as a more stringent standard. The proposed project will not contribute to increased flooding in C. Third essential source is groundwater flooding. And I just wanted to add or infiltration from water flowing underground just to add a little bit of explanation as to what we're talking about there. Otherwise all the rest of that seems fine. D is about flooding. And this was this question about data or additional precautions may need to be taken to protect the proposed project itself from groundwater flooding depending on the pattern of additional data. And so I have a proposed condition D32 to address that. E with stormwater management systems designed to meet or exceed mass stormwater standards. And then this brings in the NO 14 plus and then F again, this is the opportunity for the town to clear existing easement of vegetation and increase the capacity of municipal systems to minimize likely of local.