Just a shout out to my brother, Briggs, who's coming down to host Wumi, as well. We're getting to battle number three of day number one. It is yet another promo battle. So please make sure you log on the forum. That's facebook.com. That's viewpoint.df. Make sure you tweet us on aph.dot.flop with the hashtag, sun, one, two, capital letters, lowercase.  Let's get into it. Straight into the clash right now. I cannot wait for this one. MC on my left hand side. Front boost. I'm making his return. My mouth whizzing. Make some noise. Now, number one, big whizz, please.  I'm just going clowning. Motherfucker, you look like an albino dowsing. Yo, I wear crocodile loafers, whip outside with a chauffeur. If you were a dowsing, you wouldn't do a yoga fire. You'd just do yoga. I said my face always in the hood like a cobra. My face always in the woods like a gopher. If whizzy, I am back with all the bars. I'm not at McDonald's when I order the Big Mac and it is large. Like you're at the theatre because I'm clapping at you, star. I didn't pick up a hooker, but I got the ratchet in the car.  It's like a pen that we shoot out because if we draw, I take shots. I said the crowd are here to see me.  My gun like Craig from Friday, even getting fired on his day off. Battle I'm in should go viral. So many forans in my garage. You need a passport to drive. No vinyl. That's 40 singing all night long. No vinyl. If it's sick, I've got a wife that's pith.   You still go to open mics to Cypher.     Yo, you best go hide when the Glock is spitting. We'll fly around looking for you with the chopper like you're gone missing. Yo, everything I rhyme ether. You're built like a right diva and you weigh about as much as a ride Vita. I said my bank's seeing more numbers than a timekeeper. 15 love babies. You're not a wizard. Don't do wizardry. I have never seen you on the wizard scene. And I'm a wizard scene. I speak wizardly. I can make it cool to say lyrically. Alchemy is a craft when I want to write. There's gold in these bars. Willy Wonka hype. I'm a real wizard. You don't want this life. It's payback. It's payback of the strongest type.  This war with this warlock on site. Because that's when I draw for the stick. Wrap the round and let one shot fly. From 40 yards out with the one that strike. Then I drop that. Pull out the compact. Close combat. Bring out the pea shooter and pop that. Then reload with a pea. That's the mission statement of a mystic shame. Shit's amazing.   Okay then. I've been making effigies and cryptograms in my tree. That's where I let that grand wizard hang. It's no mystery how I could just twig a man. Ask about me. I'm deep in that wicker clan. You've even got wicked plans. I brought fire for a big body like the wicker man. You think you're the bigger man? The show strength. Don't start. Just go bench. What's the wizard that's built so hench to a wizard that built stone hench? You contradict behind your box of tricks. You're not so big like Oscar Riggs. That's the wizard of Oz, you dig? If we dig deeper, we see that scared little Joshua kid. You can't break octopus. Check my name. Ivan Dennis Merlin Battalero Owen. Yes, let's take a moment. And yes, you heard it. My middle name is Merlin. And that just means I've been a wiz kid since early. I brought my driving license if you need to affirm it. Just either way, I've been designated for this journey. While you try and portray a life of unrest, drug dealing and gun threats.  You like to dress up your tracks nice, choosing kicks and fitting your hats right. Just because you lay down snares don't mean you live that trap life. Strange wizard. I don't really get the whole hype. Fake wizard.  It's like a convertible. Much on top. I'm like a drug dealer with no car the way I bust a shot.   And if you doubt with me in this clash I got you, fam.  No, they're not your trap. I said my gun's so big I can lift up a tank. I'll break in your house and leave no fresh prints. But I will pop to fill up banks.   She'd be faking all them lines. Your hoe is a two. My dame is a nine. But I still gave her this free willy and she had a whale of a time. She gave me long head like a top hat. I'm a bungee the way I pop strap.  I got the toasty on the corner like Mortal Kombat. But you still play the Amiga. Cannon fodder. If you say you've got the cannon, you've got a camera on you. Yeah, that big burner be banging on you. If you weave my biscuit, you a jammy dodger. Get fanny, brother.  Me and her are past words. She said I was a hot male so I put my log in. That's in when I get to body popping. That ATB smoking in the street like Doc Cotton. Yo, you need a meat therapist. Meet the vegan terrorist, meat shuffle tea and heretic.  Run up on your steak dinner like, who's flesh is this? The general message is we're very pissed. We'll put on our bellies and our meat is murder teas. Snatch you up out of your suburban dream.  Then take you to a pop-up cafe in Burmese, and serve you a burger made from beans. While we make you watch earthlings on repeat. Make you watch earthlings on repeat till you're begging for lentils and alternatives to cheese. But you get no mercy from me.   I'll harvest your organs, I'm the grim reaper.  Let's go. Try and be a trap-wapper in the US. You wouldn't feel so big. Those Americanisms can't elevate you. Do you even lift? Or is it part of the parody?  Could you flex those? Can you do this? I guess no. Your arms are ready to explode from implants of your leg bones or flesh and lard from whatever the parts with the flesh rose.  I've seen this guy kissing his muscles. Like this. And you're looking jacked.   Stop wearing t-shirts, free size is too small. He's like, nah, the gums have got a hug properly. This guy's fanatical about bearing arms like the gun lobby. How do you breathe in them? He takes his life in his hands when he's squeezing them. You can see his soul leaving them. It's a near-death experience when you go through a medium. In the best shape, more like upside-down egg shape. You should do more skipping and less skipping leg days. That moves around gym on a Segway. Short distance or long, ping-pong or a chess game, I'd beat you up pretty much everything except for arm wrestling. Well, you can have that. I need my arm. I don't want to snap that. And outside, you can get an oak burger. There's goodness in that. You're just the filler. No one came for the whiz wrap. Let's go. And at least two pairs of Dunlop trainers. Have some new nikes. I might go to Dubai tonight just to buy a new tie. All whiz it does is rub about money and guns. Yeah, you're right.  That's a food fight. I say, you look like some sort of dance DJ that plays sneakbo. Or a pedo on Bebo. Or a lesbian going through chemo.  She got some super hands. Peep show. I bet you drive a Corsa, right?  I drive a Porsche each night.  I'll pork your wife. I fooled for life. You just fooled for life. You'll get the big bow like a sumo before he fights. On my driveway, nothing but 15 plates. That's a home. You'll be washed up on the shore in pieces. That's a stone. Big shiny thing in the jeans. That's the chrome. Answer to the machine if I let it ring. That's a phone. The best is back. If I let it clap, you'll have one eye like Fetty Wap.  Your mother's blue head long like Marge Simpson. And no telling who I'm a hit when I let the shooter off.  It don't know who to pop. Got the motherfucking heat to your motherfucking cheek.   I'm a motherfucking beast. I come to impart some wisdom because whiz done. He brought fingers to a gunfight. I brought this gun. Mixed truth and fiction where the facts lies. I'll mack your belly when your tax fly. I'm a mack 11. You just pack light. Your slow gun can't match mine. My sub heading for your strap line. Yes, I'm that guy. That will bury your tool where it's deep and forested. Ready for revolution or apocalypse. So I ain't a guy to get mad with. It's my job to cross whizzes like Hagrid. So for that piece to be accessed, you better believe I buried more than the hatchet.  A straight shoot away of the chrome.  Seagulls, chips, donkeys, maybe a goat.   Literally a crazy gulf. And I'll catch you at the 18th hole. Just as you're in your pot and sars, I'll jump out from behind the window, waving a couple of arms. Two shots put you under par. I've got an eagle vando bar. Depart on the bumper car shouting, Bomber Club. Two shots put you under par. I've got an eagle vando bar. Throw your ball in a bunker and depart in a bumper car shouting, Bomber Club. Don't ever come to London, bruv. And if you're not a crazy gulf, I'll catch you at the arcade. I'm not playing games. I've got targets to hit up. Top scores all round. Everything's getting lit up. You get flipped up by the machine when I pull triggers. Tommy Topimble wizard. And if you're not at the arcade, I'll be on the map to pier. My gun goes boom on the map to pier. And if he's not at the pier, I'll see you on that pebble beach. I say, bruv, it's getting peak. Let's settle the beef. I mean veggie meat, hench, weak, we laugh, we become friends indeed. We go and skim stones recklessly on the edge of that velvet sink. And then I say, hey Wiz, rest in peace. I say rest in peace, bruv. Because that's when I reach for that chain that can give you a deadly leak. Yes, it's a leak. And then I say, yo, I say, I say, you can rest in your coffin dead and rotten or you can be forever semi-conscious because I always give them the veggie option. And then I shot him. Then I went health food shop and did some shopping. Then I made leek soup.


My G has had enough. Carpo defends his bestie Casper Niovist. Feeling like the music industry was choosing sides and defending his nemesis aka instead of him, rapper Casper Niovist had his trusting friend by his side to set the record straight. On Wednesday, the rapper was gatball of always being the bigger person, and didn't hold back with his opinions on the game and his rival aka. Speaking to Twitter, Casper said all the fuss was nothing more than aka's attempt to promote his new music that is set to drop on Friday. Feeling that Casper was constantly having to fight to get his point across, Carpo took to Twitter to slam people who were taking advantage of his best friend of two decades. I am never one to get involved in Casper's fights, but I am tired of seeing people taking advantage of him and his good heart. I have seen him help so many guys who treat him like ST today. I always tell him, my guy, just leave him, but it is really too much. My G has had enough. Last year April, Casper opened up about how much his friendship with Carpo meant to him. The rapper went down memory lane to celebrate the kind of friend Carpo has been to him.   He also went through his archives and found priceless moments when they lived together, after Carpo lost his parents. In September last year, the pair celebrated 19 years of their friendship with a young Bromantic Baki. They took over the socials with cute snippets of their trip. Casper has over the years been vocal about his love for his day one and thanked him for sticking by him through thick and thin.


Good morning. Good morning. So you should have seen on the mailing list that Project 5 was posted. So we'll briefly go over through it today, try to answer any questions you have on it. High level. So the basic idea of this project is you are designing the front end of a compiler. So you're going to give it an input language, you have to do the lexing, the parsing for this language, and then there's already a back end that's written that takes in a certain structure and will execute it. So your goal is to create that data structure. So from parsing the program you have to create this data structure. So it's incredibly important that you actually go through and understand how this back end works, because you can't change the back end. So you've got to think about it, you're on a software development team, your job is to do the front end, the back end has already been designed and inspected and implemented, so you can't change that back end. Actually is exactly what a compiler has to do normally. So the compiler itself isn't executing your code, it's generating x86 code that the CPU actually executes. So a similar thing here, right? You're generating some data structure in the normal GCC compiler's case, that's x86 code. In our case it's this intermediate representation that something else is going to execute. So not only do you have to understand the input language and how the input language works, you have to understand the semantics of this intermediate representation language. So this project is very similar to the project for parsing. Finish the functions, but you have to write all the functions. Yeah, instead of like two. Yeah. Yay. Yay indeed. The language is similar-ish. The language is similar-ish. It's similar but different. Look at the grammar to understand the language. So yeah, this is the basic idea, so you're going to feed into, you're creating this blue box here. So you're creating the compiler to generate the data structures. And then this intermediate representation, which is a graph data structure, that's going to be fed into the back end. So this compiler already exists. You don't have to do this part, all you have to do is that first blue box. So this is the grammar of the language. You'll have to read through this just like you do all the grammars to figure out how it goes. I won't spend too much time talking about it right now. I'd say it's a simplified version of the project for grammar. So there's no type declarations, all variables are assumed to be integers, and they have the default value zero to start. So this makes some things easier. Tokens are all here. Yes. I noticed there was like, this has something about an ID list, but there's no ID list in like the compile. So is that like something we create? In the intermediate representation? So we'll have like our own ID list we use in our own... You should have a variable list. Yeah. Some type of variables. Exactly. So we'll store that in ours, and we'll use that when we're parsing stuff. Yes. Yeah. So this is part of the translation process, right? It's not a one-to-one mapping. It's not like you're just doing a simple translation, right? You're just interpreting this input language and outputting in this intermediate representation what it needs to execute. Also, expressions are not recursive, which makes things easier. No-type declaration section. We have if statements, which I don't think we had in the other language. Do we have those statements? We did not. We did not. In condition stuff. Right? Yeah. We have if statements. We have print statements. There's one ID list of global variables, so there's only one declaration of global variables. That also makes things a little bit easier. All variables are integers. There we go. So that's pretty much it. The idea is you need to know what this language does and what the semantics of this language are so that you can properly create the intermediate representation so that the back end will properly execute it in the same way. Right? The programmer doesn't know that it's running in this weird compiler or it's running in x86 code. They don't care. They just care that they're writing their program in our language and it should execute the same and have the same semantics. Okay. These things are pretty straightforward. Booleans, right? We all know it. Booleans are the condition statements. If statements have valid semantics, you will have problems with nested if statements. They can be recursively nested. There's actually further on in the document that talks about how to handle that, so make sure you pay attention to that because it's going to trick you up. While statements are very similar. So, if we look, I actually have the code to look at, put that h file. So, all of these structures in here for compiler.h, these are all the data structures of the intermediate representation. This is what you have to be creating. Right? So we have a value node, a go-to statement, an assignment statement, a print statement, if statement, a state general statement node, and that's it. So, if you notice, we have, so a statement is going to be either an assignment statement, a print statement, an if statement, and a go-to statement. But, if we go back to our language, let's see, a statement can either be an assignment statement, a print statement, a while statement, an if statement, or a switch statement. So, which of these don't we have in our intermediate representation? Which one? We do have print. We don't have a while statement and we don't have a switch statement. Right? So you have to emulate those semantics in our input language using the data structures given to you in the intermediate representation. Just like there is no x86 while instruction. When it writes that code out, it writes code, and actually we'll see exactly how it does it. It does something that it jumps to the top. Yeah. So no modifications of the compiler.c? Yes, you cannot change compiler.c or compiler.h. Do we upload those? No. No. You don't just upload your own code up. I think we did in... Two. Two. Yeah, one of the other projects. I can't remember the numbers. One. Okay. So, for instance, the semantics in our language of a while statement are the normal semantics. Right? So evaluate the condition and then if the condition is true, evaluate the body and then go back to step one. So evaluate the condition then evaluate the body. And evaluate the condition then evaluate the body. If the condition is false, then you skip the body. Right? You go on to the next statement. So we can actually completely write this. We can actually completely emulate these... this behavior just using ifs and go-tos. So we can say that if we say this is some label, we say if condition, then execute the body and the last thing there go to the label. Right? So it's going to jump up here. It's going to evaluate the condition. If that condition is true, it's going to execute the body and then it's going to go to the label again. So this is actually exactly how that K-6 code is written to do while loops. It's exactly this code. So this is essentially what you're creating using these data structures. And so you're essentially introducing these go-to statements into the generated intermediate representation because we have a go-to statement there, but we don't have a go-to statement in our program. So you can't actually write this program in our input language. There is no go-to in our input language. Does that make sense? Yes. But there will be like while loops. Yes. Is that label actually there and input? No. It just looks like this. Oh, okay. We're saying this is equivalent to this, right? If we had labels and we had go-tos. Okay. You have go-to statements in the input language so you can, sorry, in the intermediate representation language. So you can represent these. Okay. Switch similarly, right? We don't have a switch. What are the semantics of the switch statement? Labels. Yeah. So execute. Check that variable, right? If that variable is the first case, then do that case body. If it's the second case, then do that case body. The third case, do that case body. So it's just a go-to. Yeah. So we just have an if. Well, actually, yeah, it kind of translates into a bunch of if statements. But there's an important, yeah.  Yeah. So there's a couple ways to do it. The easy way to do this is to add, transform every case statement into a statement like this and add a go-to at the end of there to after all of these. And this will help simplify things if you do it this way. Not just because I say it, it's going to make implementation easier when you implement these things. Okay. We also have switch statements with a default case, which is if it does not match any of those, right? So we can transform this equivalently. If the variable is n1, then do statement list one, go to label, all the way up to nk. Otherwise, execute that statement list default. Right? I see that default one. Yes. So do we assume that every case has a break at the end? Yes. Yes. In our language, every case implicitly has a break in it. But these statement lists, right, these statement lists can contain if statements, case statements. Yeah. Everything there. Those can contain if statements, files. It's going to be the tough part. Yes. Print, prints out the value of the variable. You all know where the submission site is. I'm just trying to emphasize. So yes, this is, I think, the key to this project, to be successful in this project, you have to understand the intermediate representation. Because this is what you're generating, right? At this point, I think you all have got, first, follow grammars generating recursive descent parsers, right? So you can do that code, plus you can follow kind of along with what we did in project four, right? Which is part of what you did. So that part shouldn't be too difficult, but you have to do it and make sure that's rock solid. But this is the key, is making sure you understand these data structures, right? Because, as we can see, so for instance, so statements are basically a linked list of statements, right? Do this statement, then do this next statement, then this next statement, right? Which makes sense. That's how the compiler's going to, the back end is going to do it sequentially. Execution, right? Exceed this, then this, then this. The tricky part, but this isn't a linked list. It's a graph, right? So we have, for instance, as long as there's stuff there, you can keep branching out. Oh, not the assignment statement. Yeah. I wanted to do it. Yeah. So, it has conditions, and then it has a true branch or a false branch, right? So you think of it linked list-wise, right? Link, link, link, link, and then it splits off into two, so there's two possibilities of where it could go to, right? The true branch or a false branch. Similarly, a go-to statement can go anywhere. It can point to any statement node, so it can even go back, right? So you can have loops in your graph, which is how you want to do it. If you want something to continue to happen and you want a branch that will branch outside of that loop. Yes. Do you have to worry about L-sif? What? L-sif. Or is it just true or false for all of your statements? Let's see. Say that again? Do we have to worry about like an L-sif? Let's look at the if statement, whatever the statement says. I don't think there's any else clauses to our if statement. Let's see. Okay, yeah, this is one of the things. There is no else in our language, but there is an else branch in the input language, or sorry, in the intermediate representation. Yes. So there is no else in the if statement in our input language, but the intermediate representation has an else, right? Which we want to use when we're doing, which we could want to use when we're doing implementing wiles and switches. So another important concept, everything to the everything in the all the variables to the intermediate representation to the back end are represented using this value node structure. So this is going to be some name and the current value of that the name of that variable. And so, for instance, an assignment statement says, hey, it has some operator, right? So what are the operators plus, minus, multiplier, divide? So this is going to be the left and right operand on the right hand side. It's either going to add them together minus whatever the operation is, then it's going to copy that result into left hand side's value. But, the really important thing is these are all pointers, right? So you need to make sure these actually point to the same object. Every reference to variable A needs to point to the same value node A, right? If you have just looked inside that this value node to see what the current value is. So that's part of understanding what the back end does and seeing how it deals with assignment statements. Kind of let you read through these things. Print statement's pretty easy. You give it an ID here. The statement node structure is a union, so it can be either an assignment statement, a print statement, a if statement, or a go-to statement. And you'll know that it is based on this type. Yeah, we have some code here to kind of help you out. If and while. Okay, this is the key. I mean, I think at this point, it may be a premature to go over all of these in detail because you have to really start implementing this and going through it and reading this section. This is one of the key sections is how to do if and while statements. Especially with like I mentioned with the recursion. So the key to remember is this is how you do it. So that it will work recursively. As far as the literature, we want to find the one from the previous assignment or is that given? Is it a question? Looks like we do provide it for you, so. Great. You should. I mean, this would be hard. This is what we did at the start of the semester. Exactly. I wanted to create it for the third time. Exactly. Okay. Yeah, so this is all about how to handle this. Handling a wall statement is very similar. Your code, your structure should look like this. You should be able to sit down, look at your code for parsing a wall statement and draw this diagram based on what are happening to the pointers and all the structures that you're creating. Alright. The execution is actually incredibly simple if, well, okay, I don't want. That makes it sound really easier than it actually is. Essentially, what it's doing here, so it's starting with the statement node as a list of a linked list. Well, it's a graph, but the start node is a linked list and the next one is going to be the next node to be executed. So it's going to put it in the program counter just like x86 has a program counter. While this program counter's not equal to null, it checks the type of that statement. If that statement is a no-op, it just goes to the next one. So this is how you need to do a no-op statement and a go-to, maybe. A print statement, it checks the print statement. It makes sure it does some sanity-checking to make sure that there is a print statement and that there is an ID in that print statement. If it is, it just prints out the value that's inside that print statement. So a print statement is the current print statement. ID is the current, is the node, what's it called, a node that's in there and then you're printing out the value in that value node. Then we're setting the program counter equal to the next instruction. Assignment statement does sanity-checking, checks the operator if the op is does more sanity-checking and then it switches based on the operator. If it's a plus, it gets the values out of the two operands of their value nodes, adds them together into a result. Otherwise, it subtracts, otherwise it multiplies, otherwise it divides. In the case of zero, when the operator is null, it means you're just doing an A equals B assignment with no operation and then it sets the left-hand side's value to the result. So this is where you can see this is how values get propagated with the assignment structure and then it goes to the next program statement. Yes. For, are you going to, okay, so for the input, are you going to be declaring? Yes. Are you ever going to do it inside the body? No. The variable dimensions are all just one ID list at the top of the program. Any test? That's probably not where it goes. So like here you declare variables A and B and so these variables are the only global variables that you have through the entire execution of this program. And then there you have all the statements. You have ifs and additions and assignments. Yeah. So, dude, why is this to start with, you know, like decorations and then to assignment statements and... I would, let's hold that so we get to the end. Maybe, I think we're almost there. So that's basically how the back end works. Compiler. If statements, right, are exactly what you would think. It evaluates the operand depending on what operator it is, greater than, less than, not equal to. So what are the, so some of you remember what are the three operators are back end supports? Less than, not equal. Right here. Is that normal? Why not? What are you missing? Less than or equal to, yeah, so if we look at our back to the grammar, we need scrolling a bunch. Right, if statement and condition is a primary, real-op primary where a real-op is greater than, less than, greater than, less than, not equal to. Okay, that's good. But, yes, but for an ifs, for, what am I thinking about? I know this comes up at some point and I'm going to remember which part it is. Right, when you do, right, when you do a switch statement, what is this saying? This is saying if variable is equal equal to and one. Yeah. Right? Do you have an equals equals operator? No. Can you add it to compiler.c? No, no, absolutely not. That would be too easy. It's not. Yes, so you have to think about the data structure you're creating and what's here, right, you can only compare with a branch, right? So, does it make the false branch or true branch? Exactly, if you make the false branch or true branch in this case, then you get around that. When you get stuck on these things, you should come back and watch this video because I think it would be helpful. Okay, go through statement, then we just set our program counter equal to the target that I go to statement and that is the entire compiler back in here. Do we also have to implement less than or equal to or was it just the equal statement that's not in there? You have to fully support the input language. Okay. So, you have to look at the input language, see what operators you need in there. Think about default as if and while those conditions that are in there are the same ones that are in here. But, for instance, if you want to extend the language to support greater than or equal to or less than or equal to or even just change the way you write out using only these three base operating methods. We can still do it. Okay. I think we've covered all the tricky things. Okay. We did that. So, you have to the input, the the interface to the code that you write, you must implement this method, parse, generate, intermediate representation. That's going to return a pointer to a statement node structure. That's going to be the first statement in this list, right? That gets passed to that execute function we just saw and everything happens. So, you have to implement this in a different file, right? You implement that correctly and everything's good. So, the way you do that is totally up to you. Do it the way we did it like in project four of recursive or parsing to build up this thing. That's going to be the easiest way that's going to not drive you crazy. So, that's kind of synonymous with the program? Yes. Like parse program is kind of that. In that case, we're building up a data structure that represents the parse tree of that program. Here we only care about returning this statement node structure, this graph that represents the program. It's not just a one-to-one mapping like it was before. Yeah. So, I'm assuming you would suggest that we implement everything that allows us to parse the entire input language first and then go back and then translate it to this intermediate just to make sure that we can get through the whole language, being able to parse through it properly, then go through and systematically translate it. I don't know that I would agree with that. I mean, would you offer a counter? Yeah, the counter is you parse what you do. We'll have to parse the whole language. Right. But you need to parse it for a purpose. Right. I mean, I don't parse the language, but what I don't think you need to do is to parse it in the sense that you create a whole parse tree from it. I'm not saying that. I'm saying create the setup so that it can be parsed all the way through. So, you do that without causing some time there? Yes. That would be very good. You know in the project for how to not just, you know, parse everything and then figure out what you're going to do with the values of the variables and stuff. In fact, just do inline parsing while you're parsing to have other lists and things that you would store the variables and update them. Yes. So that's exactly how I do this part. Yes. I would start from here and figure out what parsing functions you need, right? Like for that variable declaration list at the start, right? This is somehow you need to parse that list into a sequence of IDs and then you need to create essentially a mapping or a list of that ID and a new value node so that every time you reference that ID later on in the program, you provide a pointer to the same value node. So that's what you have to do first and then, yeah, that's kind of your global variable, right? All right. More questions? You got to use your C++ for this assignment, sent to S67. Or use Java. Yeah. You don't have to use Java. I want to see your Python. Yeah. Why use Java? So, the other section, so they, okay, so they, the other section has decided you can use Java, but you don't get the back end so you have to do everything. I would much, I want you to do C and or C++ because that's how we've been going in this course.  So, I'm taking that option off the table for you. Thank you. I mean, I would be very helpful. Okay. Yeah. Submit your own code. Don't submit your compiler.C. Grading. So, this is when we get back to the question about what do we do when. So, how do I suggest to tackle this? So, the points are broken down in different categories, assignment statements. So, programs with only assignment statements, programs with only if statements, programs with only while statements, programs with only switch statements, and finally, programs that contain all types of statements. But, so I mean, you say that it's a program that only contains if statements, but don't those if statements have to have, you know, something in there in the body of that if statement, so wouldn't it contain other? So that's, so, well, okay, that's true. Or would it be just Yes, there's one way up here. So, okay, I guess I should have clarified. That's not exactly. So, so for us to even test anything, right, we have to see what your program probably looks like. Right. Well, as we can never test your code. Right. Then, so if, while and switch, all depend on assignment statements. Right. We need to be able to assign things and test if you're going properly in the right branch. So, print, do assignment, get those down a hundred percent, and then move on to if, while, switch statements. Cool. Okay. Questions on that? Okay. I'll just reiterate one of three things. So, you can, actually you can do one of four things. You can do nothing. Right. Totally not good. You actually have a lot of choices. I guess you could drop the class or do. You have a lot of things. You can, okay, so you can resubmit project three, and this will replace your project three grade, but you have a 30 percent reduction on whatever you submit. So, for instance, here, if your project three grade, you've got a 20 on project three, and you've coded up project three to get a 90, right? You'll be reduced, 90 will be reduced by 30 percent to 63, so your greater project three will go up from a 20 to a 63. You can also choose to resubmit project four. Okay. Same thing. You can resubmit project four, penalty of 30 percent. Questions on those options? Yes. What if you resubmit project four? It's not going to go down. Okay. No. I mean, that would be hilarious. That'd be too mean, I think. That's like, it's like less of a bonus and more of a gamble, I guess. Your third option, so this option comes with no penalty, so you can replace the lowest grade on either project three or project four, but you have to do this entire new bonus project that extends project five and does the same thing. Oh, yeah. Can I use it to replace project five? No. Just do project five. I was saying if your project five grade is bad enough to be worth replacing, I would not do that. Right. So here's the grammar for your language, just to go over this, tokens in this language. So basically we've extended it such that we have arrays. So you can declare that you have array accesses in very well-accessed ID, left bracket, expression, right bracket. So we have size and we specify the size in the variable section after an array. So in this one you actually have to mod compiler.h and compiler.c to support this, so you have to submit everything. And okay, there's a project five section. What? Would this be related with project five? No, there's a bonus on the CSE site. Right. I don't have my login on this. About the bonus project, but project five itself. Yes. So you said new print statements before assignment statements kind of went out in order to get the points. Not kind of, print statements. Is there any specific format you want to do? No. All you have to do is create a print statement node and pass that to the back end and the back end will print. So that's a self-check. You should never have any print statements in the code that you write. Except your debugging stuff, right. You should never write any print statements in the code you submit. All of the printing, everything is done by the back end. So you already have that set up for us. Yes. We know how to do it in the back end so we can link your print statement. Yes. Exactly. You should create a super simple example that has one variable and just prints out that variable and it should print out the zero. Excellent. That's what that program should do. But without that, it's not a good way to do it. It's a really good program. And it's a great program. It's a great program. So it's a really good program. We can link our print statement in the code in the code that you write. You can That's including project five and anything. Yes, everything. Everything here. Project five, all the bonuses. Everything here. No extension. Yeah. The next one gets 100. Yeah. Why would you want an extension? I don't know. Extension is actually bad, but they can force you to like work on it for another day. Trust me. I've been in that situation. They do that same thing for conferences. You're like trying to submit a research paper and you're like working on it. You can work out like two or three days straight.  And you're like, oh my God, I've been working on this. I just want to be done. Take a nap. That's like a breath. I understand. Functions. Okay. So we've seen, we've been looking at the runtime environment because we're trying to understand what actually happens when we execute our code, right? We want to understand where is the compiler place thing? Why does it place things there? Right? So we've seen that the compiler places global variables in just a static fixed memory location, right? And we saw that the compiler will put local variables on the stack with an offset of the base pointer. So we'll put it inside the function frame of that function. So now I want to study functions a little bit more. We haven't really gone into depth. We've gone into semantics, right, of pointers and assignment statements, right? Do you feel that we went into enough depth and of assignment semantics? Oh yeah. We're good to see you. Yes. We're good to hear. Cool. So let's do a similar thing with lungions so we can understand everything. Okay. So what's so special about functions? They can do stuff. They can do stuff. I can do stuff. Am I special? Yeah. We're all specials in a place. We're all specials in a place. Yes. But specifically in code, why are functions special? Yeah. You get to build a subroutine that will do a task that you expect to do more than one. Yeah. So we can kind of declare something, right? And it's some sense parameterized and it will execute maybe changes behavior based on its parameters, but it allows us to kind of specify some repeatable process. It allows you to give things functionality. Yeah. Can we not call functions? So how do you actually, like, what are the mechanics of a function? How do you actually go about creating one or using one? Some type of process that takes in some type of input. When you're coding, when you're coding. Oh. Declare. Yeah. You have the first declare function and then what? Define it. Define it and then what? Use it. Use it. Yeah. Right. If you just declare to define the function and it's never used, right? Does it even exist? Right. So what do we need to declare a function? What are the things that goes into defining a function? Return type. Return type. Name. The name. Parameters. The parameters. The parameters types. The body. The actual function itself. Stuff that knows. I thought that was the definition. Right. So there are, I don't know, we're going to go to two sets of concepts. Right. So we need to define the name. Why do we need to define the name? Think about the why. So we can use it later, right? We can find it. Right. Just declaring it, we don't really care what the name is. Well, maybe we do. We need to recursive.  Right. Exactly. Then we're going to call. Okay. So we're going to separate the, we need to have some terms to talk about the parameters that are in the definition of the function and the parameters that we pass into the function. Right. Because those are actually two separate concepts, right? The parameters inside the function and the parameters that we pass to the function when we call it. So we're going to call these formal parameters. So I don't know. Whatever helps you think about it. Think about like a parameter and like a suit and tie. Maybe a top hat. You know, it's formal. Okay. Cool. And the types. We also need another return type of the function. Right. I guess. So now, okay, so we talked about why did, why did we just talk about a difference between declarations and definitions? Because you can declare a function without defining it. Why? So that you can use it without having it defined and then define it later. Yeah. Right. And that actually helps us in C or it may not even be our code that defines that function. Right. So this kind of gets back to encapsulation. Right. If I want to call some other person's function. Right. Maybe I don't want to know how their function is actually written. I just want to know how, what that signature looks like. Right. I need to know how to invoke that function. Yeah. Exactly. When you call libraries, all that kind of stuff. Right. So we're going to separate decorations from the invocation. So invoking a function. Right. We all know the syntax, what it syntactically looks like. Right. Here we're invoking a function called what? Passing in parameters f1, f2 all the way to x. Sorry. That's the x. x1, x2 all the way to xk. Where x1, x2, and xk are all expressions. Right. Do you have to always pass variables into functions? No. You don't know. You don't know. No. You can pass foo x plus one. Right. And it means at runtime evaluate x, add one to it and pass it in as the first parameter of this function. Right. So we're going to call, so this is when we separate. We're going to call x1, x2, xk. These are going to be the actual parameters of the function. So when we invoke a function, we're passing, we are setting actual parameters. And the definition, the declaration of that function, we have the formal parameter. So going back to what we knew. Right. So when we talked about function frame, we talked about the function frame on the stack of the local variables. Right. So how do we actually call a function? You go to the, where the code is? We go to where the code is. Yeah. We go to the code is. Where do these parameters live? Think about now what we've been talking about. Are they global variables? No. They're local variables to that function. Right. So they also need to be inside that function frame. Right. Every function needs to be able to access the parameters that it was called with. Right. But who puts those parameters there onto the stack? Where do those parameters come from when the function is invoked? Where is calling that function? Yeah. The calling function. Right. So when we invoke a function, we are responsible for copying those values, the x1, x2, xk onto the stack so that they can go to that function. So that's actually the job of the calling function. And this actually goes back to why, part of the reason why in C, you need to know the exact signature of the function. Right. Because you need to know when you invoke that function, how much space do I put on the stack and where do I put these variables on the stack that the function can find those parameters. So the function frames of this, right, we've seen we can move the stack down. We can put values on the stack. Right. But what other information when we call a function, what other information do we need? Right. So when you're calling a function, why are you calling a function? It wants to do something for us. So how do we get the result back? Return value usually. Right. We need that function to return some value. So where does that return value live? We also need to put all the parameters onto the stack to that function. Right. But I think I should talk about this on Wednesday. Right. So we call this new function. The new function completely takes over the CPU, can do whatever it wants. And we saw that actually the very first thing that it does is it changes the base pointer. It sets up its new base pointer based on the stack pointer, which completely gets rid of our function's base pointer and our function's base pointer. So where our frame lives on the stack is completely gone. So we need to actually store this. Right. We need to save our base pointer so that we know how to get back. So, but, okay, let's think about this. Right. So what we're executing, the CPU, the program counter or the instruction pointer on X86, right, is executing our function. We call some other function. Now, what happens when it's done executing? Where do we want it to go? Right back to where we are now. Well, to the next line, not to. Back to the next line after the call. But. You save it for your PC. You update the PC to the function. Then the function executes it back to your PC. But where do you put your PC? Yeah, you need to save it somewhere. Right. You have to have it saved somewhere because fundamentally when you call a function, the new program counter is going to be that function. Right. And that function is going to start executing. So we need to actually save the return address is what it's called. Right. Or where we want this function to go back and start executing when the invoke function stops. And then we saw we need local variables and temporary variables. So the question is, so essentially all of these things are going to need to be saved somehow. And need to live somewhere when we call a function. But the question is who does what? And where do these things live? Do I put the return value on the stack? Do I put parameters and registers? Do I put, I don't know, a frame pointer on the stack? Who puts it there? Right. Maybe the caller, the function that gets called, right, the call e, maybe, you know, does it create its space for its local variables? Should a calling function create space for local variables on the stack before functions call? So this is actually just, honestly, the specifics don't matter except for the fact that you have to have some kind of convention. Right. So if you're going to call some function that somebody else wrote, then your compiler needs to know how to create that call and that code without knowing what that function actually does. So we need some sort of convention so that we can call functions that different people write with different code. So all this information needs to be stored on the stack. So in what order are the things stored on the stack? Or are they put in parameters and if so, or sorry, in registers? You're trying to pass a parameter that's not 32 bits and so it can't fit in a register. Right. What do you do then? So the question is always who can store this and what's the order. So we need a precise convention that explicitly says if you want to call a function, you have to do x, y, z in this order. And if you get called as a function, your responsibility is a, b, c. But actually the crazy thing, well maybe, I don't know how long you've been working with computers, this convention completely varies based on processors. So different arm is different from x86. Operating systems, so Windows calling convention is different than the Linux calling convention. It could be based on the compiler, different compilers can do this different. And even the type of call. So calling a normal function versus calling a syscall, I know some of you are in the OS class. So calling a syscall, you have to put parameters and registers to call a syscall. Where in a normal x86 Linux call, you put the values on the stack. So it completely changes. But these are all specified and defined. So the Linux, the C-deckle calling convention for Linux. Let me go over this so you know that there is a standard. I won't expect you to memorize this. But the caller first pushes all arguments onto the stack from right to left order. So the rightmost and then the next to rightmost, all the way to the leftmost parameter, the actual parameter. Then it's going to push the address of the instruction after the call. So this is that return address. And this is all the caller has to do. And then the function starts to execute. Now the called function or the call e function has to save the previous base pointer. This frame pointer from that function that called it. That's its responsibility. Then it has to create space on the stack for local variables. Then it has to ensure, this is actually a key. So we're using the stack. If you call a function and it changes the stack, you're going to be completely messed up because you're going to try to look for variables based on that stack location and they're going to be in the wrong place. So it's up to every function to ensure that the stack is consistent when it returns. And finally, just to make things even more confusing, the return value is put into the EAX registers. The return value actually doesn't use the stack, which makes it incredibly frustrating. Cool. So on Monday we're going to go over a cool, I'm going to preview this a little bit. We're going to go over exactly what this code does when we execute it and how the stack frames look like so that we can understand how function frames live and look like on the stack.


Welcome to All Hands Update. I'm Petty Officer Tony Rosa. Service members from all branches celebrated Veterans Day at the concert for Valor held at the National Mall in Washington, D.C. November 11th. The concert brought together musicians and celebrities to honor the courage and sacrifice of veterans, active duty service members and their families. Several artists including Bruce Springsteen, Eminem, Metallica and Rihanna performed for the crowd. The concert also featured celebrity hosts Jack Black, Jamie Foxx and George Lopez as well as special tributes by Tom Hanks, Will Smith and Steven Spielberg. Hundreds of thousands of people watched the show both live and on television. Visit the concert for Valor website for more information or to view the recorded version.


Jez San had to admire the absurdity of the situation.  Shigeru Miyamoto was desperate to create a powerful 3D game for the Super Nintendo, but he just didn't know what to do. Nintendo's greatest designers had tried their hardest to boost the power of the snares to create powerful games with rotating sprites and polygon effects, but they had failed to achieve their goals. In desperation, they had begun looking outward and were willing to do something unprecedented. The only way to advance Nintendo's 3D gaming capabilities was to trust an inexperienced young Westerner. Your problem is hardware, Jez explained. Your computer chip just won't run fast enough. Let us design a chip for you, and I guarantee it'll be ten times faster than what you're currently using. This was a lie. It was a terrible, enormous bluff. Jez didn't have any idea how to make a chip that powerful. He'd never built anything like this before, and his small team of fellow gaming enthusiasts were similarly out of their depth. But Nintendo needed this chip, and Jez figured that if he acted confident enough, he could figure out the specific details a little later in the process. Besides, all he needed to do was completely revolutionise 16-bit gaming technology. How hard could it be? Argonaut Games wasn't exactly a big company. Jez San had founded it at age just 16. Initially, the company existed just so that Jez could start making his own video games for fun. Over time, he hired his friends as well, setting them to work building and experimenting with emerging games technology. Jez named the company after himself, albeit with a twist. His nickname, Jez San, sounded a bit like Jason, which led him to a Greek myth reference for his team of Argonauts. The company was living hand-to-mouth. Making games without much experience wasn't easy. Jez's team were operating in London, which was hardly a world centre for gaming at the time. The Argonauts were just making enough to scrape by, but not much extra. They were having fun, though, and were seeing some moderate success, which was nice. But Jez had bigger goals in mind. Jez loved playing around with gaming hardware to see what he could achieve. He found himself fascinated by the Nintendo Game Boy and its bizarre copyright system. In order to play a game, the Game Boy needed to load Nintendo's logo on-screen. Any game that used this logo without Nintendo's permission was quickly served with a lawsuit. It was through this method that Nintendo maintained complete control of the games that were published for their platform. Jez was determined to break this protection. After playing around with the system for a while, he found a hardware solution that let unlicensed game cutters skip the opening logo, defeating Nintendo's licensing trap. Meanwhile, one of Jez's friends, Dylan Cuthbert, was working on another Game Boy project that seemed promising. A few years younger than Jez, Dylan was a genius with programming hardware, and he wanted to see how far he could push the Game Boy. Dylan built an arcade-style 3D shooter prototype for the small green screen of Nintendo's popular handheld. This had initially seemed impossible. It seemed there was no way that the Game Boy could handle such a complex piece of processing. Nonetheless, Dylan succeeded in making it work, and he and Jez combined their creations onto a single cartridge to show off the Argonauts programming triumphs. Emboldened by his team's success, Jez decided to use the cartridge as a way of getting Nintendo's attention. At a local games fair, he approached the Nintendo booth to show the company's representatives his prototype Game Boy game, complete with his legal bypass of Nintendo's security. Jaws hit the floor. Phone calls were made. Nintendo went into panic mode. A kid had beaten the software designed by Nintendo's best and brightest, and the company needed to know how. While the chaos raged, several of Nintendo's employees took notice of Dylan's game prototype as well. Clearly, these kids knew what they were talking about. Nintendo was going through a period of transition at the time. While their NES console had proven popular, gamers were requesting bigger and better graphics. With rival games companies making technological strides forwards, Nintendo was having a hard time adjusting to new demands. What's more, the rise of Western games developers made Nintendo nervous. There was a danger that English-speaking teams could steal Nintendo's hard work and take a chunk out of the company's audience. Despite a general policy of never dealing with outsiders, Nintendo's bosses admitted that they needed new talent to keep on top of the games market, wherever that talent came from. It was for this reason that soon after his meeting with Nintendo representatives at the games fair, Jez and Dylan found themselves on a plane to Japan. To be honest, Jez could certainly get used to the lifestyle here. Nintendo had paid for him to stay in the fancy Kyoto Royal Hotel and he was thrilled to be meeting with some of the biggest names in video gaming. Meanwhile, Dylan was enjoying the warm, subtropical weather of Kyoto. Initially, the heat and humidity had come as a shock, but everything was bright and sunny, which felt like such a wonderful change compared with the drizzly, overcast life in London that Dylan was used to. Little did Jez and Dylan know that Nintendo had big plans for them, if only they could be convinced to trust them. The first time the pair arrived at Nintendo's headquarters, they were ushered into a room that was filled to the brim with around 13 Nintendo employees, engineers and designers, all of whom were wearing identical Nintendo uniforms. Jez and Dylan were somewhat taken aback. Here they were, a pair of newbie developers from far away, and it seemed that Nintendo's plan was to pick apart everything they'd made and try to learn as much as possible about how they built their games. In lengthy business meetings, the heads of Nintendo scrutinized Jez and Dylan heavily. Many of the higher-ups were amazed at how much the pair could do considering their age. That said, youth shouldn't necessarily count against them. After all, plenty of Nintendo's biggest stars had come from humble beginnings. The bigger issue surrounding the Argonauts was that they were outsiders. Their company wasn't in-house, and Nintendo didn't like relying too heavily on third-party developers. Things might have been easier if Jez and Dylan were local to Japan, but because they were British, there were all kinds of challenges to working with them, not least a decidedly painful language barrier. Eventually though, the Nintendo bosses decided that they had to take a chance on these young programmers from England. They needed someone on their team who could teach them to create 3D games, and by this point, they were pretty desperate. And so it was that Jez found himself sat in a meeting with Shigeru Miyamoto, Nintendo's big superstar. Jez showed off his own demo of a 3D game running on the long-obsolete NES hardware, and in turn, Shigeru asked Jez for advice on their 3D project for the SNES. It wasn't great. The game didn't run particularly well, and Nintendo's programmers were really struggling to create something as advanced as they were hoping for. Over several subsequent meetings, and several trips back and forth between London and Kyoto, Jez and Shigeru talked through Nintendo's options. It looked like, in spite of the Argonaut's best efforts and the whole weight of Nintendo's research department behind the project, things were going nowhere. The SNES felt just a little too weak to run the kinds of games that gamers were looking for. Jez was frank in saying so, and pointed out that Nintendo would need a far more powerful effects chip to render the kind of 3D graphics they were hoping for. Jez began pulling numbers out of his head. He suggested calling on a few of his colleagues and friends back in the UK. If Nintendo would give him a slightly longer leash, he and the Argonauts could create a brand new computer chip from the ground up. Jez assured Shigeru that his team could produce a chip that would be 10 times more powerful than anything Nintendo could make without him. This was a huge promise that Jez didn't have any way of delivering on. But Nintendo didn't know that. Despite enormous misgivings, Nintendo elected to trust Jez and work with Argonaut Games, relocating Jez's entire team to Japan so that they could keep a close eye on them throughout the process. Now all the Argonauts needed to do was achieve the impossible. Getting to work with this prize team of Argonauts, Jez began drawing up plans for their new computer chip. The team didn't have a lot of experience at developing computer hardware, so they did things backwards. Instead of creating a chip that could be programmed for use in lots of different games, they tailor-made their new chip specifically for the game that Nintendo wanted to make. Whatever features Nintendo hoped to include in their revolutionary 3D title, Jez and the Argonauts would work to create. As they experimented on the project, the Argonauts affectionately began using the codename Mathematical, Argonaut, Rotation and Input Slash Output. Or Mario for short. While Nintendo didn't really understand what the Argonauts were doing from a technical standpoint, they had plenty of input to give on the story, gameplay and visuals. The inspiration for the game's feel and missions came from Shigeru. It was birthed from a wholly Japanese cultural icon. When Shigeru had visited a sacred shrine that featured hundreds of traditional red arches, daydreaming, as he often did, Shigeru began thinking of himself as a spaceship, flying through these arches to get points. This sensation, he thought to himself, would translate perfectly into the new 3D game that he'd been tasked to design. The new game didn't just have eastern roots, it drew inspiration from an appropriately western cultural icon as well. Shigeru was inspired by British science fiction puppet shows, such as Thunderbirds, who would fly around in advanced rocket ships and planes. Shigeru began crafting a story about animal space fighter pilots. Jers and the team appreciated the puppet sci-fi references that Shigeru was throwing around, and it certainly did help reduce the cultural barrier between the Argonauts and Nintendo. The game design was the perfect mix of British and Japanese influences, which helped connect the two teams that were working on its development. This trading of culture went beyond the two companies work on the game. Shigeru and Dylan spent hours together, teaching each other their respective languages, as they worked. Dylan would speak in faltering Japanese, while Shigeru would talk in English. The two encouraged and pushed each other, correcting mistakes and suggesting areas where they each could improve. Shigeru in particular was pleased to be able to finally gain a better grasp of the English language.  He didn't always get everything right, but Dylan and the rest of the team found it hilarious nonetheless. After months of work, the Argonauts special computer chip now renamed simply the FX chip was completed. As it turned out, Jez's promise of the chip's power wasn't as outlandish as he'd thought. Instead of delivering a finished chip that was 10 times as powerful as what Nintendo had been working on with the SNES, the FX chip ended up being 40 times as fast. The chip sat in pride of place within every cartridge of Star Fox, a brand new series that Nintendo launched to show off what their SNES console was capable of. The game went on to receive critical acclaim and tremendous sales, helping to breathe new life into the Super Nintendo. The moral here is interesting. It's good to be confident. While over-promising as wildly as Jez sanded might get you into trouble, there's no harm in trusting your own abilities. Don't doubt yourself. Just because something seems impossible, it doesn't mean that you can't find a way to achieve your goals. The first and most important step in the process is believing in yourself. From there, you can push to overcome obstacles, endure setbacks and make special things happen. If you're confident enough, you can achieve incredible things and others will be inspired by your example. At the end of the day, even if something looks utterly impossible, you can achieve it. If you work hard enough and have faith that you'll succeed, you can do anything you set your mind to.


We on tiktok with it now y'all and of course Instagram and Twitter y'all can follow on all those but anyway YouTube Team keep it clean. What's going on? It's engraving here with another video Happy Saturday. Hope y'all are doing great. Hope everything is good in your life. And if it's not Okay, that's fine. You gotta turn it around. That's it I know stuff be getting troubling stuff be getting annoying people be getting annoying But just try to let stuff go just try to brush it off anyway Justin Houston he spoke to the media today. Well first John Hall ball did and I'm Hollywood was out there. He wasn't practicing, but he was working on himself and whatnot So that's good. So that gives us somewhat of him may be indication that he may be close but how boss said they're not gonna rush it and You don't you never want to put somebody back out there too early because you don't want them to re-injure whatever current injury They have so that's we completely understand and again with Jimmy Smith quick recap. It's a low-angle sprain They'll be out a couple of weeks. So he should be ready for the first regular season game But we'll see but Jimmy Smith is good to go So that's a beautiful thing that he will not miss an extended period of time big relief Lamar That's what was back out there today. Um, they said that look more I think Jameson Hensley said he was like 11 for 19. I said he threw a lot of short passes They they didn't want to put a full workload on him, which is understandable because of somebody's missed a Significant amount of time. You can't just pile up everything all at once But they did say that uh, he was more accurate than what the numbers would show but they said that they were like for a drive So Okay, cool. No problem. They want to drop let them drop now rather than the regular season let them get it out of this system now fine cool But anyway Whoo, Justin Houston Justin Houston this had to be this was a very quick Pressure and I told y'all before by the time we get through training camp The Ravens will have interviewed every single player on the 90 man roster They will have interviewed every single coach because these pressures which we appreciate we love them Trust me We love them because I don't know if other fans teams or other teams do it like this But straight up Ravens You may not agree with all the moves that they make in the way they do certain things and whatnot But as a fan they put on for us a lot They put on for us a whole lot with the way that they run stuff They do so much for Ravens fans. It's great but Anyway, Justin Houston when he spoke today He just talked about the whole process what he's looking to do why he chose the Ravens And he said it was a scheme fit He said he felt like this scheme was better than some other ones and they asked him for a whole lot Did it was it true that you you received a better offer? More money from other teams, but you still chose the Raven And then I think it was James and Hensley James Hensley been on fire today But I think he it was him that said whoa, whoa, whoa, whoa But was it the Steelers?  I Was so close to signing with the Pittsburgh Steelers and we remember when the the report came out From shout out to the NFL chick and she said it She said that he received other offers from AFC North teams for more money But he wanted to be a Raven and that says a lot to the Ravens organization That says a lot to their front office that says a lot to the way they do things now That wasn't even a part about his precedent stuck out to me the most The part that stuck out to me the most and of course we've heard the story in the report that Marcus Peters was calling Justin Houston Marcus Peters was a big part of the Justin Houston recruitment because of course they both used to play in Kansas City But this is the kicker. This is what really got me The fact that he said and we heard that Marcus Peters had been doing some recruiting So he hit him up, but we heard about that Recently that he hit him up maybe recently, but Justin Houston. He said that as soon as the season ended Marcus Peters hit him up and said what you're doing this year. Well, who are you playing next year?  He's a starter with the Ravens defense He's been playing with them for the past couple of years and he has made a huge significant impact on the team But he also is a very big student of the game. He's a very very extremely smart player I feel like his smarts are not appreciated enough by fans whether you're Ravens fan or not I know you could say this and that about him. Oh, he may not be that physical. Oh, he's not the best tackler Dada, but his smarts man. They don't get talked about enough But when Marcus Peters When Justin Houston said that I was like, oh Marcus Peters knew he knew what a big issue on this Ravens team was last season and that was a pass rush That was a pass rush because if Marcus Peters is hitting you up From jump as soon as the season is over if Marcus Peters is on the phone with you Hey, where you where you going this office? Where you going next season? You got to come through if he's saying that to you As soon as the season is over Then that lets you know right then and there like okay, Marcus Peters knows what the problem is And we've known that the problem the Ravens have had a pass rush issue for a little while now It's been a problem ever since Terrell so it's been gone. It's been rough. It's been very rough So Even with them adding Yankees and Gokway them having Matt Jude on Tyus Bowser He had a role but his role last year obviously and over the past couple years is obviously Nowhere close to what his role is going to be moving forward They've had pernell McPhee of course for the past couple years, but that the pass rush It just has not been enough it hasn't been enough and in a game the playoff game Against the bills where these dudes like It's like they were telling that whole game. It's like they were telling the Ravens Josh Allen was telling the Ravens Come get me come come try come try to get me. I bet you won't I bet you won't Because they passed the ball so much that game And I mean they got they had a nice real nice group of receivers there and they still do but still they passed Like they were not running the ball at all man These dudes were not running the ball at all and It's like they knew the Ravens pass rush was an issue and And really more so cuz I know the Ravens will get QB hits. I know they will get pressure But again, like I said sacks Sacks are the clothes. That's the closing deal right there and Again, I would have to disagree Respectfully, of course with wink when he says sacks are overrated. I just know I don't think that they are Because sacks clothe. They finish to play plays over Pressure plays not over QB hits plays not over Now that can start to mess with a QB's mind Oh throughout the course of the game because if he keeps getting hit from left right front said everywhere Then that's gonna mess with the with it with the clock in his head So when he actually does have time, he's not gonna think he has time because he's been getting hit so much throughout the game but a sack a Sack it does that and more so it messes with the QB's clock in his head And it also brings him down and actually finishes the play So with Justin Houston something that I'm sure Marcus Peters is more than aware of especially after playing with him too But something that Marcus Peters knows something that we know too is that with Justin Houston the production is there It has been there It and it's been consistent production throughout his whole career So with with that if you add that to the Ravens and again with the past rush This going into the past rush this year. It was not a an area of weakness in my opinion. It was an area of unknown Because again, we just don't know we didn't know who was gonna be there We didn't know how these guys were gonna perform as past rushes Again ties boughs will be on a full-time roll now a daffy away dylan Hayes a lot of unknown with that So with the past rush adding the Justin Houston gives you a known It gives you something that you know He talked about it in the presser today He said he one of the other reasons why he chose the Ravens was because this would be a position where he can get in one-on-one match ups and That says a lot about he how he feels about the skin in my opinion It says a lot about how he feels about this scheme and it says a lot about how he feels about the coaching and also the personnel too So I am it's really exciting. There's the whole Justin Houston thing I'm initially it took a little bit for it to sink in and I remember I again y'all know y'all already know I Didn't think that this was gonna happen. I did not think and They asked him about the process to they're like, oh, why why now? Why not early and he said he just he was just waiting Sorting everything out made it one to make sure he made the right decision and whatnot and we can respect that Because he did not he didn't rush it. He didn't rush it And and I liked how though just the way that he spoke Because the way that Justin Houston spoke today it reminded me a lot of when they initially interviewed T-Mallon and when you just Hear his voice his tone of voice and the confidence that he has when he speaks Because if somebody could tell you something and it could be the truth like like for example Lamar Jackson is Lamar Jackson is uh, he's um, he's the Ravens starting quarterback. That's that's who this starting quarterback is. It's Lamar If it was somebody who didn't know anything about the Ravens and didn't know anything about their depth chart about their personnel What not and you tell them like that that Lamar Jackson is there starting quarterback? They probably not gonna believe you because you don't have any confidence But if you tell them Lamar Jackson is Raven starting quarterback They believe you It's all about the way you say it and that confidence and again Justin Houston has it He spoke with it. He exemplified that in that press of the day so it was a beautiful thing to see it was a beautiful thing to watch and I'm excited for what he's gonna do as a Raven now I'll be even more excited when you change that ugly number But again, they got to get through all the cuts and all that good stuff. So Shout out to the Ravens. Shout out to your team. Keep it clean. I appreciate y'all. I love y'all and I'll see you very very soon. We are out


Most people know that I started out my career in German literature, and that's my bachelor's degree and my PhD and a master's degree and At the same time that I was getting my PhD. I got a graduate certificate in women's studies and a Master's degree in higher education administration. I've known since I was probably four years old that I I wanted to go to college and I've known since an undergraduate that I wanted to work in higher education So it's it's just been one of those things where I just kept going down that path What was interesting is that starting in as an undergraduate? I was a power user of technology so I like to joke that without even knowing what I was doing I was in chat rooms before there were even chat rooms and I always tried to use Whatever technology was available. I had one of the first Macs ever as an undergraduate and just loved it I didn't get too deep into it. I wasn't a technologist per se, but I was definitely a user I really wanted to pursue using technology and applied technology for my my studies and then of course just for playing around when I went to Graduate school and I was a TA. I was a TA for German languages and literatures Then again, I was always pushing the edge of Technology use so I was working for with the center CRLT the Center for Research on Teaching and Learning at the University of Michigan and Testing out the tools that they were bringing on so asynchronous group writing tools for instance First generation it didn't go well, but it was fun to really push the technology to its limits in In intro and intermediate language and culture classes now when I moved from Michigan to Colorado, I started to work for the first CIO at at the University of Colorado Boulder and Y2k was my first project and if there is any I think it was the best way in the world to get a crash course in the the technical infrastructure of a University that keeps the Administrative trains running the educational trains running and the research trains running So I learned a whole lot real quickly about the structure of the University and about the infrastructure the technology infrastructure that was in place and From that we learned we learned a lot We learned how to reach out in a very decentralized Campus and start to bring people in at least in communities of practice or having people embedded in departments and we found models that really worked and started to investigate models for Technology refreshes for instance around the campus, but then again, this was way back in the day After that I am I was working for the Atlas Institute, which is the Alliance for Technology Learning and Society Did a lot of ed tech research use of technology by faculty some obstacles to technology technology use by faculty and students and Ran a student computer lending program also way back in the day And I think one of the biggest lessons I learned and it was I actually repeated the same lesson Out loud in a meeting yesterday is it's not the technology. It's the practice and I think if there's been one thing It's to look at the the learner needs the pedagogical needs and then to appropriately Match that those needs Whether their assessment whether their classroom Teaching styles whether they're fully online, but match those appropriately to the tools that we have I One of the best things about being at the University of Utah right now is that there is broad and deep support for Diversity equity and inclusion efforts practices and mindsets. This has been Making it very easy for me as a new person coming in To be able to give authority to staff who really want to pursue this as part of their jobs So what I have been doing personally is making sure that there's a committee Looking at this and giving the perspective of from from the staff level What's needed because if I just come in and say this is what we need I could be way off because it could just be what I need I need to hear from the broader community from from our staff, especially to say this is what's missing This is what we need to do and to give them the authority to come up with strategy and tactics for For moving us all toward being a more inclusive Organization We're I'm also closely aligned with Campus leadership to see what do you need what what are the other efforts happening on campus? And how can I help and even if I can't help it with a particular project? How can I make sure that my unit is aligned with the campus vision and the campus practices? So those are just two ways really authorizing giving authority giving agency to as many people as possible to develop and and disseminate Effective DEI practices and then also aligning with what the campus is doing because sometimes Other people on campus feel that they're working in isolation and don't realize that they have a whole unit That can be seen as an ally to their efforts as well what I've seen time and time again is the organizations that do the best job of Using technology to help them teach and learn and do research are the ones where there's some strong IT Leadership in the organization on campus and that's organization that is not just Focus just on keeping the bits flowing but understanding how we can help the school leverage things This awards ceremony opened up to us. Oh, maybe I don't eight nine years ago or so and we grabbed it right away because I'm big. I'm a big fan of role models and Have people kind of say well, how do they get the award and take a look and they gets them to have the conversation to think through Who's getting the award and why and there's always a great story behind many of these recipients? I just think it's critically important to reach out and and help organizations like this help the industry This organization we can work here and have the biggest impact on the industry anywhere. We're on board We're supporting why because it's getting the award winners out there getting that to happen and And you know, I've been around a long time I'm sure I'll be around 30 years from now, but I'll stick around a few more years But I'm more worried about the longer-term picture of the industry healthy So things that promote that are always good for the industry They're good for the industry as a small boutique firm like ours. They're good for us, too


So today, a friend of mine and I went to Trader Joe's. It's about a good hour from where we live, so I don't get to go very often. And I got a pretty good amount of stuff just because we don't get to go very often. So a lot of this stuff will probably last me about two weeks. So anyways, let's just go ahead and get started. All right, so this is everything that I got and I actually also picked up this cooler bag. I just needed another one. The one I have is getting kinda grainy and it's really nice.  So here is everything that I got. Let's start over here. I got these crunchy curls. They are made with lentils and potatoes. Something soft that even Hazely can have. And then I also got these pumpkin tortilla chips to go with this tomato basil hummus. Then I just grabbed these for myself. They are kinda like the moon cheese at Starbucks. I got two bags of cut up peppers, one of them. I'm making fajitas for supper. So I'm going to use one of them with the chicken I have in the crock pot. I'm just gonna stir fry it really quick. I also thought these would be great for in my eggs in the morning. That kinda thing just easy and already cut up for me. I also grabbed some strawberries and raspberries. I just kinda got some things that were out of convenience like veggies already cut up for me. This is the cauliflower rice and Brussels sprouts that are already cut up. I figured this would be great for in my eggs also and chopped spinach. The girls were out of string cheese. So I just grabbed some string cheese. I got some turkey breast for in their sandwiches. Just needed some lunch meat. I got two packs of the grass fed ground beef. If you guys aren't familiar, I do keto. So I'm always looking for healthier meats. This is organic yogurt tubes. And then I got two bottles of kombucha. Just a great thing for your gut. If you are not familiar or never tried kombucha, it is really, really good. It's like a fermented tea drink. And I got pumpkin spice cream cheese spread. This is something that was totally new to me and really intrigued me. So I decided to just get some of its frozen cubes of coconut. So I thought this would be great for in smoothies and just to add a lot of good health benefits. Then I got some kimchi. I've never tried kimchi, but I'm excited to try it. My friend that was with me said that it's really good if you like spicy things. And again, this is also fermented. I grabbed a bottle of their cold brew. This is something I've heard a lot about and I thought it would be fun for the girls to dip animal crackers in. It's the cookie butter spread. I got baby carrots. We were out of butter. So I just grabbed a block of butter. This is a little treat for the girls. And also this is two. They had tons of fall and pumpkin things. And I got a pumpkin bread mixture that I figured the girls and I can make one afternoon. These are granola bars. They're kind of like the chewy ones. And you guys, if you've watched my grocery hauls in the past, know that the girls like these a lot. This is something else I've been wanting to try. It's everything but the bagel. Seasoning that you can put on top avocados and things like that. This cereal has been something the girls have liked in the past. It's really, really good. I got three packs of the baby or applesauce pouches for Hazely. She goes through these pretty quickly. Then I was out of almonds. That's kind of a staple for me. Something I like with a snack, with string cheese or something like that. And then Everly loves oatmeal. So I just grabbed her these quick little, if it'll focus, these quick little cups of oatmeal that we can do in the morning for her. I got two avocados for myself and then a bag of apples for the girl. And like I said, most of this stuff will last me about two weeks. And it was just fun to get to go to Trader Joe's. It's been a very long time since I've been to one. A lot of times my mom will go out to one and bring me back stuff. But I don't get to go myself. So I'm excited to use a lot of this stuff. I'm excited about finding another cooler bag to replace my old one. And yeah, I hope you guys enjoyed this haul and I'll see you all in my next video.


Jeff green joining me right now Jeff. How did it feel getting the big three back together and being this close to full Strength as close as you've been in quite some time One more game left in this season we know you guys have incredible talent But what are some other qualities at this team has that makes it so special? We got a lot of guys to score everybody looks at the big three and you know they always focus on them But we got a lot of guys who can put the ball in the basket. We got guys who can play both hands So, you know, we we got a lot of weapons. So, you know, it's tough to scout for us So you're one of those weapons you had 19 points a couple of dunks it matched your season high with five three pointers in The game, how would you describe the rhythm you were able to get into today? My teammates found me. I'm just trying to be aggressive make the over shot. They were falling tonight So I just I just kept shooting. So, you know, it was it was a good feel So I'm just glad we won last one for you real quick. What excites you most about the playoff run? You guys are about to embark on that we got everybody healthy and It's gonna be fun.  We got a you know tough ties ahead, but I think we're gonna be ready Looking forward to it. Thanks so much for your time


The speed and flight pattern of a remote-controlled model airplane are determined by the joystick positions of a radio controller. Based on the position of the joystick, the controller emits radio wave activity at regular time intervals, lasting for a specific length of time. These radio wave pulses are transmitted to a receiver in the plane and converted from analog to digital pulses. These digital pulses are delivered to a servo motor, instructing it to hold a particular throttle or flat position. The width or duration of the pulses will vary based on the position of the joystick. The control pulses only last a few milliseconds and repeat about 50 times per second. A specific series of impulse signals will hold the servo horn in a fixed position. Let's look at the operation of a servo motor in more detail. The horn of a servo motor can be activated to hold certain positions. This position is set by the length of a radio pulse arriving from the radio controller. The servo expects to receive a converted digital pulse roughly every 20 milliseconds. This train of pulses instructs the servo motor to hold its position. It is the pulse duration repeating at regular intervals that tells the servo where to turn. For example, if the pulse is high for 1 millisecond, then the servo horn position can be programmed to be at 0 degrees. If it is 1.5 milliseconds, it is set to the center or 90 degree position. If the pulse signal is 2 milliseconds, then it can be instructed to go to the 180 degree position. The servo motor can be programmed to hold positions at any range of angles necessary to provide the precise control required to adjust the flaps. Varying the pulse width is all that is required to determine the position the servo motor will maintain.


This is the VOA Special English Health Report. Tobacco companies are fighting efforts in the United States and Australia to make their products less appealing. In Washington, a federal judge recently blocked the Food and Drug Administration from requiring new warning labels on cigarette packs. Judge Richard Leon ruled in a case brought by five tobacco companies. The judge temporarily stopped a new federal rule to require large new warnings starting next September. These include color images such as a dead body or diseased lungs. Simple text warnings now appear. Congress called for color images showing the dangers of smoking, similar to what Canada does. But the tobacco companies say the new requirements approved in June violate their free speech rights guaranteed by the Constitution. Judge Leon said the FDA could not require the new labels before a lawsuit against the government is decided. Some experts say the process could take years. The judge said he believes the cigarette makers are highly likely to win their case. He says the images are designed to appeal to emotion, rejecting government arguments that they are purely factual. He accused the government of trying to use the labels to promote an obvious anti-smoking agenda. The head of an anti-smoking group, the Campaign for Tobacco-Free Kids, called the decision wrong on the science and wrong on the law. About one-fifth of American adults are smokers. The World Health Organization says tobacco kills nearly 6 million people worldwide each year. More than 600,000 of them are non-smokers who breathe other people's tobacco smoke. In Australia, tobacco companies want to stop what would be the world's most restrictive laws on cigarette advertising. Cigarettes could be sold only in plain olive green packages. Only the brand name and health warnings could appear. The new rule is to go into effect in December of 2012. Tobacco companies say the measure violates the Australian Constitution. They say it would unjustly reduce the value of their brand names and trademarks. Health Minister Nicola Roxton says the government is ready for a legal fight. She says the new rule will be a big win for families who have lost a loved one to tobacco-related illness. For VOA Special English, I'm Carolyn Presuti.