This meeting of the Monpelier Development Review Board to order, it is Monday, December 3rd, 2018. And the first item of the agenda is, should be, should be the board voting in and acting vice chair. I'll make a motion that Kevin O'Connell serve as acting vice chair for the purposes of tonight's meeting. I'll second that. Any discussion? All those in favor of the motion please raise your right hand. And there's Claire. So the motion has been voted in the affirmative. Welcome Claire. So the members from right, from right to left. Rob Goodwin. Meredith Crandall staff. Kevin O'Connell. Brian Kane. Tom Kester. Claire Rock. Comments from the chair. I just wanted for the record. We are in open session right now, but we will be closing the meeting shortly and going into a continued deliberative session about the parking project on State Street. Now we have the minutes for November 19th, which need to be approved and those that are at that meeting and are here this evening are myself, Deb, Thomas, Brian, and Robert. So we've got a- Claire. Oh, Claire as well. Sorry, Claire. Do I hear a motion or is there any discussion about the minutes as they're presented here? I think maybe a revision, I don't know, was kind of a finding that we told them we did not need to- he did not need to survey the larger parcel. That was a request from the public works or a comment. That was the thing that was decided, so maybe we could add that. Yeah. That's the national life application. Anything further? Do we accept the minutes with the change as indicated? Second. We have a motion and a second. Is there any further discussion? Hearing none, all those in favor, please raise your right hand. And the minutes are approved. Just to mention, the next regular meeting will be two weeks from today on Monday, December 17th, 2018. Same time, same place. And I believe, is there any further business than any of the board has to have, Meredith? Sorry, just my- unless somebody else has something else to add? Okay. So we have a kind of an odd situation where we have closed the hearings for the 100 State Street applications, all three of them. And as we discussed briefly during the last hearing when it was raised by the public, there had been some other submissions to my office after that close of the hearing that couldn't be submitted as evidence because the hearing had been closed. We have since had another that was more of an add on to the petition that was provided during the last open public hearing for those applications. So the board at this point I think needs to just maybe acknowledge that that was submitted to the office, but decide whether or not it's going to make a determination that it is not available as evidence. If it wants it to be available as evidence, we would need to actually open the public hearing. But I think just having that on the record and also for the public to know at this point anybody who actually reads the minutes or looks at the video that they need to just stop submitting evidence. I think that we would all like to acknowledge the efforts that people in the community have put into this and their thoughts and their feelings and so on. My own thinking, and I'm just speaking for myself, is that while I would want to do that and I want to acknowledge those concerns, we have to be attentive to the process itself. And the process is that this was evidence that was submitted after the close of the public process and we can't enter it as evidence. That's my thinking. And that's the input I've received from city attorneys. Well, let's hear what the board has to say about that. Any other comments or concerns? We've heard a lot of, you know, I really appreciated hearing from the public. Yes. And hearing their perspective. And I do feel like we have taken a lot of testimony and evidence from the public. And so I don't think it's necessary to reopen the hearing at this time. I think that's the only way we could take additional evidence is by reopening the hearing. And that we have an obligation as a board to come to decision and there are other opportunities for the public to continue to express their concerns or interests. I mean, I would add to that that it's a project of this magnitude of any magnitude just can't be the best that it can be. Unless we do have a vibrant exchange of ideas and ideas that are presented from the public, after all, we are the public. I mean, we're serving here as appointees by the council, but I mean, we're all from this community. We all have a huge stake in what happens here. So I totally agree with what you have said, Deb, and would agree. Does the board feel likewise, Claire? Yeah, I just had, I guess it's a question of process. If, and this is all hypothetically speaking, if information was provided to you, which you felt would have an impact on our findings, because new information was submitted that would actually alter whether it was in conformance or not with the zoning regulation, would you as staff kind of say, this is what I've got and my recommendation is that you reconsider this or reopen?  I don't think that would work. I'm not, well, but it would be something I would then submit through for us to make a decision. For you to make a decision based on their motion. You know what I mean? Right. It's not, I wouldn't, I wouldn't then come to you and say, hey, you need to reopen the hearing. It would be you making the decision based on their, I think that's the way we would do it. I would confer with the city attorney, and I haven't seen anything like that. This most recent thing was the same, basically the same petition that we received during the last public hearing, which honestly right now. But it doesn't matter. Yeah. But wait, that's what I'm saying. At this point it doesn't matter, but I haven't seen anything that would be a game changer. I would have to, I would have to. That should be a holder narrative. I think that we have to be careful about that. And I have, yeah. Anyway, at this point it's the close of the hearing. But the bottom line, the bottom line is that it was submitted after the close of the public hearing. And it was submitted after the close of the public hearing, and if the board has all the information they have to make the decision, it feels that they do. You know, if you guys have questions that are unanswered, we can reopen it. I will just also note that we were very expressive the October 15th hearing that we gave the applicant a specific deadline. I think it was the following Friday where we said, we want to make sure you submit everything that you have to us by that date. And they, they more or less complied with that. And then we had the hearing later. There was ample opportunity for the public to put forward evidence during the public hearing. And I think it would be very unfair to the applicant to reopen this for the submission of something well after the close of the hearing when there was that opportunity to participate earlier. And when we specifically said that we wanted everything in obviously in advance of that November 5th hearing. I think that I would expand on that and just say that it would be unfair to anybody who has already submitted evidence. Absolutely. And that includes the public, the applicant, city staff, and so on. Yeah, thank you. Thank you. Okay, so the determination is, is that we are going to move on. That is not evidence that we're going to use as part of our deliberations. Is there anything further before we close this hearing and move into deliberative session to continue our discussion on the garage project? I'll make a motion that we adjourn the public hearing and move into deliberative session on the applications, the three application for 100 State Street. Second that. Any further discussion? No, in case they're a member of the public watching that all the our discussion will be reflected in the decision. So there'll be real transparency. The decision will talk about the facts as we as we have determined them and and then our rationale for for our decisions. Okay, anything further? All those in favor of the motion, please raise your right hand. So we have closed the public hearing and we will now move into deliberative session. Thank you.


Okay. All right. Welcome back. We're starting to thin out, which isn't great. So I guess people aren't really using the discord because I posted a question as a follow-up to the last lecture, and I got one reaction and no one responded to me, which is kind of sad. So yesterday, we talked about transforming one process into another to execute a different program, and that's the only way to execute a different program, which doesn't really make sense at this point, because we don't even know how to create new processes. So today, we'll be talking about how to actually create new processes and why it's like what it is, and we're going to start getting into the nitty gritty. So we'll have a lot of code examples today that we can play with, so feel free to ask questions about that, because so far everyone's just written a program and then started at main and start executing. Well, as of today, that fairy tale has now ended. So today is going to be, might hurt your brains a little bit, but hopefully we'll get through it. So first question is like, well, why did I kind of like split off having to execute in a different step? If I'm creating a new process anyway, shouldn't I just create it all in one step, create a new process, tell it what executable to run? You could do that. That's one kind of kernel design you could make, and that's exactly what Windows does. So Windows just has one system called to create a new process and load something like LS and then execute that, and then it's all done. But Unix decomposes that process into two parts just to make it super flexible and we'll see why that flexibility has a benefit and it also has a nice implementation benefit. So in Unix land, instead of creating a new process and then telling it what program to run, you just clone the currently running process exactly as it is. So the mechanics of this is whatever process is running, say hello world, LS, something like that, your kernel will pause the current running process and copy it completely. So copy all the information in the process control block like exactly where it's executing, all the variables, files that has open, so on and so forth, and then it reuses all that information and we'll start executing now two processes that are running the same code. And the only way to distinguish between them at that point, since they're exact clones of each other is something called this parent-child relationship. So one creates another. So you can distinguish who created who and then that's the only way you can actually distinguish between the two processes and we'll see that again and again today. Then if you have two processes running, it's up to the kernel to decide which to run. So they could be executing at different parts of the code and you have no idea. And we'll see examples of that today. So don't worry just yet if this is kind of confusing. So if you look at, because everything has this parent-child relationship, you'll see it will form a tree of what process spawned another process. So if you go ahead and type something like, if you look at all the processes running on your virtual machine or macOS and you actually follow all the relationships, it'll follow a tree, something like this. So in Firefox, right, so we see Firefox that gets executed from something called a GNOME shell, which is like your whole desktop shell. So that would create Firefox and then within Firefox, every tab is a different process. So it would have to clone itself a bunch of times and then start executing that tab stuff. So this is just kind of how your process tree looks. You'd have your terminal emulator here, which would run your shell, which would run some command and htop is the command. It's a bit nicer than top to go ahead and see all your running processes. So you can see that if we run htop, right, you'll get something like this that will show a tree. And then the only thing that really matters here is every process just has a unique process ID. So this column all the way on the left. And that's how you identify different processes. So that's just for reference there. You'll notice that we had that kind of process life cycle before that said, you know, when things are ready, running, blocked and so on. So as part of that htop output, it will tell you the current state of the process, but the Linux terminology annoyingly is a bit different. So instead of saying something is in either running or in the ready state or waiting, it just links just lump them together and puts them in a running or a runnable state. And you don't know if it's actually executing or if it's just ready to execute. And then if you see S, it will be in interruptible sleep, which is just a category of block. So the kernel could wake it up if it wanted to. And then in interruptible sleep, which is again blocked, but the kernel won't be able to wake it up because it's waiting for a file or something like that. And then there's these two states that we can ignore for now.  So it's another way just to stop processes from running altogether. So you'll notice at the beginning because we have this parent-child relationship, there must be something that starts off, some ultimate parent process that starts our machine. And on Linux, right, or Unix, the boot process is pretty simple. As soon as the kernel boots up to start all of user mode, all the kernel does is load, is create a single process and then load whatever is called init in there. So it'll just look up a hard-coded path called sbin init. And then that's all the kernel does. So as soon as the kernel's booted up your machine and it's initialized and everything, it creates one single process and then that process executes whatever is in sbin init and then it's responsible for launching everything else on your machine. So everything is rooted there.  So when you exit out of the initial process, your kernel just crashes because, well, it just stops because that's the only program that's running. So as soon as the init stops, your computer stops. So on Linux, init's something called system D. There's other old styles of init systems. Soon we'll see what actually goes into what the responsibilities of init is aside from creating a bunch of different processes and we'll see that next lecture. And then some operating systems, you know, create an idle process to just keep track that just runs at the lowest priority, just so you can see it in kind of the process manager, Linux does not do that. Okay, and before we get into this, kind of the reason why our hello world even worked is because of something called the standard file descriptors. So like the first argument of a program, these are just kind of a standard convention that everyone uses and why hello world worked. So anything that executes from the command line has these standard file descriptors. So zero is always standard in, which is the standard input. One is always standard out and two is always standard error. So when I did that right system call, I use number one because that is standard output and that will show on your terminal, right?  You have to do something more important. You have to translate the key presses into bytes that go to standard in. So that's part of the terminal emulators job. And then you also have to display bytes that come in from standard out or standard error. So you can actually see the characters on your screen. And what we'll see later is you can kind of, you may redirect file descriptors between processes. This is kind of like the nice Unixy thing where instead of one just going to the terminal, I could instead have one be a file and then whenever you execute your file, all the output just goes to the file and you don't have to write any like file handler code. Any of the, right, we've opened files before and like written to them. Well, if you just have everything that goes to standard output, you can just direct it to the file through your shell and you don't have to write any additional code whatsoever. So there's this whole kind of PROC subsystem in Linux. So there's a special directory called PROC and in there you can look up all information associated with the process. So this is the way the kernel exposes information to you. So we'll kind of use it to kind of explore things and see how things tick. So in there there's like an FD directory that will tell you what all the file descriptors are and if you execute on your terminal emulator you might get something like that. So let's go ahead and try that. So on here I can just LS PROC. So self refers to this own itself. So it would be the shell and I can see all the file descriptors here. So my shell actually has a lot of file descriptors open and they seem to be dealing with Chrome. But you can see the standard ones are all this weird pseudo terminal that we don't have to worry about yet. But you can go ahead and play around in the PROC file system if you really want. And then as part of that too, you can actually see what programs have what files open. So it's a nice kind of debugging thing. So you can use this command called LS of to see what processes have certain files open. So for example, you can go ahead and try using LS of on the C standard library and you can see every single process on your machine that's using the C standard library which spoiler alert is pretty much every single process. All right, so little aside for kind of programming and this course I guess you'll probably have to heavily use man pages. So you just use the command man and then whatever the function is but there's a little caveat here in that sometimes it doesn't give you exactly what you want. So we saw exact VE last lecture today we'll see a command called fork which you can have a lot of fun with that term and then we'll see weight in the next lecture. But if you look at the, so we'll be using fork today and if you go ahead and do a man fork you get something really weird. You get this AUK extension module which doesn't look like a C API at all and it gives you this weird load fork and it doesn't give you any information about any C APIs. So if you want to look up information you actually have to use the number. So you have to do man to fork and then that will give you the actual documentation you want. So create a child process and that tells you what header file to use, what the signature is and then the description. But don't worry, we'll be using it and kind of breaking stuff. So we're gonna look at fork and it is the only way to create a new process and like I said before it copies the currently running one so it's ABI or API is pretty simple but also not simple. So all it does is it takes no arguments and just returns a value and it returns a process ID type which is just a number and then because it's a C API you can see kind of what values to expect.  And then the only way to distinguish between so fork makes a copy of the two processes and then the only way to distinguish them is the value returned by fork. So in the child process it will return zero and in the parent process it will return a value greater than zero so it will turn some ID number and that ID is the ID of the new process that was just created so it's a clone which is a clone of yourself. So after that there's two processes running and the only way to distinguish between them is that value. They have the same variables they have the same everything but after that point of the fork because each process is isolated changes won't affect the other one and we'll kind of see that. And why it does that is because copying a process is actually much cheaper than creating a new one from scratch and if you want you can create two processes and then have them each do like half the work or something and then suddenly your kernel can actually if you have more than one CPU your kernel could run them in parallel and remember we had parallel versus concurrency yesterday. Yeah. So the parent process is the one that initially called fork that's running. So one process will be running and then call fork and then it will create a new process that's a copy of it. So the parent is who originally called fork and after it calls fork it will keep on executing and then there'll be a new copy of it that will also be executing. Yeah. But then there's gonna be two processes running. Right. Okay. Let's just see the example. All right. So here's our example. Also was there a question in the back first? Yeah. So copy on right is something we'll see later but for now it's like an optimization and we'll see why that optimization is good. Yeah. So PID underscore T is it you can think of it as just being an in so it's just a number. It's just, you know they called it something different in case they want to change it or grow it later but you can think of it as just an in. All right. So this is good and this is going to be weird. So, right. Let's start off with what we know. Execution starts at main and then the first thing we do is call fork. So at this point after the fork there's actually going to be two running processes that are at this exact point in the code. So now there's at this point two processes, right and they're both executing and we don't have control over which one executes that's all up to the kernel at this point but one is going to have a PID greater than zero which is the original process and then the other one will have a PID equal to zero which is the new one, right or you could call them parent child. Oops. So if I run this, right I have to consider two processes running after the fork. So the original process where the PID is greater than zero it will go into this if statement and execute so it should print off parent returned whatever the return value was which will be something greater than zero and then it will print off its process ID and this is just a function that is a system call that gets your process ID and then it will also print off its parent's parent ID. So whatever created this process so that's where the extra P is from. I have a sleep there just because reasons that you will explore in the next lecture but then, and then so our original process it will go into this if statement one more second, okay the original process go into this if statement and then exit it, right because it won't fall into else if or else and then it will return zero and then our original process will die. Yeah, so we'll see. So in it's like the grand-grandparent but we'll see if this one is started by a net or what's this started. Okay and then before I execute this again so now our parent process should just print off the three lines there and then call exit and now we have to consider the other running process which is the child which will have a process ID of zero. So in here it would go ahead it would try and execute this if statement it wouldn't succeed because process ID is zero it's not greater than zero it would fall into this it would fall into this else if statement and then print information about itself so the child return process ID this would have to be zero and then we just print off its process ID and then its parent's process ID which hopefully if I haven't lied to you is the same ID as the parent. So let's go ahead and start the brain busting. So if I do run that, oh that's perfect output. Okay, so it's a bit weird the output's a bit weird because it's not in order, right because after the fork we have two processes running and the great thing about this which is the complication of this entire course is you don't know what's gonna execute after that, right? There's two processes and the kernel gets to decide what runs. So the order of these print statements will not be the same within a single process they'll be the same so you'll always get child return, child PID the child parent PID for the child running and the parent you'll always get in the same order but between the two processes you have no idea what the order is gonna be you are completely, the kernel figures that out, right what to run at what time. So if we look at this we get the parent return PID to 2,987 and then we can see that the child's process ID is exactly that number. So that makes sense, right? And then the child's parent process ID so whoever created it its number is 2,983 which is the parent's PID. So that makes sense and then there was your question of what is the parent's parent ID? So it's not one in this case it is 1,477 and if we wanna figure out what that is we can go into that PROC file system, right? So we can go ahead and look at so PROC and then process ID number so we know that process ID and then we can go ahead and read the status and if you look at those files it's just a bunch of columns but I know there's one called name and you can see its name is ZSH which is my shell. My shell created so my shell is my parent so that kind of hopefully solves a mystery from the last lecture so your shell which is bashed for some of you ZHC for me would have cloned itself to create another copy of itself and then it would have done that exec vehicle to become whatever the command is you typed. So it would do a fork followed by an exec and that's the common combination of how to create a new process and initialize it and start it running something from scratch. Okay, any questions? Yep, nope. Yeah, in fact you should pretty much always get this input which is the nice annoying thing about this is these concurrency issues, right? Because you don't know what can run they're very hard to debug because I guarantee if I run this probably 99 times out of 100 I'll get the same output as this, right? Running, running, running but the first time I ran it I got one of the child messages first. So these are the types of bugs that can exist for like seven years if the order actually matters on the behavior being correct. All right, any questions about this? There's two processes running here. Yeah. Yeah, so the question are these two processes running in parallel and the answer to that is it depends on the kernel. So if your kernel is well-written, right? They'll be running in parallel because I have multiple cores on this machine and I want parallels faster than concurrency, right? The more parallelism I have the better. So it will try its best to run them in parallel but you as a user you have no idea you have no control because it's all up to the scheduler, right? The kernel decides what runs and when. Yeah. No, so every time it calls the fork right after the fork it's if it doesn't have an error which you, if you see an error something really bad's happened so we can for now assume errors don't happen. After the fork there's two processes and the only way to distinguish them is the value of that is the return value. So yeah, so one will be zero otherwise it'll be executing the exact same stuff, right? If you couldn't distinguish between them then you can't do anything different you'd just be running the same thing, yep. Oh, the shell running. So this is the only way to create new processes, right? And execve is the only way to load a new process. So if I wanted to how the shell basically works is so your shell could execute this fork call and then in here say this is your normal shell it's still executing and then this would be a copy of the shell and then it could do an exact call here and then transform that clone process into a new one and start executing for example LS. So that's exactly what your shell does and we might have a lab involving that plus everyone loves answering or asking these questions and not bring system courses. Yep, yeah like I could, we could take our example and do an execve call here if we want, right? There's two running processes I can do whatever I want with it. Yep, the parent, so these ones? Yeah, so the return PID is just the result whatever got returned from the fork call and the PID is the result of this get PID called which is its own PID. So it's what was returned from fork versus what my parent ID is. So fork never returns your own parent ID if you are the original process the return value is the PID of the child, right? So that's why the parent returned ID is, you know, will always be equal to the child's process ID here. All right, let's do a little bit more mind-bending stuff. In X equals, so if I am telling the truth and it's the exact copy of it, then in here I can go ahead print f X is, let's say, and let's distinguish between them. So parent X is that and then in here I will do child X is that. So if they're exact copies they should both have a variable called X should be equal to one, right? So they both have a variable called X is equal to one. Okay, that makes sense. And then also if I go ahead and change it in one if they're completely isolated and their exact copies of each other down to all the memory bytes one shouldn't affect the other. So say in the parent I'll just change X equals to two. So if I do that I get in the parent I get X is two and in the child it's still one because it doesn't affect it. Then you may be like, oh, well what if it wrote to that before the child print so the child saw the old value or something. Well, I'll make sure that that happens here. I'll even sleep the child for a second. So it creates a new process. The parent changes the variable and then the child assumes it gets created. It will wait a second to make sure that the parent definitely writes to that variable first. So if I do that it's the same thing and I see my output way later. So in the parent X is two and the child X is one. So they're complete copies and they're complete independent copies and we'll discover kind of the magic behind this later. Yep, I like that question. All right, can I print the address of both of them? So if they're exactly the same that should mean their addresses are exactly the same, right? So you want me to print them off before fork or after fork? So right before you want me to print it off here? Okay, parent would start address of X. So that compiles. So I have the address of X is blah, blah, blah. That doesn't help because I haven't done a child. So I'll show it in the child. So let's see if both of the addresses are the same. So if we look at this, let's make it bigger. So in the parent, the address of X is blah, blah, blah, blah, E4 in the child, the address is blah, blah, blah, blah, E4, they're exactly the same. So when I say they're exact clones of each other, they're exact clones of each other. Yeah, so if you declare X after the fork then it wouldn't copy it, right? Because you created it after the fork. So if I create Y here, after the fork, there's two new processes. The parent wouldn't go into this loop and it wouldn't create Y after this. Yeah, so if I do that, it'll kind of behave the same except after the fork, they're both clones of each other. So they both already have X. Then they would both, whenever they actually execute the next line, they would both create a Y. So they would look the same, but they wouldn't be a copy. But they would do the same thing. That one would, you know, they would get, they would probably get the same address. If it was something more exotic than just being like a variable on a stack, they might get different addresses, but they would get the same address. Yeah. Oh, sleep is just to put a process to sleep, say don't execute me for like a second. So that's just a way to make one execute before the other.  So you don't need your CPU wasting power the entire time doing nothing. As soon as you draw that frame, you can go back to sleep and you can relinquish the CPU. Yeah. They have the same address, but it's not changing. When you change it to parent, you make the x2, but in child, the x is the same x as in parent. Yeah. It's still one. Because they're, so as soon as we do the fork, they're exact copies of each other and then they execute independently. So if you're the operating system, you have to make sure that they execute independently. So if that address was like a physical address on the machine, that would make no sense, right? Because I'm changing it and then reading it later and it's the old value. So these are all virtual addresses. And when we see virtual, we'll see how this illusion happens because they look exactly the same down to the addresses. And the only way for that to be possible is if you had virtual memory. Yeah. Yeah. So as part of the clone, remember the operating system? We haven't got into it yet, but it has to map where a virtual address is in physical memory. So one of the naive things you can do if you just copy everything is you just copy all of its virtual addresses, copy all of that memory into some new memory and then just map all the virtual addresses so they line up to the copy so they look exactly the same. But they're different physical blocks of memory. Yeah. These are all so user processes can only use virtual memory. Yeah. Yeah, this far. All memory addresses you've seen printed to you, they're all virtual memory addresses, even if you've never known it. I can guarantee you it's not going to be the same address. Unless, right? Because even that address starts at like FFFF if you started byte 0, how big is that? I don't have like four terabytes of memory or something. That address is huge, right? Any other questions or fun things we want to do with this one before it gets even messier? Yeah. So my friend mentioned if you declare an int y later, you said the address will be the same. Yeah, it will likely be the same. Yeah, we can try it if you want. So the way they declare a variable sort of following the same way, I thought it's all random. So it will be randomly placed between two executions if you run that same program again. One of the things that Colonel will do is like randomize addresses. So if you ran it again, it would get different addresses. But at the point of the fork, that randomization has already happened, then I clone everything. So everything is in the exact same state there. So they'll probably get the exact same address because they're both executing independently, right? So let's just double check. I'm like 99.9%. Sure, they'll get the same address. Whoops. So they got the same address. My camera died. Cool. They got the same address because right after the fork, that variable doesn't exist. But they're exact clones of each other and they would do the same thing to allocate it because they're the exact same program, right? Any other questions? Yeah. Yes. Yeah, so that's part of the guarantee of your Colonel that whenever you fork, you have an exact copy and it doesn't affect the other one. Yeah. Sorry, is X. So the process for cloning is whatever is executing main. Yeah, I mean you could do whatever here, right? I could call fork at whatever point in your program. I could output some stuff to a file, do whatever, and then call fork. And then it's just going to create an exact copy of that. And if I was writing to a file and then wrote a bit more to the file and I forked in between those steps, then suddenly, since it's an exact clone, you'd have two processes writing to that file. Yeah. If you don't have the memory to create a fork, that means you've probably run out of memory on your machine and it's about to crash. So yeah, because this is the only way to create new processes, if you can't fork anymore, you can't launch new executables. You can't really do anything. So if fork fails, it's like if malloc fails, well, malloc failing is less bad than fork failing. All right, any more questions about this? Because the next one is going to be, oh, even better. Because there's a, yep. Yeah, so this is called fork example. It's a C file. It has a main. So when you make it right, it makes an executable called fork example that for simplification purposes, you can think of it start executing at main. And then to actually create the process that runs that fork example, we saw my shell would have cloned itself because it's my parent in here. And then it would have exec VEED the fork example file. And then it would have started executing. And then whatever that fork example execution made it to the fork, it would have created two copies of itself at that point. And it would have been exactly the same. So yeah, so that's kind of disposed of mystery of your shell. Like your shell would have done a fork, kept itself the same to keep on running. And then the child, it would transform the child into whatever process you typed. Fork example, LS, whatever. All right, we ready for some more fun? So here is a better process in operating system courses. Love asking this on exams and stuff like that. So because this is the only way to create processes and it's good to know processes. So I have a program called multiple fork example. We'll start reading main. So thankfully, that's the same, even though the rest of your world has kind of went upside down. But program execution, you can still think of happening at main. So inside main here, I just have a for loop that runs four times i equals 1 to i equals 4. And then it calls this function new process. If it returns some error code, I'll just say zero is no errors. And then if it is an error of some variety, I'll just catch it and then return. And return from main, that's the same as exit pretty much and that kills this process. So all it does, so main will go ahead and call this function called new process four times. Now inside new process, first thing it does is fork. So it will create two new processes. So it will create one new process, which would be one will be a copy of itself. And to distinguish them, the only way I can do that is with PID. So let's take the first call. So ID, the first argument there is equal to 1. I would have forked. There are two exact clones of each other now. So that ID in both executions is still ID equals 1. And now the original one has process ID greater than 0. The newly created process has process ID equal to 0. So thankfully for you, it is the original process. So this is the parent. So remember, two processes executing now. The parent would go ahead and fall into that if branch and then return 0, which means no error. So the original process just does a fork and then returns. And then the other one, so the new chop. So the else if there's an else if there's an error. If this ever happens, I would be shocked. And then in the newly created process, it would fall through there and then start executing. So what it would execute is there's another for loop that goes from 0 all the way to 9. And it would say what process there is. So it would print off the ID and then print off whatever the value of x is. And this u sleep is just to put itself just wait a millisecond so that we get more interesting output. So everything will just wait a millisecond. And then the newly created process here called exit. And so that should end that newly created process. So at the end of this, the two processes, the original process would have just immediately, after the fork would have immediately returned from this function. And then the new child process would have made it down here and would have exited. And then it would have been dead. So then this happens, right? Then for i equals 2 in this for loop, it would create another process. And the same thing would happen. The original one would immediately return. They would give back here i equals 3, i equals 4. And then as soon as that's done, it would exit from main. So the original process would then exit and be dead. And then all the child processes should do the exact same thing. So if we do this, our original process is the only thing calling fork. It should make four fork calls. So it should create four new processes. So if we run that, again, we have four running processes that we newly created. And we have no idea what order they're going to run in because it's up to the kernel. Just each one of them is going to print in order. In this case, it goes 1, 4, 3, 2, 1, 4, 3, 1, 4, 2, 3. And then just prints them off, but it's all in jumbled order. And we have no idea. All right. Any questions about that little example? Does that make sense? So there are the original process, and then it creates four other processes that all print off independently. So if you're the kernel, if I only have two CPUs cores and four things are running, then I have to do some things concurrently. I try and do as much in parallel as I can, but some will be concurrent. After the fork, the parent process is immediately terminated. So it returns 0 from new process, so it just returns here and goes back here. Yeah, it's the same parent that has multiple children. So each time it goes through, it creates a new child. And then for each fork, that's here. The first time through for i equals 1 in the first loop in main, id would be set to 1. And then after the fork, exact copy. So in that new child, id is 1, which is why we see id 1. And then the next time, the original parent process would have returned, and then that i would have been reset to 2. Id would have been 2. It would have forked exact copy at the point of the fork, so the new child would have id equals 2. This one? All right. This is where the fun begins. You want to return 0 from here? All right. I'll make this a bit easier, because this will quickly go at a hand. Let's reduce that to 3. So this is a good question for your exam, because your brain's going to hurt now. This is going to be great. So if we run multiple fork example with that, it's still outputting a bunch of stuff. It's still running. We seem to have a bit of an issue here, because so process, it goes 3, 2, 3, 2, 3, 2, 1 doesn't even happen. And it's actually still kind of crashing. And there it goes.  We actually created a lot of processes, but we can see that. Let's see how many ones we got. So process 3 printed 0 here. Hopefully I only made one process 3. But if we go through all the output here, there's a process 3 with 0. So we've made two process 3s. What? And then we go through, oh dear, there's a lot. And then we go through. So what actually happened there? Because that looks like a mess. So if we return, let's go over it slowly. So let's see what happens. So if we go in here, we create a new process i, or sorry, we call a new process with i, i equals 1. We go in here in new process, id equals 1. We fork. So there's two exact copies. And now the original one does what it does before. It returns. And then the new lead created process comes in here, prints off, you know, process 1. Yeah, prints off process 1, and then returns 0. And now the newly created process comes up here and returns. Because it's the exact copy, if it hits return, it would have done exactly what the original parent did. So the child also returns from new process, comes through, goes into the loop. And now there are now two processes that are about to execute new process with i equals to 2. So now that happens. And now they create two new processes. And then you kind of grow exponentially. So that's why I put an exit there, because I wanted to be sure to kill the new process immediately so it didn't go out of control. Yeah, OK, one more time. So we're executing our original process. We start at main. i equals 1. i equals 1, so we call new process with i equals 1. So here is our original id equals 1. Then at this point, we have two processes. So we have pid greater than 0, which is the original. So id is 1. And then we have our new child process where pid equals 0, id equals 1. And these are two processes executing at this point in time. So this one would go into this if and return. So I'll move this. So this one has returned. It would go here. It would go here. And then there wouldn't be an error. It would go through. And then it would now change this i to 2. And then it would essentially call this with that argument equals 2. So I'll leave my original process there. So the new child process here with pid equals 0, it won't go into this if statement. It won't go into this. It will print off process 1 and then all of its numbers. And then in return 0, it would execute it. So move this. So it would hit this return statement. Return 0. And it would return to exactly where this, the original one returned. Then it would go here because it's the exact copy. And then go through. So x was 1 before. Now here it will be here. And then i equals 2 for it as well. And then they both call a new process with id equals 2. So even more fun thing. So see what would happen if we just did while 1. If you want to really screw up your system, you could do that. So first time through this loop, I don't even check the return value. So I don't care. So first time through this, it would create one new process. Then they start executing the exact same code. Then they both go through the loop again, create two processes. So now there's four. Then they both go through the loop again, create a new process, 8, 16. So if I execute this, which is a good way to end the lecture because I will brick my machine, I'll go that. And then it just disappeared. That's not good. And then if, oh god, it's really slow. Oh dear. Why did I do this? So the number of tasks there is the number of processes running on your machine. It should be around like 150. It's now at 2,000, something like that. And all they're doing is creating more and more processes. And I guess it's because I'm on battery. So when I tried this earlier, I made it to 32,000. So that's some fun thing you can do to your friends. That's called a fork bomb. You can actually write a little shell script that looks like nothing that does that and bricks someone's computer. But if you're the kernel, you have to be smart and prevent that. So that's a good place to leave on because my computer's now bricked.


Hey guys, it's Nate, aka the Foot Accountant. Welcome back to the channel, and we need to talk about something big that has just been released, just been added to the game code, and I want to do kind of an outlook and overview of how I think this is going to affect the market here in the next coming days, depending on when this SBC does go live. Now, you probably already know what I'm going to show you, but team of the week player pick, Pax, and not a player pick, but a pack, is coming. It's been added to the code, and usually when we see stuff added to the code, it comes within the next 24 hours, and you see here there are two different packs inside of this game code. It contains one team of the week player from all weeks with a minimum overall of 81, then this other one down here contains one team of the week player from all weeks with a minimum overall of 84. We have had these packs in the past, FIFA 18, FIFA 17, we had these packs, I do believe, I remember FIFA 18 for sure, they had these packs during like foot birthday, the foot birthday promo, they had these packs out. But this is a very, very welcome sign to the market, and let me tell you why. If you go on to foot pin right now and look at some of the cheapest players by ratings that are in forms, it is outrageous how expensive some in forms are right now. And even the high rated gold, I'm going to talk about that in a second as well, but look at some of these in forms. People are paying 30k for an 80 rated in form, absolutely disgraceful. 33k for 82s, 33k for 83s, 35k for 85s. It starts to get more normal as we come down here, but all of these in forms are so inflated in price and so way, way overpriced that it is disgraceful. And that's why this pack just makes sense right now for the game. Now I also want to take a look at what came out today in FIFA Ultimate Team or yesterday, depending on when you're watching this video. We got the throwback UCL SBC, which just basically needs some gold players, you get some packs out of it, cool, right? We got this Morales SBC that was really random, it costs like 20k if you're an MLS fan, sure, do it. We also got a Footswap Deals player and the Bale SBC. Now a ton of people are doing this Bale SBC and a ton of people are doing some of these other SBCs. I think actually this throwback UCL SBC requires, yes, an 82 rated squads, an 80 rated squad. So it requires a couple higher rated squads, you might need some 82s or 83s for. But obviously this UCL Premium SBC requires an 81 rated squad. People are doing some of these SBCs and they're getting some of the higher rated for some of these cards, especially the guy like Bale. I mean a lot of people have some higher rated cards in their club. So if you look at the cheapest players by rating that we just looked at, a lot of like the 83s, 84s, and 85s are up the most because so many people already have high rated in the club, whether they're past special cards or team the seasons. You can throw a 190 rated player in, throw a couple 85s and then do like 83s and 84s for the rest of the squad and it makes it a lot cheaper for you if you have that in the squad or in the club. And that's what I think a lot of people are doing because if you look over here on footpin, cheapest players by rating, 83 rated players are 2.6, 2.7k, even 82s are selling for like one and a half thousand coins which is very high compared to normal and 84 rated cards are all 5 and a half k. 5, 2, 5, 3, 85 rated are like 11 to 12k. And then as you get higher, the 86s aren't inflated that much. 87s are a little bit up, 88s are eh, 89s are about the same as well. Maybe up like 2k for all these high ones. But the 84s, like the Hredeki card was literally like, he was like 3k or under. And now he's almost doubled in price up to 5.2. And some of these 83s as well, they're almost 3,000 coins for some of them. And a lot of them like Mandanda yesterday was like 1,000 coins, 1,200 coins. So those went up a lot with today's SBCs. And that's why, according, this is really great timing by EA to benefit EA. They're putting out this Team of the Week pack SBC when these 83s, 84s, 85s, and even 82s are very, very high right now. And honestly, some of just the regular cards in this game like a 78 rated guy from an 80 rated striker from La Liga. I had to buy a Prem striker to finish off the foot swap deals player, a rare Prem striker. We go special, we go striker, we go Premier League. If I can not lag out of the menus, we go gold, we go striker, we go Premier League. It was 1,200 coins to get the cheapest striker from the Premier League. There was a rare gold card on this game right about now. You see one right there and it's kicking me out of Ultimate Team because it thinks I'm a bot. I'm not a bot, I promise. But that's why right now this pack just makes a lot of sense because the EA can suck a lot of coins off of the market using this pack SBC. And this is going to be fun, guys. We watched the animal being flipped here really quick as we continue to talk about this stuff. But ooh, one second, right on the money. What are we saying? But that really does make sense for them to put out this SBC right now when those lower rated cards that are needed for this SBC are up in price. Now that also leads me to think, what's going to be needed for this SBC? For the 81, the minimum rating of 81, I'm guessing they're probably just going to ask for an 83 rated squad or an 82 rated squad. I'm guessing an 83 rated squad with 50 chemistry. It'll be decently easy. You can stack them up. And at worst, you're getting an 81 rated inform or maybe an 82 or an 83 and you're probably paying somewhere around 20,000 coins for that pack, right? 20,000 coins. Maybe 30K, depending on how they price it. I mean, I could see them pricing into like 35 to 40K over at SBC and for the 84 plus making it 50K, excuse me, voice crack. That way they would price the SBC kind of higher so that you lose some money. But that's my prediction for the 81 plus. I think it's just going to be an 83 rated squad. And for the 84 plus, I think it might be an 83 squad plus a team of the weak player. So basically what you can do then is do your 83 rated squad, get that inform and then throw them into the 84 plus and obviously do the same at 83 rating for that one as well. So that's my kind of fearless forecast on that one. And I think it's going to drop within the next day or so. I really do think that this is going to drop within the next day because usually when they put stuff into the code like this, it drops pretty quickly. So again, if you've been waiting on inform prices to drop, like let's say to finish an icon. A lot of people want to do these icons, but a lot of them have inform requirements down here. Team of the weak players, minimum two. Like let's say you've been looking at Eusebio, Vieira, Ronaldinho. A lot of these guys have inform requirements on all of these squads and it's just been outrageous to do them. Now you're going to have a chance to do those for a little bit cheaper because of this SBC. So again, if you have a gold inform in your club right now, check your clubs and just literally if you have any tradable informs, you haven't sold them yet, get them out as fast as you can. Get them out before this SBC drops because they're going to be selling for a lot more than they will after this SBC comes out. Basically all these 81s and up are probably going to go back down to like 20,000 coins or below, 15k probably. They're going to be cheap because they're going to get packed so often that so many people are going to do these SBCs because people need informs in this game to do SBCs, to complete icon SBCs and other SBCs that they put out on the game. And they also have the opportunity of packing something big. Obviously you have the chance to pack like a 92 rated inform from some of these SBCs. You have a chance to pack a sick card like an inform Kante or an inform Van Dyke and inform Salah and inform Pogba and Bapé. So many opportunities of cards to pack from an SBC like this one. So if you have informs, get them out. Now I want to talk about another thing what's going to happen to the market because of this. I remember in years past when this type of SBC comes out, this is a market crasher type SBC because people for whatever reason, love this SBC. Now I don't think that this SBC isn't going to destroy the market because as long as they don't make it absolute filthy dirt cheap, people are going to do this SBC but the cards that you're getting as a reward from this SBC, they're not going to be as endgame as some of the team is. These are cards that are out now. That's why an SBC like this would crash the market more during a time of like when it was usually released which was for birthday. That's when you would see an SBC like this really crash the market a lot more because the most expensive gold inform on the game right now, Cristiano Ronaldo's 95 rated card, 1.5 million coins. That is the biggest card that you can pack from this SBC. Yes, you have a chance at some Messi, some Mbappe, some Hazards, a Neymar, Van Dyke, a lot of really good players, but there are so many players out of this SBC that nobody's going to pack these guys up here. They're going to be packing all the lower level guys and a lot of these informs are a lot cheaper than they were earlier on in the year because of the fact that stuff has changed. We have a team of the season cards like look at this Pogba. Where was he at? He had his highest 800,000 coins in February and March. He dipped down to 500k, now he's at 348. So if you have an inform in your team, one of these high level informs, there's probably going to be some panic. You might want to get it out as soon as you can just to be safe. If this SBC is very cheap and very doable, a lot of people are going to do it. But for these high rated guides that nobody's going to pack, they're going to get panic sold and then the SBC is going to come out and they're going to rise back up shortly because they're just not going to get packed that much to be honest. There's a ton of informs that are going to be packed. But I do see there's probably going to be some panic selling heading into Wednesday at 6pm UK because I do think there's going to be some people that are panic selling because they want to get, they're knowing that this SBC is probably going to be coming and you're probably see some panic selling into other areas of the market as well but especially on some of these informs. If you have any of them in your team that you're using, I would maybe try to be careful with that and kind of assess the situation as how you think it's going to go down because obviously there's a lot of informs on the game and a lot of people like to use informs and a ton of people are going to do that SBC. So I wanted to talk about that SBC with you guys today. Talk about some market movements that I do possibly see happening because of that. I don't know if these icons will be affected. I don't really think a lot of those cards will be affected. It's mostly just going to be the inform market and the best part about this is going to be that you're actually going to be able to afford informs to complete icon SBCs and this is honestly going to help the prices of high rated golds for some of those high rated. Some of you guys might be holding onto them still. In your club, I have still a lot of cards club stocked 86 through 89. If they make this SBC pretty cheap and they release another high rated SBC, this could really influence people to go out to do that SBC and to of course finish icons that they have been working on because obviously people love their icons. Icons are some of the best players in this game. They're easy to link god squads at this point of the year with all kinds of team of the season cards that are out but that team of the week SBC is going to be the main main thing for it and let me tell you boys the pack luck from that is probably not going to be very good. We haven't had many packs this year that have had insane OP luck. I don't expect that pack to be super duper ridiculous just because there's so many 81 plus cards or even 84 pluses that it's just going to be a lot of SBC fodder so keep that in mind when you're looking forward to these packs.  Don't be a panic seller because a lot of people aren't going to pack the name or inform the DVD the embape the name or the Ronaldo. They're going to pack guys like down here in this team that we like an 81 rated Brazilian inform you know a lot of players like that so but again one last chance if you do have informs in your club I would get him out and then one last thing I do want to talk about is we should see we should see another vote for footies last Wednesday is when they dropped the first one on the start of the promo they dropped it on Wednesday and Thursday and I guess they're just going to be doing it two of them a week back to back so they release on Friday and Saturday I don't know what EA's plan was with that I wish they would have spread them out and done them more consistently but Fred has three days remaining so tomorrow he'll have two days remaining when the new foot swap would be out I guess they're not worried about overlapping these cards that much unless we're not getting a foot swap or a footies player tomorrow I really hope that we do get a footies and I think that's our next best shot at getting another footies voting item we've had Lozano, we've had Fred but hopefully we get somebody else maybe Defender that'd be pretty cool as well but again this video was mainly about the Team of the Week pack code that is in the code right now and I want to get this up for you guys and kind of talk about it see what we could see I know it's late night for a lot of you guys when I'm recording this at EU it's 10.17pm for me here in the NA so it's like 3am or something over there for you you're going to wake up and see this and see the hype and I want to get this out as soon as I can to you guys because I know you're going to want to know what's going on with this Team of the Week repeatable SBC so if you enjoyed the video, have any questions drop them down below, I'll be down there answering questions but of course if you enjoyed it, smash a thumbs up on it comment down below, I already said that and subscribe to the channel if you're new it's been Nate, Foot Accountant, touch you guys later peace out


All right guys time to cut the grass see some smoke there Let's see what's going on with this thing. I was cutting the grass. I Got one lap done And I got over there by the road of course and it just stopped it was like you push the clutch in I'm not sure what's going on. I think it's a belt issue, but let's see if we can find the problem Up in here. I did see some smoke just now when I started up for it Think it may be a belt issue. I've got to check it out and see first. The belt is on I don't know if you can see that Up in there. The belt is on. There's another issue. I noticed now these mowers with the hydrostatic transmission You can't push them unless you pull this out Now you can push it, but if I put that back in I can still push it So something's going on. So let me see what I can find out. I don't know if a shear pin Sheared off in one of the axles. I'm not sure. I won't check it out. Let me get back with you All right guys what I have found out. I think transmission may have locked up But I don't know why the wheels are turning but something happened because Up under here Up in there I don't know. Let's see if I can get you up in here so you can see what I'm talking about But in that pulley That's what drives this transmission. It's automatic or hydrostatic however you want to look at it And I should be able to turn that and I can't It will not turn so I think something locked up inside this differential here So what I'm gonna have to do is I'm gonna have to jack it up, but I gotta wait till she gets home The jack is in the truck. So I got to jack this up Pull that rear end out of there and see what's going on with it So I'll be back with you Okay, guys, I may have got lucky and I couldn't turn that pulley. I had to break on But I did find another pulley that I think is the culprit. It's called an idler pulley which If we got lucky, we're talking 15 bucks opposed to and I may have one on that But as opposed to you know, 150 bucks 200 whatever the case may be I'm gonna try to get you in here the best I can so please bear with me There's a pulley right here and it's all It's all screwed up and ate up Okay so I Think that's the problem because it was locked up a second ago So let's try it again Okay, now see it's kind of It's locking up Whenever it comes around and I think the belt's chewed up too, but right here damn it I'm trying to get you guys in here. I don't know if you can see that or not but it's all It's all chewed up see so That locks up It might be it might be just remnants of the belt But now I feel it. It's part of the plastic. So I think that may be the issue So let's try it and see if if it starts to move then. Oh, no, that's the issue since I've got it unlocked So let's see what happens now. I've got a bad pulley guys So it's a quick diagnosis of it. So I'll do a video on Changing the belt on that. It's an LA 145 So John dear So that's just a quick upload for you. I locked myself out of the house Luckily, I got in though. So I did get in the house Dropped my glasses Bent them up because I think I stepped on them But anyway guys, thanks for watching Stay tuned Maybe this weekend all because this grass is getting high. Look at it guys. It's getting high so I'll show you guys how to change a belt and Pullies on that. I may just go ahead and replace them pulleys. I've been noticing here lately that One of them was making a little noise. I noticed it earlier So I hose the deck off thought maybe there might have been a stick up in there and then It didn't help it and then when I got over there, that's when it that's when it screwed up. So There we go guys. I'll show you how to do that In an upcoming video here real soon. Maybe this weekend Let's have to see but it's got to be done. If not, I mean I can that thing will run enough I can cut the yard with it doesn't cut great, but While I'm at it, I'm probably gonna take the deck off of that thing So we'll probably go ahead and sharpen the blades while we're at it. So I'll show you how to do that, too So I guess you can call this an update on an upcoming video. I don't know but anyway guys Thanks for watching Shaber of the myth man legend gone for now. Bye. Bye guys


TfNN headline news update Good afternoon everybody. I'm Tommy O'Brien coming alive from TfNN headquarters in St. Petersburg, Florida 1 p.m. Eastern time on Wednesday three hours left to go in the trading day and 60 minutes to go until we get a Fed decision Markets right now pretty calm day so far. We get the S&P negative by three points trading at 3032 that's only about six points off a record close Dow Jones Positive by 17 points trading at 27,088 Nasdaq negative by 13 points trading at 8263 It's earning season. We get Apple earnings after the bell We get Facebook earnings after the bell and Starbucks as well oil contract negative 90 cents at 54 dollars and 65 cents We got inventory numbers today a build of 5.7 million barrels that 5 million barrels more than the market was almost looking for Notes and bonds ahead of that Fed decision. We get the 10 year up 7 ticks 129 15 the 30 year up 21 ticks at 159 11 and the dollar index right now flat at 97 Excuse me 97 682 we're gonna start things off. We're gonna jump over to a chart of the 10 year It's gonna be all about the Fed today 60 minutes to go until that decision The 10 year yield right now We are sitting at a yield of 1.8 percent a little bit of a pullback from about 1.85 pretty remarkable that last Friday We were sitting at about 1.75 the odds of a cut WIRP jumping over 96.1 percent there you go the odds of a 25 basis point cut coming down the line in about one hour We'll see what happens But that all but assured the market would be shocked if it did not happen jump it over to the charts Started off with the S&P 500 currently trading 3032 you can see a little bit of a sell-off right around the opening bell and then the S&P's talk about a tight trading range Waiting for that fit that Fed decision. We've been in about two points throughout the entire trading day Nasdaq 100 currently trading at 8,047. We were up there at about 8,070 coming into the opening bell Dow 30 27,032 again, not too much action ahead of what's about to happen at 2 p.m. Eastern time Crude oil contract pulling back crude was up there at 5560. You'll see the volatility right at 1030 We were trading at about 5525 coming in to that inventory number a surprise build sending oil even lower and Gold ahead of the Fed decision right under 1500 at 1496 Stay tuned folks. We got our man Steve Rhodes coming up live right now with the trader's edge And of course Tom O'Brien wraps up the trading day live at three o'clock bed day. We'll be right back You


How do you feel right now? Feel good. So just, I mean, I think you popped up as a surprise last week on the injury board then, but what was going on last week? Like, what happened? Just, you know, Coach, I was in our team's best interest. You know, me and I played last week to make it even worse. So just set me down last week and be ready for this week. Did it happen during the game? Did you feel something during the game against Cleveland? Is that when something happened? Personally, I'm not going to speak too much about my injuries. Yeah. You feel like you're good to go this week, though? What was, since speaking on the injury, what was it like? How'd you test it today?  I mean, it was like any other day. Just going out there practicing, you know, it's a day at work and just, you know, felt pretty good. And he said you're going to go through the week.  It's the same as it is every week to, you know, win each day and, you know, prepare for Sunday. What are you saying? If I know they heard, I just listened to Coach Shannon and got a lot of different people in and out. But what do you make of the 49ers' defense as you all are studying there? It's a physical team on all three phases. Defense plays physical, pretty vague. So, you know, it's going to be a physical game and it's up to us to, you know, show us the more physical team. How tough was it to, you know, watch last week for you? It was very tough sitting at home. I think it was my first game, so it was just like, it didn't feel right. But, you know, I just got back right and ready for this week. And when you're coming off a hamstring, I know some of the guys are like, you know, it's a tough one. You got to kind of watch it.  Um, just day by day doing my part, getting the right treatment and take care of my body. I don't really, you know, think of the negative things to that may trigger. So just going out there playing ball. So what was that like watching for you at home?  But for the main part, it was, it sucked. But it was, it was fun. And I definitely missed the guys. I'm happy to be back in. You sit there like screaming at the TV. I know I'm just very curious, like how this goes for Kyle Pitts in a situation like this? I did, I screamed a couple of times, but that's football. That's probably every fan who screams. But, you know, I felt like a fan. And it was, it was pretty different to see it from their perspective. Do you do a song at the TV doing the right thing? No, no, death didn't do it. Throw it at the TV. I, that was one of my screams. That was one of my screams. But I didn't, I didn't throw anything new, new that TV, that TV, yeah. How do you think you and Marcus have meshed so far? I feel like we're doing pretty well. It's a long season, we're in a game five or six. It's a long season to go, like I said, and just a lot of more reps and our relationship will keep growing. What do you think he's brought to this team?  But his leadership is one thing that stands out. And he just rise the guys up and always make sure everybody's, you know, in the up and up and they're not getting down on themselves. You, you've mentioned it, so you, you saw through a different perspective last week. Did you maybe pick up some things of like, oh, wow, okay, teams actually maybe are doing this from watching it on, in a different vantage point. You can't really slow it down because it's, you know, there's constantly going on from the public perspective. But I mean, yes, a little different, you know, seeing different defenses on the screen rather than in person because you could, you know, spit it all up faster. But it was kind of the same, you know, got to give it to him. But, you know, we'll be right next time. I meant more for you personally and just kind of how your season is going and trying to figure out getting separation, getting open. If everything's like, oh, wow, I see this differently now because not me running. Oh, I got to understand.  I was, you know, watching other guys get open and, you know, wishing the best for them. After going to those, those, those tight end camps, so you've worked with, with, with George Kittle a little bit. He's got some really nice things to say about you, like what have those interactions been like and how do you think he is as a tight end? Um, George is obviously, you know, what he is, he's, you know, one of the greats and in my opinion, he's, you know, one of the best tight ends right now in the game. I love watching his film and he's played his heart fast, physical and aggressive. So he does everything, blocks, catches and, you know, he's very vibrant. You know, that makes plays like that. We, we definitely got to account for him. It would be disrespectful if we didn't, but, you know, we got a pretty good game plan moving forward. How are you guys feeling heading into this one, you know, the chance to get back to five hundred, five, five games, five really, really close games? Uh, yeah. You know, we put those games in the past and we really just ready to, you know, go out there and work and, you know, continue to push forward, you know, finally break through that wall that we've been talking about. A lot of fans, you know, obviously after last week talking about the penalty and the penalty and stuff, that's in the past. But do you guys kind of, are there any teaching points on that, something to do or to not do, given how they're throwing flags? Not just there, but they have it on Monday night too. Um, honestly, when it, you know, speaking on Grady's penalty, I don't think there's really any teaching points that we can run off of. I feel like we just got to continue to play hard, continue to, you know, be in the position to make plays like that and, you know, just keep pushing forward. Obviously, you know, you're reacting in that situation, right? Like, you get to the quarterback and just get him on the ground, but is there anything that crosses your mind to make sure that you don't get flagged? Um, can them too hard. That's probably the number one. Don't touch them around the head, and don't dive low, you know, below the knees, trying to hit them in, you know, in the strike zone. That's something that we teach every day, so we're going to continue to move forward with that. Last thing that's super off topic. I want to ask you about, are you a baseball fan? Have you been paying attention to the Braves? I know a lot of folks in town watching this playoff series and they're hoping for a whole bunch more. Yeah, I'm really not that big of a Braves fan, but I've been to a couple of games, and they got a heck of a team as always. Who's your team? Astros, man. Used to be the Astros, but I'm not really that big of a baseball fan, but that's the one team I did watch. I figured it was a Texas team. Yeah, no problem.


This is one of the craziest articles I saw all year. A single consumption of high amounts of Brazil nuts improves the cholesterol levels of healthy volunteers. Okay, that's interesting. They gave 10 men and women a single meal containing 0, 1, 4, or 8 Brazil nuts and found that the ingestion of just that single serving almost immediately improved cholesterol levels. LDL, so-called bad cholesterol levels in the blood, were significantly lower, starting just 9 hours after the ingestion of nuts and by no insignificant amount, nearly 20 points within a day. Even drugs don't work that fast, take statins like four days to have a significant effect, but that's not even the crazy part. They went back and measured their cholesterol five days later and then 30 days later.  It went down and stayed down after eating just four nuts. That's nuts! And no, the study was not funded by the Brazil nut industry. Interestingly, four nuts actually seemed to work faster than the eight nuts to lower bad cholesterol and boost good cholesterol. These results suggest that eating just four nuts might be enough to improve the levels of LDL and HDL for up to 30 days and maybe longer. They didn't even test past 30. Now, normally when a study comes out in the medical literature showing some too good to be true result like this, you want to wait to see the results replicated before you change your clinical practice, before you recommend something to your patients, particularly when the study is done on only 10 people and especially when the findings are literally just too incredible to be believed. But when the intervention is cheap, easy, harmless, and healthy, eating four Brazil nuts a month, then in my opinion the burden of proof is kind of reversed. I think the reasonable default position is to do it until proven otherwise. So now every month I eat four Brazil nuts. In conclusion, a single serving is sufficient without producing liver or kidney toxicity. I should hope not, but what they're referring to is the high selenium content of Brazil nuts. It's so high that four eaten every day might actually bump up against the tolerable daily limit for selenium, but not something we have to worry about if we're just eating four once a month.