Good Monday, I guess? Yes, some of the other cases are Mondays. Okay, so let's get right into it, because we're actually really close to the end of the section. I'm actually super impressed with how we're progressing on first follow-sets and syntax analysis. So we will get right to it. Okay, so on Friday we talked about how we calculate follow-sets. So what are follow-sets? What are follow-sets? What's the semantics of the follow function? That's about anything, you're really more specific. So what are the tokens or terminals that come directly after a non-terminal? So what are possible tokens that can come after this non-terminal? And so the input is a non-terminal, the output is a set of terminals for the end-of-file operator, or the end-of-file. And so the way we do this is very similar to first-sets. We start to initialize an empty follow-sets for all the non-termals in our grammar, and then we go through each of these five rules, which we've been talking about the last, I don't know, Wednesday and Friday, so about two classes worth. So we start with, the first rule is very simple, we start by adding the end-of-file to the starting non-terminal. Sorry, but we add the end-of-file to the follow-set of the starting non-terminal, that's our first rule. The second rule says that if the non-terminal we're interested in, in this case A, is all the way at the end of the rule, then we know we can add the follow of the left-hand side non-terminal to the follow of A. Rule three says, hey, but if we're not the right-most, and there exists epsilon in the first-sets of all symbols between the token we're interested in and the end of the rule, then the same thing applies, and we can say we add the follow of B to the follow of A. Fourth rule says, whatever comes after you in the rule, right, your A, whatever comes after you, add its first set minus epsilon to your follow-set. And the fifth rule says, well, you can keep doing this, assuming that C0 has an epsilon in its first set, then you can add C1, and then C1 has an epsilon and you can add C2 minus epsilon. C2 has an epsilon and you can add C3, so on and so forth. Okay, so we went through and we used our handy-dandy rules and grammar that we've been using as an example so far, and we kind of went through, I think we were going to stop here, more or less. Okay, cool, so we just did A. So now I want to calculate the follow of B, so where do we look? What do we look at? I want to calculate follow of B. This is everything that I know that I've already done. How do I calculate follow of B? So specifically, so you said look at the first rule. How do you know I look at this first rule? Yeah, we look for every instance of B where in the rules? On the right-hand side. On the right-hand side, so we look at the B here, and so we ask, does rule 1 apply? No, B is not the starting nonterm rule, rule 1 does not apply. Is B the last element of the rule, the right-most symbol in this rule? No. Nope, doesn't apply? Does epsilon exist in every symbol from B to all the way to the end of this rule? Yeah. So C and D, C has epsilon in its first set and D has epsilon in its first set. So then I add blood to the first of B. Follow of S to follow of B, exactly. And then rule 4, so which symbol does rule 4 apply? Which is C0 in this example? C, so I'm going to add the first of C minus epsilon to the follow of A, to the follow of B, sorry. So this will give me the first of C is C epsilon subtracted by epsilon, we have C. So now our follow of B contains the end of final, C, and then we have to say does rule 5 apply? So does rule 5 apply? Does epsilon exist in the first of C? Yes. Yeah, so then I add the first of D minus epsilon to the follow of B. And so the first of D minus epsilon is containing D, and we have no more, we can't add, there's no more rules there. So the follow of B should be end of file C and the questions on that calculation. So now I'm going to take the follow of C, how many different rules do we have to look at? Three different rules, right? We have to look at every single rule where C exists on the right-hand side, specifically every instance of C in the right-hand side of this rule, right? So we go through a pile of rules, we know, so C is not starting on terminal. Is it the last element? No. No. It couldn't be the last if there are epsilon's in every symbol that comes after it's first set? Yes. Yes. So we add the follow of S to the follow of C, and then we say we add the first of the one that comes after it, so the first of D to the follow of C. So the first of D is D, or the first of D minus epsilon is D. And does rule 5 apply here? Yes? So what do I add? But this doesn't say anything about doing follow. This says add the first of something to follow of A. Is it okay? So we did first of D here for rule 4, right? Rule 4 says always do the next one. So rule 5 says kind of do the one after that. So why does rule 5 apply or why does it not apply? There's nothing there. There's nothing after D, right? So it doesn't make sense to add the first of the next thing, which is nothing, right? There are no symbols here. So one way you can think about it is C is A in this case. I would be 0. But what's I plus 1? What's C1? It does not exist, right? So this rule doesn't apply. The rule is not in the form of the nonterminal interest it in, and then I and then I plus 1. There is no plus 1 anymore. Okay, so that's it there, but then we also have to apply these rules. And the second rule, A goes to C, D. So once again, I say are we the last element? No, could we be? Yes, so we should add the follow of what to the follow of C. Yeah, the follow of A to the follow of C. So that's going to add B to the follow of C. And then by rule 4 we need to add the first of D minus epsilon to the follow of C. And does rule 5 apply? No. Not a little bit. It's the same logic we just talked about, right? Can't possibly apply. Can I believe here? Am I the last? Yes, so what do I add? Follow of C to the follow of C? How do I know the follow of C? Do I explode in an internet loop? What do I use as the follow of C? What was it? Empty set. I use the last knowledge that I have of C, which is the empty set. Right? I am currently calculating the follow of C, right? And any time you need to reference it, I have the previous value I could pull from. That's why we start with empty sets for all the initial follow sets. Okay, does rule 3 apply? There's nothing after, right? This says you have to have something after. If there's something after you add its first set minus epsilon to your follow set, there's nothing afterwards here. And by the same token, 4 doesn't apply and 5 doesn't apply. There's nothing afterwards or at the very end. Cool. So we should have the follow of C is an end of file D and B. Then we calculate D. Once again, we can look at three different rules. This should be easier. Does rule 2 apply? Yeah, we're the last element. We are D. We add the follow of S to the follow of D. We're good. None of these other rules will apply because we are the last element. There's nothing that comes after us in this rule. What about for this rule? Yeah, same reasoning. Follow of A, right? The second rule applies. We add the follow of A to the follow of D. None of these other rules apply because we are the last element. Follow of D. Same thing. Nothing changes. So we get follow of D is the end of file B. And then if we do all these again, we'll get the same answers. And so we said we've gone through every non-term rule by every rule we have and nothing changed. What does that tell us? Done. We're done. We can stop. So now we have first sets and follow sets for this grammar. Awesome. Are we good on first and follow sets? Yeah, that's the correct answer. There's a question over here. Oh, sure. Why do we have to have the last column on the... Oh, when we get here, we said did we make any changes? Yeah, right? We added new follow of sets. So we have to go apply the rules again. We don't know if something is going to change. We can only stop when we go through every non-term rule, apply every single rule we have, and we don't get any new information. That means we're done. Cool. Any other questions on this example? So now we get to the why. So we want to build... So we started off the syntax analysis. We'll start at this first set by talking about parsing, right? We wanted to be able to write a parser. So what is a parser? Into? Into a yes, no, as to whether or not something syntactically accurate using a context for grammar. Close. Yes. It does one additional thing in addition to that. What was that? It creates a parser. A parse tree. It creates a parse tree, right? We want that yes, it is syntactically correct, and if it is syntactically correct, we want the parse tree that corresponds to that sequence of tokens. Cool. Okay. So we're going to... There are many different types of parsers that we talked about. We are going to study and talk about a very particular type of parser, predictive recursive descent parsers, which seems like a lot of words, so let's break it down. Predictive, what do we think that means? I think that would be like correct. How many tokens do we think it has to look ahead? This is a good meta thinking about what have we been studying the past two weeks. Two what? So when we're trying to parse a non-terminal and say, okay, we want to parse let's say an A or an S, like in this case, we want to parse an A. We need to make a decision based on the tokens that you're seeing.  So predictive in this sense means by looking at one token, just peaking at one token ahead, can I decide if the rule is A goes to CD or A goes to little a big A? And so that's the predictive part is where we get efficiency because we don't want to have to try all possible combinations of all rules, even though we know that will work eventually. What we want to do is know which rule to choose just looking one token ahead. So predictive, what about recursive? It's recursive. It's just what it means. So I'm supposed to trip the operator. So we'll see how it looks in the code. And we started that a little bit, but you'll see that it looks very recursive. Descent. We're going to start at the top. So we're always going to start at parse S at the top. And then we're going to figure out which one of S's rules apply. And then when we try to parse A, we'll figure out which one of S's rules apply and so on and so forth. Cool. And this is where it's important when we're talking about no backtracking. So here, for each grammar rule that we have, when we have a choice, does A go to B or A go to C, we want to make that decision just looking at one token ahead and we will never backtrack and change that decision. Okay. So what are some of the, we've actually been deriving the conditions for a predictive recursive descent parser. So what was some of the first ones? So my goal is I can only look one token ahead. It goes to, let's say, alpha and then I have another rule A goes to beta. So I need to look one token ahead. What must be true about the context free grammar in order for me to be able to write a predictive recursive descent parser? Yeah. So the first rule, so the first of alpha intersect with the first of beta better be the empty set, right? And this is exactly why we did first sets. By looking one token ahead, we can say, aha, it's got to be A goes to alpha and not A goes to beta. And I know because I calculated the first sets and the first sets tell me all possible strings that alpha generates start with these tokens and all possible strings that beta generates start with these tokens. So if I read a token, I'll be able to know exactly which rule generated that token. Cool. But then we ran into problems, right? What happens if epsilon exists in the first of, let's say, A? Well, S goes to, I think, A, S or epsilon? Is that it? So what's the first of A, S? A. And the first of epsilon? Epsilon. S is the first rule. But if I just read one token, if I read a single A, well, maybe we need to change it. If I read a single A, does that tell me which of these rules I should have? No, I don't know if this rule happens again or if I should go to nothing, why? Again, there's a non-terminal after A of S is the same as what S could start with, right? So whatever comes after S could also be what S starts with. And in the case of epsilon, epsilon could go to nothing. So I can't tell just from looking at one character ahead, does S go to epsilon or does it go to a different rule? So if epsilon exists in the first of A, then it better be the case that the first of A intersect with follow of A, better be the empty set. Do I have to rewrite this rule here, this guard, to say that if epsilon exists in alpha or beta, one of the right-hand sides? Yes. But why would I care if it's alpha or beta? So yes, you can think the first of A is going to contain the union of the first of alpha and the first of beta. It's definitely true. Do I have to worry about epsilon being in the first of alpha and the first of beta? Because of the first rule, yes. The first rule says they're going to have nothing in common. So I know one of the rules, if epsilon exists in the first of A, I don't really care which rule it is, but I know it's only going to be one of them. And then I say, well then, I'll know when to go to epsilon if what comes after A is never the same thing as what A can start with. Cool. And that's it. That's all we need. That is right. Cool. So I can give you any grammar. I can say, does this grammar support a predictive recursive descent parser? How should you show that? If I just give you the grammar? Yeah. You have to construct the first and follow sets to the grammar and then show for every rule where you have, for rule one, at every place where you have a choice, right, A goes to alpha and A goes to beta, then it better be the case that there's no intersection there. And you should show that. Here's some of the things you should not do. Just write yes or no. Other things you should probably not do is write these rules. That doesn't actually show me that you know how to apply them. It just shows me how to read and memorize these things and copy them onto the test. But it's actually applying these and saying, how do I apply this to a context for grammar to show that it actually does support a predictive recursive descent parser? Cool. Questions on this? We'll practice in the homework store. Okay. Now we get to the grand finale where we can actually write a predictive recursive descent parser. And we're going to write that using first and follow sets. So, first thing we need is a context-free grammar, right? It doesn't make sense to talk about a context-free grammar. That's not, I mean, that's what we're doing. We're parsing the need some kind of context-free grammar. Calculate first and follow sets. Why I've been going over this, right? You can calculate first and follow sets. You want to show yourself to demonstrate to yourself, demonstrate to me often that the context-free grammar actually allows a predictive recursive descent parser. And then we can actually, once we've done this, we can use the first and follow sets to write the predictive recursive descent parser. Let's look at an example of this. Let's go back to our language that we've been using. Write this like code. I am going to write code. So, I start from the top. I might parse that s function. What else do I need to be able to write this context-free grammar? I mean, sorry, this parser. Do I just need this? What was that? The production rules. Yeah, I need, well, sorry. Wait, what? These are the production rules. What else do I need? What was that? First sets, follow sets. I need all the follow sets, yeah. If I don't have these, I got nothing. Can I do it like this? Okay, what's the best way to copy these follow sets? There we go. I have no idea what's going to happen when I paste this. Copy, paste, all of these things very slowly. Looks like I can write it by hand, but I feel like this is still fast. Okay. So, I'm going to write parser app. There we go. I wish I could move these. I guess I don't know this program that well. Oh, well. What can you do? Okay. So, actually now I'm going to draw, because that's what I'm going to do. Okay. So, I want to write the parseS function. So, do I have a decision to make here? Yes, what decision? So, there's a couple things. A, do I, I guess I'm a little bit ambiguous, right? So, when I say do I have a decision, one thing I'm asking is, is there a choice? Do I have S goes to two different rules? No, it's only ever going to go to one rule. But, can I know right off the bat, by reading one token, whether this string actually corresponds to something that S could generate? No? So, what if I told you that the very first token of the input string starts with an E? Could I know that this string, or what if I got end of file? What if the input string is the empty string? So, can I know this just by looking at one token? And if so, how? If we get the first set of S, what's the first set of S tell us? Yeah, it must be either A, C, D, or B. If it's not one of those, then I can say it's a syntax error right away. But, I want to do T type, get token. So, if T type is A, T type in tiny font is B. Or, I guess I'm writing words, more Python than C. This is more pseudocode than real code. Let's see, A, B, C, D. Yes? We already have set operations. We could have said if the intersect of first of S and T type is not empty. Yes. Or you could say, if you have sets, you could do if T type exists in this set, of first of S. Okay, so if it is, then what do I do? What should I do? Now I have to actually think about how do I parse this rule? I already essentially did that here, right? I mean, I don't know what parse A is going to do. So, let's think about what are the semantics? What should this parse S function actually do? So, what are our two goals with our parser that we want? Valid syntax and a parse tree. So, parse S should probably throw a syntax error if there's a syntax error, right? So, let's go all the way down here. We'll say else. We'll assume we have some function called syntax error. We'll just assume that it's going to terminate execution and print out an error message. Okay, so I know right at the back, if I parse something that's not an A, B, C, or D, then I can say right away it's a syntax error. Great. So, what else should I do? We know we're going to use S, but if we just get another token and check that, we need to remember... Right, so one key thing is we only want to look at one token ahead, right? We've already... And when we call getToken, what does the lexer actually do? Yeah, it consumes that token from the input string. So, the next time we call getToken, it's going to consume more of the input. And the next time we call getToken, it consumes even more of the input. Right, so there's a couple things here. So, we're going to... Let's ignore the actual creating of a parse string a second. We'll see kind of how that will come about in the way that we're creating this. But for now, so S, so this parseS function is responsible for parsing an S. Creating... Think of it in a couple different ways. Verifying the input where it has and verifying that that input came from a parseS. But does it have to worry about checking a or b or c or d? If we have a parseS function, what do we assume we also have? ParseA, parseV, parseC, and parseD, right? Those are all functions we will have to write, but we can rely on them. So, if I know the rule is S goes to ABCD, the one is the first thing I know that should happen there. ParseA should happen, right? And that function is responsible for parsing an A from the input and moving the tokens until after that parseA. And then what happens after parseA? Right, and because we already talked about each of these parse functions is responsible for checking that its little chunk of the tree is semantically valid. So, if parseA successfully returns, then we know we have successfully parsed an A, and that's it. And that the next time you read a token it should be from b, but we know that we are semantically, we are syntactically good at this point. Now we have the parseA v, parseA c, parseA d, and then when I get here, what do I know? Yeah, that's what I'm just saying, yeah. They don't return anything right now. So, because we're just thinking of them as a little bit more abstract, we can think they'll do whatever they'll construct the tree for us. They'll do this much more in depth in Program Project 5. Now we can think they just do whatever they do. They'll call syntax error if they're just syntax error in their part of the tree. Otherwise, they'll just return. Yeah, now what do I need to check after with this? Why don't I need to check under file? Yeah, I know I have this S goes to ABCD, which means if I have ABCD, if there's anything else after that, it's going to be a parse error, right? So now what I'm actually adding here, I'm going to do a little zoom in thing. I'm also going to get rid of this. It's terrible getting token. If t-type is, what do I care about here? Yeah, it's not equal to the end of file. If it's anything else, then I know it's a syntax error. All that goes in here after this check. So now what about the top? So I'm calling parse A, but I just ran in a token. That was either an ABC or D. But where did that actually come? Did that come from the rule S goes to ABCD? Is it one of S's children in the parse tree? No, where did that come from? Yeah, from either first of A or B or first of B. And so it's actually not our responsibility to parse that and to move that input. So we need to make sure that we actually put that back. Because we are not actually consuming that token. The parser. Yes, it's like that entry point. This was asked a little bit of attention, but are we storing the tree? Because you said the parser returns yes, no, and the syntax is valid and it returns the tree, but we're not building it. We're not explicitly creating a tree, but as you'll see, this series of function calls create the tree. Do I need to store it? Not right here. Not right now. Right now we're just worried about creating the structure so that later we can do whatever we want. So later when we get here, we know, hey, I probably parsed S goes to ABCD. Now I can choose whatever I want to do here. Maybe I want to create the tree. Maybe each of these return nodes that I'm going to create into a tree structure. You'll get to this a lot more in project 5. But for now we want to think about it a little slightly more abstractly. Okay, let's take parse B first. Because that one's a little easier. To do parse B. Get token. Get token and then what? We can rephrase this. T type is not equal to B. Syntax error. So here I'm throwing an error. And then here we can we can print maybe something that says hey, I just parsed B goes to little b. So this would be where you do whatever you want to do when you know that this rule occurs. Like here I'd probably put print S goes to ABCD. Because I only know that this rule was successful when I get all the way to the end here. So B's really easy, but why don't I call unget token like I did here? I've actually parsed B. B, the rule big B goes to little b. This actually creates the B in the input. And I know, okay, now it must have this is the correct rule. And that way when B returns we say yes, we've parsed this B. And now everything after that will start on the next token following that. Okay, let's do D. Okay, gotta get the token. I was gonna get the token. Check forward with D. So I can spill like skittles or something and I'm gonna move it here. So I'm gonna call this parse D rule. We're gonna create this parse D. So then how do I distinguish between these two rules? First of capital D? First of capital D is D epsilon. So how does that tell me? What do I check? How do I choose which of those rules? You know, I'll talk at once. It's harder to be wrong. Yeah, so if we get a small, if we get a lowercase D, right? Then we know which of these rules must have happened. We have this one and this one. One or two? One. We know rule one must have happened. Why? Because if this rule occurs, what did we actually read from? Yeah, the follow of D, which is end of file or B. And we actually didn't go through it. We probably should have, but we didn't go through and calculate the first sets of CD and the first of A to make sure there was no intersect and also we didn't go through one of the rules we allowed with. Oh, I'm pretty sure it's good. C, C, B, B. Yeah, that's good. Yeah, okay. So I know if the token is what? Well, okay, so yeah, that's a good point. So why can't I say D or epsilon? Get token only returns tokens or end of file. It never returns epsilon. Right? Because we saw get token, right? It's just doing lexing and it's trying to find the longest token that matches. It's either going to return that token or an error. In this case, it's going to be a major error. I mean, nothing's going to work. Or it will be end of file. That's it. Those are the only options. So if we read a lowercase D, then what do we know? Which rule is it? Rule one or rule two? Rule one. Rule one. I'm going to do what? I'm going to get token like before. But don't we parse the D? Yeah. So we actually don't want to call unget token here. Why? Yeah, because we produced this lowercase D, right? This specific production rule. This instance of D. So we want to call unget token. Otherwise, we're just going to loop infinitely. We're never going to reach the end there. Okay, let's see if I can do this. Success. Cool. Okay, so then what else? So how do I know it's this rule two as opposed to a syntax error? So what? Follow D. Follow D? Yeah, so if it's an end of file or a B, then that means it must be D goes to epsilon. Otherwise, it's a syntax error, right? It has to be one of those things. Otherwise, it's not syntactically valid.  Dollar sign. Dollar sign B. This just means is T type one of these two? Then what? Why do I want to unget token? Yeah, right? The rule is D goes to epsilon, right? Which means it went to nothing. Which means we should not parse anything from the output. There should be nothing that this parses from the output so we want to unget the token. Okay, then if it's neither of these two rules, we just did both of these two rules. If it's none of those, then it must be what? Syntax error. You made a mistake. Then let's do parse A because parse A is very interesting. Okay. So now we're going to look at parse A. When I have two rules, A goes to CD or A goes to A.  So I'll let you guess what's the first thing we do. Get a token. So then how do I distinguish between these two rules? If it's CD, but big C, big D? But I'm never going to read in big C or big D, right? Those are non-terminals. So I only read in terminals. There's somebody over there. Somebody over there, what do I check for? What was that? Little A, and what does that tell me? That's the second one. So I have two rules, one and two. So then how do I know if it's the first rule and how do I know if it's the syntax error? What was that? The first rule would be little C or little D or epsilon. So that's what I do. So I should also check the follow of what? A, which would be B, right? So the first one, the rule two is easy and we'll write that first since it's easier. So if T type is an A, then I know that A goes to little A, big A. New one. So then do I call unget token? No, because I want to parse this A, right? It existed here. And I call myself, I'm recursive, right? But if I didn't read in A and I wanted it to be the rule A goes to C, D, right? Let's think. What's the first of C, D? C, D, epsilon. And then we know the follow of A is B. So we know that it's either going to be a C or D, in which case it's in this rule. Or if this rule went to epsilon we need to check, is it in the follow of A? So it should be a B character, right? So C, D, B, because I can't check epsilon. What do we say? C, D. Unget token or keep the token? Unget, yeah. I don't generate this token. For C, for C and print that A I chose the rule A goes to C, D. And what if it's neither of these? Syntax error rule. And so we could do everything except for C, but we could do C very similarly. Question, yes? So each of these parse functions makes up our parser. And each one is distinct. You need a different parse function for each non-terminal in your grammar. Yes. So if I'm not mistaken in project 3 we're supposed to read in a context-free grammar. Yes. And then read in a string of tokens to determine if it's in the grammar. No. No, we're not doing this. For project 3 you're reading in the context-free grammar and you are calculating first and follow sets for that grammar and other things. In the event that you would have to do that how do you dynamically develop these parse functions? Different ways. People do it in different ways. There's tools like lex and flex and like bison and stuff which will actually, you give it input in your context-free grammar and it generates C code. C++ code that implements all these parsing elements. So yeah, that's part of what you're seeing in project 3 is you can do this all programmatically. And you can generate a parser programmatically. You can do everything programmatically.


OK. Hi, everyone. So my name is Damian Dobrovsky, and I'm a cloud engineer in Cura. Cura is a new European cloud provider that focuses on security and compliance and builds clouds mainly for heavily regulated industries. I'm also a part of OpenStack Ansible team, where we try to make OpenStack deployment process as easy and flexible as possible. So because of the industry where we work, some of our customers are, let's say, really sensitive when it comes to security. And we get some demands to encrypt all the internal traffic in our clouds. So today, I'm going to tell you about our journey to achieve that. Generally, basic OpenStack Ansible knowledge is recommended. But if you don't have that, don't worry. I will briefly go through the deployment process, OpenStack Ansible deployment process. We have only 15 minutes, so today I'm going to focus only on encrypting the control planes traffic. OK, so we started with a list of things that can be already encrypted pretty easily with OpenStack Ansible. So the first thing, worst to mention, is the traffic between API clients and Adry proxies. So technically, OpenStack Endpoints. That can be done fairly easy. Then we have OpenStack, the communication between OpenStack services and infrastructure services like Database and RabbitMQ. What can be also encrypted is lower life migrations in case you're using LiveYard. So when you live migrate instance, between one compute to another, you can encrypt that traffic using vEncrypt. Then we have traffic between Nova console proxy and comp. And compute nodes in case you're using VNC console. And for those of you who use OVN, you can also encrypt traffic between Neutron server and OVNRD. So these things are already done. But the question is, what else we need to encrypt, to fully encrypt our control plane? So to understand that, let's look at this picture. This is a typical traffic flow in Adry proxy. I used Adry proxy as an example because it's the most common software to provide load balancing functionalities in the cloud. And the only software that will allow you to configure everything automatically in OpenStack Ansible. And I also took Glass as an example. It could be any other OpenStack service. But I chose Glass. So at the beginning, you have this is a green area. This is communication between API client and Adry proxy. So it's basically done. It can be encrypted. We even provide a possibility to obtain less encrypted certificates using Acme protocol. This is done. But then we have a yellow area. This is communication between Adry proxy and the service backends. And this was not possible in OpenStack Ansible to encrypt that traffic since anti-lob release. And we are going to focus on this yellow area. So going to the next slide, we started with the initial plan to achieve this challenge. First one is to use Ansible role PKI to generate certificates. We already have that. We use that for other services. So the work is basically done. So it generates certificates, sign them with a custom certificate authority, and distribute these certificates across the environment. It's done. And also we had to implement a feature to the role responsible for UWSGI configuration to be able to configure it properly to support TLS. Because most of the services stay behind UWSGI. So it sounds pretty simple. And in fact, it is pretty simple, but only for new environments. When you already have an environment and want to enable TLS backends traffic for this, it becomes way more complex. So this is actually our first challenge, how to enable TLS backends on already existing environments. So let's go through the OpenStack Ansible deployment process very quickly. It consists of three main stages. First is to prepare host for deployment, set up host. Then we have set up infrastructure where the infrastructure services like database are being configured. And finally, you can deploy OpenStack services. Set up host is not relevant for this talk. So let's focus on set up infrastructure and set up OpenStack. And the most important point here is where the ADRI proxy are being configured now. So it is during set up infrastructure stage. That's where all the services, ADRI proxy services, are being configured upfront. And also I, again, chose glance as an example to let you know what happens if you want to enable TLS backends for a glance, just an example, on the environment that is already running, the production environment, but doesn't have, that does not have TLS backends enabled. So first of all, you define variable responsible for this. And you proceed to running playbooks. So you go to the set up infrastructure stage, you start running playbooks. The first playbook you run is ADRI proxy install. And that's when you instruct ADRI proxy to communicate with glance over TLS. And congratulations, you just broke glance. Glance is not available at this moment because the OpenStack service is not ready yet to accept this TLS traffic. So you basically have downtime. Then you go through the other deployment steps, then set up OpenStack, you configure Keystone. This is a typical playbook order, the default playbook order in OpenStack Ansible. You run these playbooks until you reach glance playbook, and that's when you get your glance service fixed. And of course you're probably thinking you can change the playbook order. And that's pretty obvious, and it will help you. But in many cases, users may want to enable TLS backends for all these services during OpenStack upgrade, for example. And in that case, changing playbook order won't really help you. So you need to come up with some other solution. Another issue is the variable scope. And I don't want to dig too much into the details. This is a fragment of an Adrey Proxy service definition. You don't really need to understand all of this. But what is really important here that to configure Adrey Proxy service for glance, we need to access glance variables. But because we run this playbook for Adrey Proxy hosts, Adrey Proxy is not in a glance group. So technically, Adrey Proxy cannot access these variables. And as long as the defaults we define here match the real values or user has overridden them globally, then it's not a problem at all. But user may also override these variables only for a glance group. And it may lead to unexpected problems. And we have a solution for that, since Antelope really is. And we named it Adrey Proxy's separated service config. So basically, what we did is to move Adrey Proxy service configuration out of Adrey Proxy playbooks to OpenStack playbooks. So let's visualize it. That's another comparison. What happened, what was going on before Antelope release and what is going on after Antelope release? This is the first difference. Previously, at this point, we were configuring all Adrey Proxy services upfront. But now, we only do that for the base service and also some custom services that you can define in your configuration, but they are not really related to the OpenStack. It may be Prometheus or something else. That's the first difference. Then everything looks exactly the same. You go through the setup infrastructure stage and you reach setup OpenStack stage. And that is another crucial difference, because before, we configured only Keystone at this point. That's an OpenStack service. But now, we configure Keystone and its Adrey Proxy service. And we do that for each other OpenStack service, basically. So that helped us to solve both of the previous challenges. So we minimized the downtime during TLS back-end transition. That's the first thing. And because we configure Adrey Proxy services in a different place, we don't have a problem with variable scope anymore. And here we have another challenge. I mentioned that TLS front-end could be encrypted for a long time in OpenStack Ansible. But what was always problematic is to let me just remind that TLS front-end is the traffic between APA client and Adrey Proxy. And what was problematic to actually start encrypting that traffic? So technically, it's about changing the protocol of OpenStack Endpoints. And I picked Keystone as an most obvious example. Let's try to understand how OpenStack services communicate with Keystone. So basically, all of them have Keystone Endpoint defined in their configuration file. And it's fine. But what happens if that endpoint changes? I mean, in terms of URL or even the protocol, you would need to reconfigure all these services. But you can't do this for all of them at once, or at least it's super hard. So you need to find another solution. And our solution for that is to use some magic in Adrey Proxy that allows our users to temporarily accept both encrypted and unencrypted traffic on the front-end, so the green area here. Temporarily, during the transition, and after the transition, they can turn off this feature and able to do the transition without any downtime. So yeah, the solution for TLS back-end transition was this Adrey Proxy separated service config. And solution for TLS front-end transition was to allow our users to temporarily accept both unencrypted and encrypted traffic on the same port on OpenStack Endpoint. There is one more major change we implemented in OpenStack Ansible during Antelope is available thanks to Jonathan Roser from BBC. So basically, Adrey Proxy maps are just files storing key value pairs. And they may be used for several different use cases, starting from raid limiting, blue, green deployments. Additionally, they can be used to, let's say, link the client IP to the specific back-end. But we are using that for linking URL with Adrey Proxy back-end. And this is the difference, because previously, all traffic on the ports 80 and 443 was forwarded directly to Horizon. But it causes an issue because some environments may not even have a Horizon deployed. But still, we need to handle traffic on port 80 somehow. For example, to obtain a less encrypted certificate using HTTP on Challenge, right? So we decided to change this behavior. And instead, just blindly wrote everything to Horizon, we put a base service on the front that based on URL using regular expressions routes traffic to the appropriate back-end. So let me explain the default configuration we have right now for the base service. First of all, all Acme challenge requests are routed directly to less encrypted. That is later used by Certbot to obtain certificates. For security TXT, so security TXT is a file that allows websites to define security policies. All the URLs matching these regular expressions are routed to the back-end that hosts this file as just a static file. It's much simpler these days because previously, security TXT file was hosted by Keystone and available through Horizon. It was so complicated. Now it's just a static file in Adrey Proxy and served directly by Adrey Proxy. All the other traffic are routed to Horizon if it exists, obviously. And there is one more common case that is not enabled by default, but can be used by the users. You can define your own rules here. And you can do this, for example, to expose all the opens again points on the same port. So basically, you can have Nova, Keystone, Placement, everything available on the port 443, so to say, and routed to the appropriate back-ends based on the URL you define. OK, so I know it was a lot of information, but let's try to summarize it. First point is that Adrey Proxy front-ends can temporarily accept both encrypted and unencrypted traffic on the same port during the TLS front-end transition. Traffic to Adrey Proxy back-ends can be finally encrypted now since Antelope release of OpenStack Ansible. Adrey Proxy services are configured individually now, so Adrey Proxy Playbook are no longer responsible for configuring all of them upfront. And Adrey Proxy maps can be used to route your traffic based on the URL, but the usage of Adrey Proxy maps is not limited only to this use case. You can, for example, define your rules to apply rate limiting on your endpoints. Yeah, that's what has changed recently in OpenStack Ansible. I'm not sure. Maybe you have any questions? Yeah, let's do it. No, no, everything I mentioned here is already merged to OpenStack Ansible, so you can find it here. Any other questions? No. OK, so thanks a lot for your attention. Have a good day. You can contact me anytime you want via email, IRC, or even here. Thank you.


I just felt like what the Titans do to teams is the Titans take you into their world, okay? And that's an Ohio f*** world, okay? The person that created that world is an Ohio f***ing named Mike Vrable. And he brings you into his world and it is just, I think they're seven and three for the last three seasons, they're the only team or whatever that's seven and three for the last three seasons or whatever, that's the stat, it's like, do you know the teams that they've had? Tell us 15 players on that, tell us 10 players on that team. It's like, there's a reason Vrable is the coach of the year and we should have paid a lot more respect to that going into last night. That's why we didn't put the winner or the cover or the spread in the super boost because we didn't know because this is what Vrable has done, Vrable wins games, Vrable has a strategy, Vrable has the boys, they all buy it and they make you play in a way that you don't normally play.


Hello and welcome to the Grand Line Review, your source for everything one piece. Today we have a review of episode 871, finally it's over, the climax of the intense fight against Kartakuri. And just before I jump into this I want to say that I don't know if I'm gonna make anime reviews a regular thing. I did one for the very first time last week because I thought the episode really deserves some recognition and here I am again this week just sort of because. If this is something you enjoy and would like to see more of in the future then please do let me know and we'll see where it takes us. But I guess the main thing to be aware of is if I review an episode I'd be looking at it from more of the perspective of how it was adapted. I'm not so much going to be commenting on stuff like oh my god Kartakuri has been defeated because that is very old news having happened a year ago in the manga and I've got chapter reviews that already go into all of that kind of stuff. But yeah just something to think about. But as for an overall impression of episode 871 I have to say, yeah not bad. There were some parts of it I really liked and some parts that annoyed me a fair bit so expect a mixed review coming up here. As with most episodes it covered roughly one manga chapter in fact I think exactly one chapter in this case. So as a result I did feel quite slow at certain points but apart from a couple of sections it was mainly fine. One of those sections I'm referring to though was the Sanji putting flashback which surprisingly is not complete filler because there was a literal flashback in the manga. However it was significantly shorter lasting only two panels and did not include any of the wedding or cake baking stuff both of which took a huge chunk of time. I suppose you could argue that adding those two scenes gives a more rounded summary of whatever relationship Sanji and Pudding have. And while I think it's a bit weird from a character's perspective to be flashing back to things that happened literally a few hours ago to the audience these things happened months and months ago so that reminder may be necessary I guess. But stuff like that appeared all over the episode just small amounts of padding like when Brooke offered to quote-unquote negotiate with Smoothie or I'm sorry negotiate with the big woman. The joke after that was very predictable but I did enjoy him saying that the negotiations had failed after being hit by an army that was quite nice. And that's kind of a common theme in regards to this episode everything was padded and took much longer than it should as per usual but most of those padded sections had enjoyable moments. Another example would be closer to the beginning during the whole segment with the Charlotte siblings waiting in ambush for Luffy. I don't generally subscribe to the argument that anime filler exists to flesh out the world and its characters more so than the manga but it certainly is applicable here particularly in the case of the Charlotte decouplets. After having done a couple of videos focusing on all of the Charlotte kids I did very much appreciate seeing all of the decouplets have a bit of individual time because in the manga they're very much just a giant clump of people who are also there and of course I very much enjoyed the joke of nobody knowing which decouplet was who in the case of the boys. It was good fun and I really didn't feel a lot of moments during this episode where I desperately wanted things to move along. That may be because I know what happens next and I'm pretty chilled about the journey we take together but thinking about this from the perspective of an anime only watcher I feel like I might have been a bit annoyed and very keen to get back to the outcome of Luffy vs Karakuri. I don't think it helped that the beginning of the episode really teased an immediate outcome with the recap focusing on the final clash as well as the opening of the episode with the two of them still hitting each other with the dramatic tension filled music and everything. As a result it's a real cocktail moment when we just cut to brulee and realize uh well this probably won't be resolved in this half of the episode and as for when it did come up there was some pretty disappointing animation to deal with. What specifically sticks out to me is the janky way that Luffy and Karakuri's arms began retracting from their strax. It was just really jagged not at all fluid and a far cry from the quality of the previous episode. Well when there was a similar situation in the shot where Luffy returned to his base form from Snake Man it was legit just a crossfade of three still images against a moving background. It felt really cheap even for Toei but moving to something I quite liked the moment we've all been waiting for well apart from Snake Man the fall of Karakuri and for this I give a ton of credit to the music and the sound design. From the moment Karakuri asked whether or not Luffy was going to return to take down Big Mom one day it felt epic. That music track is just so damn good and when Luffy shouted that he was going to be the pirate king it felt heavy and really effectively conveyed just how massive the meaning of those words are in a way that I haven't seen in the series for quite some time. Oh and the episode also had a nice touch where they cut to a ton of the mirrors while Luffy was shouting. It gave the illusion that Luffy's words were it gave the illusion that Luffy's words were filling the entire space confronting Karakuri from every conceivable angle and leaving him with no option but to be converted and believe him. So huge props to whichever Toei employee came up with that idea because it was just great. And then Karakuri falling in complete silence was also very well done. It made the eventual thought of his gigantic body all the more impactful. From there Karakuri flat on his back was pretty much everything I was expecting a great visual and to be perfectly honest that is the one screen cap I've been waiting on to finally make a Karakuri 101 video so expect that somewhat soon. The final thing to mention is probably the return appearance of Pekoms or should I say Nazoms. No I guess it should be Pekoms because even Luffy was able to see through this disguise. Very interestingly I did not expect his color scheme to be entirely pink. I mean it does make sense because the regular color scheme of Pekoms is pink but in the manga his Nazoms disguise was jet black and generally if Oda has a particular color in mind he'll make something a shade of gray to depict it as such. Not that there's anything wrong with the outfit Pekoms still looks amazing it was just unexpected. And from the look of the preview it would seem that too long Pekoms is happening next week which I won't say too much about but I am very keen to see it. But all in all episode 871 was a fairly enjoyable watch. Plenty of filler but most of it was kind of alright. It's a huge shame about the animation and I think this episode suffers quite a bit because it is being directly compared to the last one but it had its moments so well done. If you enjoyed this video and the content this channel produces in general then please do consider donating to the Grand Line review Patreon because the support of all of your amazing people is what continues to make this channel possible. Also do check out my Teespring store if you're interested in shirts hoodies or other miscellaneous items with the proceeds going directly to support the channel as well. And if you'd like to join the fun at any time then please do head over to my discord server where a wide array of shenanigans takes place on a daily basis. And finally please do comment with your thoughts on episode 871. This has been the Grand Line review and I'll see you next time.


Look at this place, isn't it amazing? This is Kirtland Village, on the back lot of the Motion Picture Studio in Provo, Utah. This is where a lot of the church history films are produced. And I think that it's the perfect place to talk about saints. This is Saints Volume One. Maybe you've heard of it. Over 400,000 print copies have been sold and over a million people have read it electronically. It's available in 14 languages. So what are readers saying about saints? I really appreciated with Saints Volume One how the sources were all in the book. But if I wanted more information, I could go online and I could and I could dig a little deeper on the things I had more questions about. Saints Volume One, yes, it is a history book, but it does not feel like one. It feels like it's just a journal almost. It feels like it's a book that you picked up at school type thing. I love the transparency because there's so many people that want to try and drag down our faith by saying there's secrets you don't know. And the church keeps these things from you, but it's not the case. They're just things you haven't read yet. And when you see the story, the good, the bad, the ugly, you realize that they're just ordinary people trying to do extraordinary things. It was not a story that was told. It was real history and we get to be part of it. I feel like one of the characters I got to know really the best was Joseph. And just his story of progression and watching him become the prophet that he was through the mistakes he made and his learning experiences, how he was able to grow into who he needed to be to lead the church. One thing I loved about volume one was the stories of the women. They went through so much that we don't really think about it. As a woman, I could feel for them having to leave their homes when their husband was off across the world. It really was an example to me of how women were so strong in the church. And we didn't always hear about that until this book, The Saints. Chapters from volume two began appearing in church magazines in July. The chapters are also available in the church history section of the gospel library. Videos depicting some of the stories from volume two are also available in the gospel library app. So you can watch while you wait. Let's take a sneak peek at some of these incredible stories from Saints volume two. In 1843, when Joseph Smith calls Addison Pratt and Milton Hanks and Noah Rogers and Benjamin Grohan on this mission to the Pacific, it's really a landmark in the history of Latter-day Saint missions. It's by far the longest missionary journey that has been attempted in the history of the church up to this point. I was area president in the Pacific Islands from 1998 to 2001. And I went to one of those islands that Addison Pratt had been on. And this 17, 18 teenage girl gets up and talks and she's the seventh generation member of her family. I've been, I'm a descendant of pioneers. I'm the fifth generation. She was the seventh generation. They may feel like they're far off but they're part of church history too. Saints volume two also tells the story of the first temple to be built after Navu. The St. George Saints lived too far to come to Salt Lake.  We will build a temple that is smaller and scaled in Salt Lake.  So they took black volcanic rock from a bluff near the temple site and pounded it into the ground with a cannon that they had turned into a pile driver. And when that pile driver bounced three times, they knew the ground was stable enough to build the foundation on top of it. If you lived in St. George, no matter how poor you were, you gave something. We have stories of members of the church that donate $1 because that is all they had. Other people sewed together carpets, fed the workers, made clothes for the workers or just were there in support. These people were so excited for this temple. They were so excited that their prophet was here to dedicate this temple. Ever wonder how various church organizations came to be? Saints volume two also tells the story of Mary Elizabeth Horn and the founding of the Young Women's Organization. As the railroad is approaching completion, the saints have a great deal of ambivalence about it. It was kind of in some ways like we feel about the internet today, where we are excited about the technology and all of the opportunity that it opens up for learning and for connection with the world. But at the same time, we recognize the potential of this so-called information highway to bring in all kinds of influences into our homes and into our lives. This was really worrisome to Brigham Young. So he called on Mary Isabella Horn to lead what he called the retrenchment movement, this movement to ground women and what really mattered. And they needed the Young Women to be part of this movement. If you want a culture to change, you need to invite the youth. And the Young Women have a vital role in that part of changing culture. Saints tells familiar stories like missions to Europe and stories that you may have never heard before, like the women of the Utah territory being the first women in the nation to vote. It tells inspiring stories like the handcart rescue and tragic stories like the Mountain Meadows Massacre. When we come back, we'll learn why the church has written saints now and in such a unique and transparent way. Elder LeGrand Curtis Jr. is the church historian and recorder for the Church of Jesus Christ of Latter-day Saints. We asked Elder Curtis, along with a few other experts, why the church is writing this new narrative history. In the very meeting where the church was organized in April of 1830, the Lord said, there shall be a record kept among you. Saints is the story of normal people touched by the heavens. And when you think about it, that's all of our endeavor. That's all of our journey here is that we are mortal, we're normal, but we're trying to do what God wants us to do. And by seeing Joseph Smith, by seeing Emma Smith, by seeing the normal people, male and female, we can see better how we can serve God now. So in the past, our efforts to write the history of the church have relied primarily on people in administrative position. Their voices have been featured and highlighted. This effort at writing the history of the church relies more on common people, people who are unsung heroes, people who have been left out of traditional efforts to write the history of the church. Brigham Young counseled the church historians in the 1860s right in the narrative style, he said. He knew, as we all know, somewhere in us that we need stories. We need the stories of our past to give meaning to our present and to orient us in the future. So it seems clear to me, based on the wonderful reception of saints, that idea to write a narrative was the right one. I am the literary editor and lead writer on the volumes, which means that I'm the one who makes sure that the stories are structured in a pleasing way, in an engaging way, in a way that pulls readers in.  I hope that readers of saints will find themselves in the story. I hope that they are able to connect with the pioneers, with the early saints, with the people who came before us. Well, I think sometimes when we think about our history, it's really easy to focus on touchstones like Joseph and Brigham and to think about those really singular iconic figures who've become characters in our, kind of the tapestry of our history. And there's really so much more going on, even early, early, early in the church's history. Some of my favorite stories in volume two specifically came near the end of the volume. One woman who I found particularly compelling was named Lorena Larson. She is just an average everyday woman, but she dealt with the challenges that came when she had to live on the underground with a great deal of faith. But she also, she wrote in a way that was very honest and compelling, which made her a fantastic subject because I was able to use her words and her emotions to tell her story. And I think readers are going to really identify with Lorena. One of the ways that saints is different than past histories produced by the church is that it is multi-layered. So the top layer and the main layer is the narrative text. That's where most people are going to get their information. But other people we know will want to dive deeper on a particular topic. So on over 115 topics in volume one, we've written short essays that are linked to from the footnotes that help explore a particular person, place, theme in greater depth. From the beginning, we knew that saints needed to be translated broadly. And so it's in 14 languages. It's also global in the stories that it tells. It takes a team to create all of the amazing tools, topics and resources that make up the saints project. Many people have put in countless hours of researching, editing and writing. Reviewers from Harvard to Hong Kong, Brazil to Brigham City, have also contributed valuable insights to help saints reach members of a global faith. I've loved being a reviewer on saints. It's been important to me for a number of reasons. One of the things saints, the book of saints does so magnificently, I think, is take a very, very complex and deeply grounded story that's been developed through a lot of very serious scholarship. It translates very sophisticated scholarship into an engaging and accessible narrative. I received the assignment through the general primary presidency and they asked me to represent them in reading through the manuscript. As I read volume one and volume two of saints, I felt this connection to history. It encouraged me to feel like I was part of something greater than just myself. As a product manager for saints, one of my responsibilities is to take the words that have been created and written by the historians, the editors and writers, and to then work and coordinate the effort to have those words typeset, illustrated, bound and printed, recorded in audiobook format and made available to members and others who are interested in our history. I had the opportunity to host the saints podcast. On the podcast, I am able to interview historians and writers, general authorities to learn more about these topics. And it really has been just a blast for me to explore those things in a little more detail and bring it to the audience in kind of a fun and engaging way. So my role in the saints project is I'm part of the editorial team. And if you look at how the project unfolds, you start with historians and they know the stories, they know the history. And then the editorial team has two principal roles really. First, we polish it and make it as readable as possible. And then the other role is the source checking. We have to make sure that those historians and those writers have got everything right. So my job is to check the source, see if it's the best source or if there's a better version. And usually there is, usually there's a more original version from a transcription to a manuscript of a diary. And so I get the pages and I look to make sure what is written on the page in saints is actually on the page in the real source. Let's take a look at how it works. So we're going to start in the gospel library app and I'm going to click on the church history section. Then we'll go to saints volume one. And let's say that I'm reading in chapter two about the first vision. We know that saints uses all known accounts of the first vision. So I might be reading and find a new detail that I hadn't known before. So we can click on a footnote, 15 for example, to find the sources behind what is written. If I tap on Nibar journal May 24th, 1844, it takes me to an actual document on the Joseph Smith papers website.  And that provides additional context. Saints is also available as an audio book. People all over the world can listen to saints while they commute, exercise or just relax. Let's go meet the narrators. My role was I got to record the audio for the audio book myself and my friend, Hilary. We both got to record it. And so we got to see it and read through it before it was released. Every day that I got to go into the booth was a privilege and I started out the day and the session with the prayer that I would be able to bring to life the individuals and represent them in an authentic way that I could really understand who they were. And in doing so, I think I really came to love them and to appreciate their contribution. Okay, now you know the writers and have met the narrators. Let's meet the artist behind the beautiful cover art and the illustrations within the book. My role was to be the illustrator for the project. I got to do all of the cover artwork and the maps and all of the chapter heading illustrations in the volumes. The focus of this artwork was to show the global growth of the church with the temples being the anchor points along this timeline. And I thought, wouldn't it be really cool if I could somehow create a panorama of the church's history with all of the temples dotting the artwork? I think there's a certain nostalgia aspect to it. It has a certain timeless charm maybe that people can relate to. And it was really fun to boil down to the essence of a moment in church history with a single image. When we come back, Elder Quintanelle Cook of the Quorum of the Twelve Apostles will tell us why the church has written this new narrative history. Stay with us. Did you know that Utah women were the first women in the United States to vote? Did you know that the Shoshone Indians helped to build the Logan Utah Temple? Ever wonder about the challenges of polygamy both to the church and to the families living it? All of these stories and more are also included in the soon to be released Saints Volume Two. One aspect of church history that I hope all of our members around the world know about is the fact that Utah women were the first in the nation to exercise the right to vote. Why does this matter? Suffrage is an example of women being treated as full citizens and women thinking of themselves as full citizens and women taking seriously the potential they have to participate in society and make society better. Our Shoshone Chief Sagwitch is told by three men that appeared to him in his dream that there was a God among the Mormon people and that he needed to send someone to Salt Lake and they tell him what to do. Long story short, a missionary from Ogden was sent to our tribe specifically in northern current Utah. And after a couple of days of teaching them the gospel converted and baptized 102 of our people in the Bear River. Once we joined the, I mean, joined the church, they established washiki for us. I was told by my grandmother that once converted our people exercised a childlike faith. I know we were full tithe payers. We dedicated more than 1,000 hours to the building of the Logan Temple. Our people went to the temple often and did work for those who passed Bear River. When they first announced that they were practicing plural marriage, they were here in Utah, relatively isolated. And so it took a while for the controversy to build. But over the following decades, the national government passed a series of increasingly strident or punitive laws against plural marriage and began enforcing them aggressively. By 1890, when President Woodruff announced the manifesto that led to the end of plural marriage, they were faced with a very simple choice. They could continue to practice plural marriage, but if they did, they would lose the temples because the government was going to confiscate all of the church's property, including the temples. And that would stop the work of salvation for the dead. Truth is not just good things. Truth is good and bad. Truth is a knowledge of things as they are and as they were and as they are to come, the Doctrine Covenants tells us. There are things that we can learn from such awful events as the Mount Metals Massacre. One of the things that I learned in studying that subject was that when people got together in councils and relied upon the collective wisdom of the group, they often made right decisions. When they disregarded the council's decisions and went off to make individual decisions, they often made the wrong choices. Joseph Smith and subsequent church leaders have talked about zeal without knowledge as not being a virtue. And I think that in the case of the Mount Metals Massacre, we had zealous people who tried to operate under that emotional sense of zeal without stepping back and reflecting deeply on whether what they were doing was right or wrong. The church has taken a fresh look at its own history, the sweet and the bitter, the tragedies and the triumphs. And yet this new and engaging perspective has found its way into the hearts of readers around the world, both young and old alike. Well, volume two of Saints will end with the dedication of Salt Lake Temple. And I don't wanna spoil it for anybody, but it is magnificent. You think of all of the challenges that happen in that volume, starting with the Saints being expelled from Nauvoo and coming across the plains. And it ends on a wonderful high note with spiritual manifestations and rejoicing as the Salt Lake Temple after 40 years of construction is completed. I would hope that the ultimate result of it would be a deep appreciation of our ancestors and the sacrifices and the hardships they went through. And that that would empower us as a people today to face our different hardships perhaps, but nevertheless would be a blessing to us and give us strength and power to overcome the issues that face us today. The first presidency has said, remembering our shared legacy of faith, devotion and perseverance gives us perspective and strength as we face the challenges of our day. Saints is helping us remember. Volume one was released just a year ago and it's already a bestseller by any measure. Chapters from volume two are available now online and in the Ensign and Leohona magazines. If you've had questions about our church's history or if you're just looking for an incredibly engaging yet true story, watch for volume two of Saints available in early 2020. Happy reading.


Welcome back. It's still the breakfast and plus TV Africa. We apologize for that term break that we had But we have a mercy joining us right now and mercy. Good morning to you. Good morning, Justin. How you doing today? Well, I'm here now. You seem better. It is right It's it's a lot. I mean some of it we cannot even talk about but Don't talk about it We're gonna be talking sports this time around mercy Of course, we have Monday Thomas who joins the conversation this morning. I mean Monday on a Friday beautiful one Monday. It's good to have you join us Very well, so let's set up with the Champions League You remember last week when we had the conversation when I am already had actually stated that Liverpool was going to suffer and he felt like we're going Liverpool was going to suffer at the time But what do you make of that game? at the end of the day Yes Down and getting up to fight back and you will show that in the second point of five minutes But one thing another people should know that when I every prophecy came to pass and you'll both suffer and miss for 45 minutes, but you know, you're gonna call the master class in the second half You change everything and of course turning over to a scoring team as they are and they saw three goals in four Counties to progress to the final five two home and the gates So looking at the data on Wednesday at the same time about stadium I can remember when I also said I managed the city we go to make it through football is the game of Miracle and As long as you're going to do this concern the Sanctuary of all is a theater for miracles Is it theater for miracles and we'll see it happen before? Real Madrid didn't know how to produce magical moments I can remember in 2014 where I let you go Madrid thought they had won the Europa Champions League But what happened was just 50 seconds left to be played Stingy around was equalized and they get hit to extra time and don't drink where the 10 times You're for champions and winner in 2014 they all that does not test him off and now Is it a final where you're going to play in Paris 28th of May? We should expect a clock up Fire we don't need space to burn on that night and you know it's all about Reintroduction is all about revenge of the 2018 final It's a real one of that crazy final and most are actually right. They are the truth but one thing is One thing to revenge and another thing Is knowing how to revenge? so Little boy wanted to do a revenge rheometry, but in this case if you look at it as the lucky team The team where everything is working for them a team that can turn the game around in the space of two minutes So they should be careful Little boy is a side I already think to win this particular topic But if that was even we're going to take on answers this year in the final But now you're taking on creating our winners of the Europe and champions it And I think we'll just age little more to win it. Little boy we are the best in the world right now But when it comes to the Europe and champions league Real Madrid have in their DNA So looking at the fact that you know real Madrid is not just the You know club that you just walk past and of course We already know that Liverpool has it with more seller being very bullish about The revenge do you think that? Liverpool stands a chance against real Madrid Brilliant for brilliance Just great masterminds as far as your project is concerned. So it's going to be a great game It's on level terms, but when you see how Real Madrid seems to be winning the Europe champions. They saw easily how things get to fall in places for them Or do they turn them lucky, but see what works in the finals They hit Chelsea The big house into men and the big mattresses into the final Liverpool, you might say that they play relatively low teams or more teams They also have a chance But because of how real Madrid know how to play the Europe champions league, it's becoming their better and more to get their real cleaners No, but let's also quickly look at this. The fact that Chelsea Is actually anticipating for the cash win for if Roman wins the champions league against You know Liverpool and also looking at the class in Hadzad's Transfer, well, what do you really make of this scenario? Do you also see this as a prospect? So now that there's a tendency that you know Chelsea is waiting for that cash win for you already understand the dynamics that's going on with Chelsea as a club because of the Ukraine invasion of I mean Russia invasion of Ukraine and all this going on but of course you also have the transfer that's Going to happen apparently with Hazard, but that's if you have Liverpool. I mean we're at Madrid winning Liverpool at this point Okay It's just an injury It needs a player that is not really familiar with the Spanish terrain And if you can remember some three years ago when John Obiniquiel came out to say in an interview that Hazard is a league player when he comes to training But don't mean the league player on the pitch because how that every time for Chelsea He always delivered but when it comes to training, he didn't used to train more And that is actually having an effect on him now because the more you train the more you can avoid injury and Hazard in the in the transform use and in the transfer prospect for Chelsea I don't see that happening. I don't see how they're returning to Chelsea. I see you coming back to England But not for Chelsea Those are updates that you have given us on the Champions League Can you tell us more? What's the latest with the NBA playoffs? What's the latest with the NBA playoffs Oh Selfish to what will something that would be an history making Season for the Boson so as is that right now No team in the history of NBA have won both championships Thank you, Boston Celtics. If you go back in time be donated at the 60s But a lot of you will say there are a team of the past and it's good Courtesy that the Boston Celtics are becoming that team that they went from 15 years ago. It's with you, no doubt. I remember when he started the season, not in the very base of fashion, but Bolton Selfies have been able to do great and now they are in the semi-finals of the playoffs. As it stands, we know that NBA is a game of seven series, especially in the playoffs, and it's a one-one right now with the main champions, the boss. I want to give plenty of credit to you, no doubt, but I want to give credit to the players of the Bolton Selfies, shout out to Michael Smart, the defensive player of the year, and also shout out to Jason Thiel. So with the leadership of Emile Boca, we are able to improve these players to become championship-containing players, and I think the best is yet to come for the Bolton Selfies. I can see them in the Eastern players final and also in the championship final. But away from the Bolton Selfies, we have big names as well for the Finnish ones. The Finnish ones are actually leading the Douglas Marderies two games to Neal in the series. Who do they have right there? The Finnish ones have Chris Paul, who is the assist leader, and our assist leader right now for the empty game. And it's quite great to also see the likes of Emile Boca. I can remember in that final game, the person on the playoffs, Emile Boca was not available in some games, and immediately he returned, he was able to steal Finnish funds that play every final sport. And right now, beyond the verge of making it into the finals, they are leading the Douglas Marderies right now by two games to Neal. We returned to the East, where we see Miami Heads taking on to the Douglas Sixers. I can remember the 2020 final, where the Heads lost to the Lakers. The season where the Heads were supposed to win a championship. But we know the Lakers at that time, they had the likes of Kaurusho, they had the likes of Dua Alba, and of course, the Gromchains. That's how they were able to have more than the Heads. But this season, we've seen the players really getting in on the awards of the MTA this season. For example, his name is Tanya Pirol. He's the sixth man of the year in the MTA this season. They also have an Endurance player right there, or two Manjurean Decent. They don't look like these guys, obviously. I'm talking about a big toe running ball, and Vala Guirangelo. They are a complete team, with another man who is nominated for the coach of the season, Eric Polstra, also the coach of the Miami Heads. So I'm seeing the Heads being the final of the Eastern playoffs against the Boston Selfies. And just like I said, the Boston Selfies will knock them off to make it to the championship finals. But for the Russian conference, without a doubt, I see K-Songs getting to the finals. I'm getting to win the MTA, but it's the first time in a very rough ball. Well, that's the much we can take this morning on Sports Update. Thank you so much, Monty, Thomas, for being part of the show. We appreciate your time always. Appreciate you all for a fantastic weekend. You too. All right, it's still the breakfast and plus TV Africa. Away from sports, we'll be talking the profession of nursing, and it is indeed the nursing week, and let's see what they are about doing this spirit in the moment when we return.


Want to avoid traditional mental health services second story is an innovative Alternative model of support for people 18 years and up living in Santa Cruz County who are receiving mental health services Staffed 100% with people who have lived experience Staff has trained an intentional peer support who uses the respite people experiencing a Challenging time in their life for example a difficult roommate changing psych meds hearing voices depression Suicidal starting to have symptoms the respite supports people who want to move through their crisis without losing their housing employment and dignity 14 days maximum stay that is the second story respite house. You can reach us at area code<PHONE_NUMBER> Thank you


Imagine having the power to lift people out of poverty but not using it, because that's what Labor is doing.  But meanwhile, one in eight people in this country lives in poverty and one in six children in this country lives in poverty. That is an absolute shame. Labor is leaving millions behind, leaving people in poverty while giving tax cuts to politicians in this place and to billionaires. Billionaires like Clive Palmer and politicians do not need $9,000 a year while people are skipping meals in order to pay the rent. We just heard from previous speakers that they had to make tough choices in this budget. Labor's not making tough choices, they're making everyone else make tough choices because there are things that they could do right now to address the massive cost of living crisis that people are facing. We could lift income support payments above the poverty line so that in a wealthy country like ours, no one goes without. We could freeze rents which are growing six times faster than wages. We could get dental and mental health into Medicare. We could do all of those things and we could make good choices if we stop giving $313 billion in tax cuts to politicians and billionaires.


The first in this series of free reviews, Marshall-Sarlin's Stone Age Economics, considered how ancient peoples lived. In this review we consider the Harrod Leisure Class, an obscure but insightful book on time as a limit to the consumer lifestyle. Published in 1970 by economist Stefan Linder, it examines how society has become time-poor and therefore increasingly trapped in the complex rationalisations of the modern economy. They are popular at the time, its problematic arguments have fallen into relative obscurity today, as Linder says in the introduction. We have line expressed the hope that the elimination of material cares would clear the way for a broad cultural advancement. The tendency is the reverse. The cause of these and similar anomalies lies in the circumstance that has been entirely ignored, namely the increasing scarcity of time. The limited availability of time and the increasing claims made on it mean that our affluence is only partial and not total as we seem to believe. Our affluence only takes the form of access to goods, the idea of total affluence as a logical fallacy. In the 20th century economic growth had been built upon scientific management, guiding the use of workers and materials to increase productivity. This was when, in the 1920s and 1930s, the idea of the leisure society arose, that productivity would increase so much that people would need to work very few hours to have a comfortable lifestyle. Unsurprisingly, this economic utopia did not materialise. Instead, growing wealth fuelled an endless cycle of increasing consumption which, elevated to a secular cult, became an end in itself. Linder argues that as it costs more time to maintain our stuff in our lifestyle, we can earn more from working those hours, and so the pressure will be to use throwaway, cheap goods, and buy new ones. Essentially, Linder is relating the contradictions between work in the modern world and the primary reward of this work, having more stuff, as Linder says. Changes in the average maintenance per product will be determined by the sector in which productivity is increasing most rapidly. In this situation, it will pay to reduce the maintenance per product, and instead devote a corresponding amount of time to highly productive work that will offer income to replace the goods that needed service. This is the used and throwaway system. In that sense, affluence is only a losery. In a society where time poverty dominates an individual's decisions, it inevitably leads towards less culturally refined ways of living. A time poor society doesn't value the quality or the creativity of certain goods, and this has a negative feedback in terms of our quality of life. People accept poor quality, or poorly performing services, as a necessary trade-off to balance the economic pressures of daily life created by time poverty. As Linder says, The most important way consumers can reduce the time required to shop is to live at the time spent thinking about what to buy. One comes to rely increasingly on rough rules of thumb. Reduced time for reflection previous to a decision would apparently entail growing irrationality. However, since it is extremely rational to consider less and less per decision, there exists a rationale of irrationality. For rules of thumb, consider the role of branding, and how that simplification ties into decision making, yet arguably a less diverse set of consumer choices. Modern commentators always compare the lives of people today with the early industrial revolution, where 80 to 90-hour working weeks, child labour and unsafe working conditions were sanded, so why not compare conditions today to pre-industrial times? As Marshall Silings describes, in pre-agricultural societies people may have only required two to four hours of work per day to secure their material needs for life. By the medieval period, the average peasant may have worked four or five hours per day on average for their landlord, usually concentrated into three or four months of the year, but the rest of the time was still there to serve their own material needs. It is the removal of common land and the movement into urbanised communities, which created a dependency culture that necessitated the harsh working conditions of early industrialisation. They had no choice, it was work or staff. What Linda argues is that while late industrialisation may have become more economically civilised, that compulsive force organised in our lifestyle has not gone away. Instead, the modern economy drives people to irreconcilable and thus stressful decisions in order to achieve impossible ends. As Linda says, The sharp of the conflict between the decline in utility of additional income and the rise in desires to increase wellbeing, the greater the propensity there will be for increasing economic growth by all possible means. Cultural development, other than the luxury for the few, has perhaps never been more than a dream. Economic growth has become an overriding end, not a means. Linda challenges the idea that progress inevitably brings greater leisure or cultural time. Instead, to maintain a socially driven compulsion for consumption, the modern world maintains its focus on material consumption as the sole metric for progress, contrary to the idea that progress must improve society's refinement. Fifty-two years after its publication, the Harrod Ledger class is just as valuable today for its insightful critique of the myths of consumer capitalism. As the limits to growth choke economic progress, its arguments highlight how people may react to these pressures and whether the maintenance of this lifestyle will drive people to self-optimise a decline in their wellbeing to maintain that economic state, rather than abandon it for another, more culturally civilised option by refusing to comply with the growth imperative.


Good morning, everyone. Thank you for being here today. It's always great to be back in Winnipeg. Before I go any further, I want to recognize the remarkable strength and courage of this community when faced with tragedy over the last week and a half. At vigils and memorials, people have come together to mourn friends, fellow Winnipeggers, and everyone we lost on Flight 752. Yesterday, I met with families and friends who were here grieving. They told me about their loved ones, about trying to make sense of the senseless. There are no words for their pain, but they do not have to carry this grief alone. Across the country, Canadians are standing with them, shoulder to shoulder, united and strong. As I said to the team, we will continue to demand responses and to re-vend the full participation of Canada to the investigation. Here in Winnipeg, we also had good discussions on the interventions led by Canada in response to several important events around the world. Moreover, we discussed the work we do with our partners to advance international priorities. This retreat has been a chance for us to talk about our priorities for the year ahead, and at the top of our list is continuing to build an economy where everyone from every region has a real and fair chance at success. Last spring, I met Holly and Michael, students at the Manitoba Institute of Trades and Technology, just down the road from here. We talked about finding a good job and making ends meet, so things I know a lot of Canadians are thinking about. So our first order of business is a re-elected government to once again cut taxes for the middle class. When the House returns next week, we will also move forward immediately on ratifying the new NAFTA. On Monday, we will introduce a Ways and Means motion, and on Wednesday, we will table legislation to ratify the deal. Passing the new NAFTA in Parliament is our priority. Millions of Canadians depend on stable, reliable trade with our largest trading partners from farmers in Alberta and auto workers in the United States. They will also be able to make a deal with the U.S. and the U.S. and the U.S. and the U.S. and the U.S. and the U.S. and the U.S. and the U.S. and U.S. trading partners from farmers in Alberta and auto workers in Windsor to aluminum producers in Sagna and entrepreneurs in St. John's or in Vancouver. And here's what else we're going to do when we're back. We'll help people out with the bills that keep going up. We'll continue to reduce poverty by investing in our communities, and we'll make sure Canadians can afford their prescriptions and see a family doctor. Later today, we're going to have discussions about the needs and strengths of the prairies in particular, led by Jim Carr, along with Lloyd Axworthy, Jay Gruel from Manitoba-Hybro, Chris Simair of Harvest Ventures, Gary Mirasti with the Northwest Company, and Diane Gray of Centreport, Canada. Over the last few weeks, we also discussed the most pressing issue facing our country and our world, climate change. Wildfires and floods are the new normal, but they shouldn't be. So we're stepping up to the plate. Just take our pledge to reach net zero emissions by 2050 and to preserve more of Canada's land and oceans. We're taking real action to protect our environment. We're doing so in a way that grows the economy and makes life more affordable for the middle class. To the hardworking women and men in the natural resource sector, I know you are facing tough times. We hear you and we're going to keep working hard to get our resources to market. This weekend, our team discussed the Trans Mountain Pipeline Expansion Project. On Sunday, we heard from Ian Anderson and William Down with the Trans Mountain Corporation, who updated us about the status of the project and the thousands of good jobs it's already creating across the country. Linda Cody also spoke about sustainability and the importance of engagement with Indigenous communities. This project needs to be done right. That's why we will continue to engage with local communities and Indigenous peoples as we move forward. During this retreat, we also talked about keeping our communities safe. Too many lives have been lost to gun violence and Canadians are calling for change. It's more than time to strengthen gun control in Canada. This retreat gave us the opportunity to discuss reconciliation. Over the last four years, we have made significant progress to meet the gaps between Indigenous communities and non-Australians. Over the last four years, we made important progress. But we're just getting started. As I told our team, moving forward means finding common ground, listening to people's concerns and working together to build a better Canada for all Canadians. That's exactly what our government is ready to do.