This video will talk about sequences and series. A sequence can be thought of as a pattern of numbers listed in a prescribed order. So think about the sequence of events that you do. You have to do them in a certain order. So that's what we're going to deal with with our numbers. And it's a pattern of numbers which continues to do that over and over and over again. And a series is just the sum of all the terms in a sequence. A finite series is the sum of an indicated number of terms. So say I want to add up the first five terms and I would say s of five down here. So terms of a sequence, the general term is going to be a sub n. That's going to be very important. A sub n. n is going to be equal to a natural number. So when we're talking about term numbers, we're not going to talk about integers. There won't ever be a negative term number and there won't be any decimal term numbers. There are going to be natural numbers. One, two, three, four, the counting numbers. N being the number of term. So if we don't know yet how many terms we have a sub n. And then the initial terms would be a sub 1, a sub 2, a sub 3, a sub 4 all separated with commas. So then we have types of sequences. Well, we have a finite sequence which as it sounds, it has a beginning and an end first and last term. And an infinite sequence gives you a first term but it just goes on forever. So we want to find the first four terms of a sequence and then we want to find the eighth and twelfth terms. So a sub 1, the first term would be 2 times the 1 which is my term number, plus 3. So 2 plus 3 would be 5. So the first term of my sequence is 5. A sub 2 is going to be 2 times 2 plus 3 or 7. A sub 3, 2 times 3 plus 3 or 9. A sub 4, which is our last one, 2 times 4 plus 3 or it's going to give us 11. So our sequence is 5, 7, 9 and 11. So they want to know the eighth and the twelfth. So a sub 8, just like we did with all the others, 2 times 8 would be 16 plus 3 more would be 19. And a sub 12 is going to be 2 times 12 which is 24 plus 3 more which would be 27. So now we want to turn to our technology and see if it can do some of these things for us. When we do use this, we're going to have to tell it four things once we figure out how to set it up. We're going to tell it what the actual sequence is, then we're going to tell us what variable we're using and we're just going to use x. And then with the starting value or what term number that is, like the first, second, what term number I want to start with and then the last term number that I end with. It's not the value, it's the term number. So it is started. We need our calculator and we're going to compute the sequence so it says take second and then stat and then you'll notice over here we see ops. So you want to arrow over to ops and then down here at 5 we see sequence which is exactly what we want. So we put in 5 and now we're going to tell it those four things. Let's go back and use the one that we had before which was 2n plus 3 and so we put 2x plus 3 and then a comma and then we used x so we'll use say x and then comma we want to do the first four terms. So 1 and then we want to do the fourth term too, add from the first up to the fourth term and then we can close our parentheses and if we have that we have the 57911. We want to try doing the same thing with our technology but we want to talk about the first five terms of 2n. So try again, get back to your calculator, second, stat, over to ops, operations, what operation would I like to do? I'd like to have a sequence and I'm using 2x. My variable is an x comma my term 1 comma 5 and close my parentheses. So if I want to know a sub 1 through a sub 5 it's going to be 2, 4, 6, 8, 10. And if I specifically wanted to know what a sub 5 was, maybe I had just done the first four, then we're going to have the sequence is going to be 2x and our variable is going to be x but our first term number is going to be 5 and our second term number will also be 5 because we only want to know one particular. So coming back in here, proving that it's 10 because we already know it's 10. Second, stat, over to ops, choose 5, 2x. Now you can see why I picked a nice easy sequence, comma x and then comma 5, comma 5, close the parentheses, what is the fifth term? It is 10. So if you want to know the whole sequence or you just want to know a given term, you don't have any problems. Now we can also talk about a sum. We can sum up all the terms of the sequence and to do that we have one extra step and I think we talked about it on your paper and what we want to do is take the sum and then we want to have of our sequence. This we know with second op. But sum is going to be second, oh stat, sorry, second stat and then op and then 5. This is going to be second and it's also going to be stat. But we want to go all the way over to math first and choose 5. So let's try, clear all this out. Second stat, go past the ops over to math and we want the sum, 5. What do we want to sum? We want to sum the sequence, so second stat over to ops and then we want again the sequence is 5 and we're going to use our same sequence, so 2x. And again it has the same variable of x. And we want to sum up the first 5 terms, so we want to start with the first term and we want to end with the last term or the fifth term. And then we press enter and we find out that is 30. We can verify that it's 30 over here. 2 plus 4 would be 6, 6 plus 6 would be 12, 12 plus 8 would be 20 and 10 more would be 30. So we really did find that s sub 5 was equal to 30. All right, sometimes we have these recursive sequences which these sequences rely on the term before it.  So we want to find the first four terms. Well a sub 1 obviously is negative 2.  So that in reality is negative 2 minus 16 or negative 18. So a sub 3 is going to be a sub 3 minus 1 which is really a sub 2 minus 16. So again, a sub 2 was negative 18 and we want to subtract 16 from that. And we're going to have a negative 34 and our last term is going to be a sub 4 minus 1 which is really just a sub 3 minus 16. And a sub 3 was negative 34 and a sub 4 we're going to subtract 16 from that. And if we do that, we end up with 50. So our sequence would be negative 2, negative 18, negative 34, negative 50. Okay, here's a new idea for us. It's a factorial. Some factorials are just the product of the number and every number before it. Just the natural numbers. So 3 times 2 times 1 would be 3 factorial and if you multiply all that, you get 6. So we want to write the first four terms of this sequence where we're going to use our calculator. We have a sub 1 is going to be 1 factorial over 1 plus 3 factorial. Or it's going to be 1 factorial over 4 factorial. And we're just going to let the calculator do that. And to do that, we need to come over to our calculator, hit math. And get some new things in here, go all the way over to prb. I'm not sure what that stands for. But you see 4 right here has that exclamation point. So we can say that now we can go back to our home screen and start putting it in 1 math over to prob, perb, whatever that is, number 4. So 1 factorial divided by 4 factorial. And these are actually simple enough that we probably could just do them by hand. But if we do 1 factorial divided by 4 factorial, we get this number and I want to see if I can make it a fraction. So just press enter and enter. And it's equal to 1 over 24. 1 factorial is just going to be 1. And 4 factorial is going to be 4 times 3 times 2 times 1. 4 times 3 is 12, times 2 is 24, times 1 is 24. The second term is going to be a sub 2 is going to be 2 factorial over 2 plus 3 or 5 factorial. Well, we can simplify by saying that this is 2 factorial. And if I start with seeing the 5, I got 5 times 4 times 3 times, well, 2 factorial is 2 times 1. So the 2 factorial and the 2 factorial cancel and I have a 1 up here. Maybe I should have done that with a different color. Those cancel to give me 1 up here. So I really just have 1 over 4 times 5 would be 20 times 3 would be 60. So we can do them either way. Let's go with for a sub 3. That's going to be 3 factorial over 3 plus 3 or 6 factorial. And we would like to make this as simple as possible. So 3 factorial over 6 times 5 times 4 times 3 factorial.  And then I have this. So 6 times 5 would be 30 times 4 would be 120. And then if I do a sub 4, I'm going to have 4 factorial over 4 plus 3, which would be 7 factorial. And I have on the bottom 7 times 6 times 5 and then 4 factorial cancels. So this is equal to 7 times 6 is 42. And I'm not sure what that is 42 times 5. I could have done it quicker, but it's 210. So we have 1 because the 4 factorials cancel each other out 210. So what is our sequence then? Our sequence is 1 over 24 and 1 over 60 and 1 over 120 and 1 over 210. All right, summation notation. When the general term is the sequence is known, then a summation notation can be used to write the related series in a formula. So we have this nice looking summation. It's a sigma and then we have i is equal to 1 and 2k. So this is telling us that we want to sum from the first term to the k term. First k term, even though it may not be th. And our sequence is obviously a sub n. These letters, this i down here could be j, k, l, and those are the ones that are usually used. And we're just going to go the simple route here. Given a sub n, we want to write the sigma notation for s of 6. This means we want to sum the first six terms. So that means that we're going to have our sigma. And we're going to start with 1 because it said the first six terms. And on top, we're going to have 6 because that tells me the last term that I want to include. And we actually just write 2n minus 1. This a sub n is our formula. So now that it says we went to expand and then verify using our calculator. So we just need to plug and chug, basically. So we are summing here. So the first term would be 2 times 1, which is 2 minus 3, or negative 1. And then if we put 2 in here, we have 2 times 4 minus 3 would be 1. And if we put 3 in here, we have 2 times 3, which is 6 minus 3, which would be plus 3. And if we put 4 in here, we're going to have 5. And then we have, if we put 5 in here, 2 times 5 is 10 minus 3 is going to be plus 7. And if we sum all that up, 1 plus negative 1 is going to cancel each other out. This gives me 10 plus 5, so I have that is equal to 15. And if we come back and practicing our technology again, second stat, all we care about is the sum. So that means we have to go all the way over to math and choose sum. And then I have to tell it the sequence. So second math over to op, 5. And my sequence is 2x minus 3. And then I use the variable x. And I want to go from the first term to the fifth term. It's going to come out right there. So I can insert that. And now I have my, I can come down here to the bend and close my parentheses because I've got it all in there. And it tells me it's 15. And finally, we want to use, write using segment notation. Now we have to find the formula. So what are we doing? It looks like we have, we start with 5, and then we added 5. And we add 5 every time. So we could say, okay, how about we take 5 times n. Isn't this difference, sound like slope? Difference is 5, and we started with 5. Now we have to double check it though because if we just have n here, if I use 1, I'm going to have 10 instead of 5. So it would be better if we came in here and said, okay, I really need to have 1 less because if I have 1 less, now I will have 1 minus 1, which is 0. And 5 plus 0 is 5. So summation, we're going to go from the first term and count how many there are, 1, 2, 3, 4, 5, 6 terms. And we want to simplify this just a little bit because we don't want a whole bunch in here. So 5n minus 5 and negative 5 and the positive 5 cancel out. So we just have the summation of 1 to 6 of 5n.


This bounces an end zone for the boys, don't it? Nope, it stops right there, doesn't it? Nice. I'm gonna get a safety. I'm ready to play Apex right now. I really am, without a doubt.  Playing Apex Customs tonight. The Apex Customs has been, have been popping the last two nights, they've been lit. We've had pros, we've had Joes. We've had everybody that plays Apex in the community rocking. We have, if you guys look, we already have a leaderboard popping for the wins.  Once you get a certain number of wins, you'll get cashed out with a handy from the back from Maddie. An updated circumstance happened today is that Carl cut Ward from his team. He went behind Ward's back and cut Ward for Justin from the chat. So, oh, that was almost dirty. Oh my God. Is that what the chat's deciding? That Carl's not calm? It's tough for the chat to decide that.   How is that? I feel like that was just, wow. You got Hertz? Yo, I can't lie. Skomo sent me like the year after Hertz rookie year. Skomo sent me all these Jalen Hertz rookies. I don't know what they're worth, but I gotta find them. He sent me like a gold one, a blue one, a red one. He was like, yeah, there's some Jalen Hertz in there. He's not gonna be good. Ha, ha, ha.  No, I'm just covering for us. Just the angles. You guys gotta understand it's about the angles, man. It's about the angles.  My girls, are they real? The dudes were so...   Like, bro, the whole team was over there, dawg. Oh my God.  I didn't think he'd run. I don't think I would run on fourth and goal. Third and goal, fourth and goal would be big nuts, but I guess after that last play, what do you expect him to do? He's not gonna try to pass into that again. He has quick one.  It's like quarters, but it's like not quarters.  Dog, I, like, how are we not blocking it? Dog, it's like, how are we not blocking this one-footed person here, dude? We gotta get rid of them all fast, this son of a gun. Of course, why would they not let the whole team free? Right. Game, dude. Oh my God. Big sack.   There's just no way. We got a 20-yard cloud zone and we got man coverage and just nowhere to be found. I swear to God, the worst thing is somebody to back up to the 20-yard line. If they're at the eight-yard line or the five-yard line, they have no shot to score. But as soon as they back up to the fucking, like, back up to, like, 20, 18, 20-yard line, it's like, I don't know what defense to play at the 20-yard line. Just matching perfectly, aren't they? Okay, that's good.  I can't. It's getting so much pressure on me. Come on. He's rushing three people. Come on, boys. Wow, what are these guys for y'all? Dude, I don't know who's supposed to be. Like, dude's getting cross, man, from the left side to the right side, like, just nasty right now. This guy's a known stream sniper.  We got to get through that.  Come on! Just the easiest touchdown of my life right there. And we're, like, getting shetted by three people. We really don't, like, this is definitely show go right here. Matter of fact, now you call it time to kick in the field. What do we think about the new Barbie? There's just no way that was, like, close to it. Just swat. Just swat. And one of you guys got to get to the ball. You don't raise your boots. Let's go, CJ. Man, how do you quick snap that? Play this, do this. Dog, come on. Give this man intentional grounding one time for the boys, please. There's just no way. There's no way that, dog. Dog, how are we nowhere to be found? How is that the best blocking of all time? Dog, there's just no way, dude.  And we're getting onside kicked in July, dude. Dude, grow some nuts. And of course, he gets it. Why wouldn't he just onside kick perfectly? This is insanity, man. Dog, dog, how are we, like, losing content? Dog, how are they just let him get away with throwing his throw away? Dude, we have to stop this run better right now. We really do. Like, dog, how are we this, like, this is the best inside zone I've ever seen? Dog, there's no way I got to under pressure. Is that a real, like, dog? There's just no way we got to under pressure.  The worst part about Earl is that there's people that have to listen to him in real life every day. Dog, where did this arm come out?  There is no rhyme or reason why quarters works. There's just zero, none. Let's go. I get mine back, game. Come on, here we go. Little bit of love for those that watch. Oh yeah, that's a good one. Oh my God. All right, we know how we want to stop this here.  That was good defense. I set up for the quick will. I set up my entire defense for that quick will pass play. When it bounced, oh man, I didn't bounce. Our 44 seconds to timeouts is plenty, dude. I'm honestly so over the match that I'm going to motion over every play. I really am. You know, I'm just so over this. We will take this 10 yards up and down the field easily. We're going to run straight zone. This could be man, though, the way he just, he's in 35 for the first time now. That's a bad play. It's not worth, not worth. I mean, that was just like bad. Like, I got to be able to get that ball off and like get some yards there. Like, that was the worst. Man, this zone's on the line right now. Ah. No way we, oh my God. How do we not break that tackle with him? And I swear someone got all the pressure in the world on me right now. I thought he'd break that tackle glowing and somehow I caught the ball to two steps and still knocked it up. I swear somebody got pressure on me. Like two people. I can't even see it. Cause this game sucks, dude.   Why don't we have this feature when two replays work the whole time? Highlights, highlights. But you know the rules, boys. Lunch lady, lunch lady, lunch lady. Carl cut ward, Carl cut ward. Carl blamed ward, Carl blamed ward. It's ward bad, it's ward bad. It's ward bad, ward bad, ward good. Ward, shoot, straight. Ward, ward, ward. I don't think this guy like, bro. If we can hit 2K before madden. Absolutely. Dog, this three man rush is giving me way too much problems. Look at the, like dog, it's nasty.  They're so good, these ones. Vic actually got out of there. Vic got out of there on a scramble. Pick, pick. Bro, he caught that with the knockout? Did you all see that? There's just no way. Where's the, that's deep zone. Oh, there's no way, like, man. Come on with the onsite kicks. This is so corny, man. It really is, like beyond corny. Like, come on, dude, just play mad. Dog, like, there's no way y'all getting this much pressure on me right now. Come on, boys. Stop letting him throw that. Dog, like, where is he even throwing the ball? The defense, boys, good defense. Good defense, boys, good defense. God, we're getting baggy. AJ! We are surgical. Surgical. Love a neck plate. Oh, end the game right there. That's the whole game is ended. Could be another one. We're just flirting with danger right now. Bro, there's, like, no way.  There's just no way. That ice is just real football right now. This bounces an end zone for the boys, don't it? Nope, it stops right there, doesn't it? Nice. I'm gonna get a safety. I'm ready to play Apex right now. I really am, without a doubt.  Yo, we drop the pick from the D-Line and drops the pick to make it 28 to seven. Literally makes it 28 to seven right there. And here we are now, because Chad Johnson wants to go right here like a f***ing pot. This is just great right here.  The thing is, I don't want to fill the ball in the 10-yard line. I want it to bounce into the end zone. So I take the chance that it's gonna bounce into the end zone, right? Because that'll save me two seconds. I have 13 seconds on all my timeouts. That could be two plays. If I run the ball out and it's 10 seconds, that's only one play then. So I want the ball to go into the end zone, but I get unlucky and it doesn't go into end zone. Literally the only player on the field is on a streak. Everybody else is on a slant.  It really is. Dog, how in the world are these like dog? There's just no f***ing way, dude. That people are just, and look, now we're losing. Just like that. We go from a pick six to end the f***ing game. Now we're losing. Nice, dude.  All we gotta do is catch that one pick. We catch that one pick. He's f***ing cooked. Another one, chatters. Do y'all see it? Do you see it?  Please, somebody. Somebody, please, thank you. Please, Jesus, thank you. Just let him hold the ball a little bit. He's gonna make a mistake. The best pass, honestly. Ladies, I'm telling you, they're just, they're lost looking for plays and they're looking for s***. Absolutely f***ing lost, dude. Good job, God, that's so high-powered. My defense is toxic. Just playing man coverage and putting zones and mixing it up and blitzing. I feel like I was just moving the ball around. Dude, I almost lost where Twitter was because this is a giant X.


And this relates to our talk about the construct, the self-concept, that everything it's identified with externally is part of that construct, personhood, world, country, sexuality, male, female and skills, attributes, on and on and on. And it's just like even my idea of God is just part of a construct. Yes, the deceived mind has a projected God. You know, it can be a God of the Old Testament, for instance, where anthropomorphic, given human qualities, of being angry at times, being punitive at times, being loving at other times. This is a projected God, a God of the future even. God will come and someday will save mankind, you know. It's like a hologram. It's like the mind has a hologram of time and space around it to protect it from love. And it has to give up the investment and the belief in the hologram before it can spring into the awareness. So it has to give up even its belief in God. Belief in a projected God, yes. And that is the belief that the mind holds, is the belief in a projected God. So part of the undoing and unlearning is giving up belief in God as the deceived mind holds it. Yes, this can sound on the surface like we're getting into blasphemy. What?  A passage will quickly jump to page 350 in the workbook and read the first sentence, which says, Simply do this, be still and lay aside all thoughts of what you are and what God is. There it is. Very clearly stated in the Course of Miracles of giving up all, laying aside all thoughts of what you are and what God is. And this section about emptying your mind of everything it thinks is either true or false or good or bad, of every thought it judges worthy, and of all ideas of which it is ashamed. Hold on to nothing. This relates to our passage that we're reading on everything you recognize you identify with externals, something outside itself. There is nothing outside the Son of God. There is nothing else that God and creation and the Son's creations, in a sense of abstract light and infinity, are truth or have existence and nothing else does. So this kind of rules out the cosmos. The body cannot know, and while you limit your awareness to its tiny senses, you will not see the grandeur that surrounds you. God cannot come into a body, nor can you join him there. So this rules out the immortality of the body as an idea. Limits on love will always seem to shut him out and keep you apart from him. The body is a tiny fence around a little part of a glorious and complete idea. It draws a circle, infinitely small, around a very little segment of heaven, splintered from the hole, proclaiming that within it is your kingdom, where God cannot enter. And then as we close this reading from the Course, we can jump to the next page, page 365.  In the beginning of the next paragraph, love knows no bodies and reaches to everything created like itself. Its total lack of limit is its meaning. So this really paints a picture for us of the abstractness of the infinite nature of love and of God. And really lays it out that there is no reconciliation between the body and the world and God.  But these are temporal, fleeting, changing, and in the sense, in the ultimate sense, therefore have no existence. Because what God created is eternal and changeless, limitless. And only what God created exists. Yes. So you made some reference to the creations of the Son of God. Let's talk about my creations. It comes up repeatedly in the Course, and I notice it's always seemed pretty vague to me. And I guess it would, because the creations are abstract. Yes. And the creations are not known to the deceived mind. It's only when the deceived mind is no longer deceived that the creations will be recognized, will be experienced. An awake mind that knows what creation is and knows what creativity is aware of, that which has come from its extension. And creativity has nothing to do with what might be thought of as creativity in terms of a very creative, artistic, imaginative mind that expresses itself. Creativity has absolutely nothing to do with imagination. In a sense, one could even say that the Course of Miracles is a very creative expression. Pages and pages and pages of Iambic pentameter, Shakespearean blank verse, very poetic verses and so forth. And in the sense of something being very expressive of something much higher, this is often the sense of creativity in this world. Creation and true creativity have nothing at all to do with this world. There's nothing at all to do with the symbols and the forms and images of the world. That's imagination. Creation involves extension, which is another word. In a sense, spirit, begetting spirit, there is increase involved, but it's not a quantifiable increase. In this world, one, two, three, four and more is in a quantifiable sense. But we read about increase. The Kingdom of Heaven and God and His creations are always increasing. Do you have a sense of what that means if it doesn't mean quantifiable? What is that? Well, once again, this is expansive. You could talk about expansive and yet without in a size orientation. I mean, how it's difficult to conceptualize that. But that's precisely the point is that when we speak in words of concepts and try to convey it, revelation is not transferable in terms of words. Revelation is an experience. It's beyond concepts. Creation, creativity in the sense we're speaking of, is able to be experienced, but it is not transferable in the conceptual sense. It can't be transferred through words, but it's a highly personal experience, as the Course tells us in the early part of the text. So to even attempt to explain these things is a sense missing the mark. To explain the creations? Yes, to explain the creations. We have been told that Jesus kind of takes a theoretical stab at it in the sense of explaining it in the text of there being extensions. We can talk about cause and effect of God being the cause and God's creation, Christ being an effect, His effect. And in this sense, this would be like a metaphor or a repetition of that in the sense that the Son has creative ability. And the Son is a co-creator in that sense with having the power of God and having the ability to extend that. That's what creation is to extend, to increase. So the creations are the effect of the Son of God. What comes through to me when I read in various places in the Course about my creations is that there's much joy associated with my creations. Even though it seems at this point I'm not recognizing what those creations are and I can't talk about them. But they do exist and there's much joy associated with my creations. In the sense, the creations exist in the ultimate sense and the veil within the framework of the dream, the veil is drawn between the creations, my creations and my awareness of my creations. In a sense, when the veil is lifted, there is a full awareness or it's just a state of being one with my creations. Do you think there are things in the world that are in some way reflect my creations? Well, the things in the world are part of the veil that literally block the awareness of the creations. In other words, the deceived mind projects out separate things that are seen as separate and apart from the fabric, trees, caterpillars, birds, butterflies, bears, rainbows, bodies. This is the veil that's being seen, this is perception. The creations are part of an experience of a union that literally, when the veil is lifted, are experienced. In that sense, there are no things in this world that are reflections, but there is a way of looking upon the world that is a reflection. If we said that there were specifics like butterflies are reflections of my creations or of God or heaven, we get back into some of the seeing God in specifics in the world, which God knows not form. There are two lessons in the Course. God is in everything I see, followed by God is in everything I see because God is in my mind. In this sense, we're talking about a way of looking or a vision of the Holy Spirit not ordering the world into a hierarchy of illusions, but with that vision seeing the false is false, seeing, instead of separate objects, but just literally a mosaic or a blanket of forgiveness covering all of the seeming perceived separate objects in the world. Or to get to our discussion of the ending of the duality of subject and object that literally from that state of unity, which the Holy Spirit is, or true perception, then the, in a sense, there's the reflection. That is a reflection of love. Still involves perception, so it's not love itself, but it's the reflection or a new purpose given to the projected world. It's kind of an experience of that unity and that oneness can be said to be a reflection. Yes. Just as the unity or oneness that, in a sense, comes through in the Holy Relationship can be said to be a reflection of the oneness, the only oneness that there is. Yes. The Holy Relationship in this world is a learning accomplishment and it's literally unlearning the false ideas and beliefs and learning true perception. And in that sense, it's a reflection of unity, it's a reflection of oneness, but in the ultimate sense, a union or oneness is abstract, is knowledge or heaven. So any time we speak of the perceptual realm, we can speak of the reflection of love or the reflection of... We're always somewhat removed from the whole realm of revelation when we're talking about anything that has a perceptual component in it, is what you're saying. Yeah. Knowledge, I mean...


The Navy released a NAV admin February 1st, announcing the automation of special circumstance fleet ride performed to serve applications for sailors who will have less than 24 months of obligated service remaining at their projected rotation date or PRD. Sailors with more than two years of obligated service remaining at their next rotation date do not require a fleet ride PTS approval to negotiate orders. Sailors will receive up to three looks in fleet ride PTS, 12, 11 and 10 months prior to their PRD. Sailors who receive a special circumstance quota will be able to relist for up to six years to cover any obligated service for the next set of orders. We're on a steady drumbeat to automate fleet ride system. Today there's many manual applications that you have to go through. Two years ago we automated the most comprehensive part of fleet ride which was if you had come up on your end of obligated, end of active obligated service, your EAOS. So that is the most circumstances under which a sailor needs to be in PTS and get a quota. So we automated that. Now we've done the other large chunk which is the special circumstance for PRD. So we keep trying to make the fleet ride system more usable for the sailors, listen to the fleet, see what they need. We've now automated the vast majority of it and we'll continue to try to make it easier for the sailors as we can. If a sailor does not receive a quota, detailers will be able to make a determination sooner if the sailor will remain at their current command or be issued orders keeping with sea shore flow. The changes will take effect February 4th of this year. For more information see NAVADMIN 021 slash 13. From the Defense Media Activity, I'm Petty Officer James Stollepack.


Hi everyone. Welcome to our talk. Thanks for attending. My name is Karim Lakhani, and today we'll be talking about Kubernetes on a budget, how to get paper use right. So as I mentioned, I'm Karim Lakhani. I'm a senior staff software engineer at Intuit, and I'm here with Vasuki Prasad, who's a staff engineer. So our agenda for today will be discussing our contacts, our Intuit API gateway, and our journey into cloud-native technologies. We'll be discussing our cost overruns as we migrated our workloads in pre-production, and then our challenges, learnings, and solutions. And finally, we'll close with our takeaways. So Intuit is a fintech company that operates on a large scale. As you can see, we have over one million active cores, over 28,000 namespaces, over 25,000 services, and over 300 Kubernetes clusters. And we specifically work on the Intuit API gateway. So what is our Intuit API gateway? It's the front door for all the requests that come into Intuit. And a lot of service-to-service communication also goes through the Intuit API gateway. So our service mesh journey started about three years ago, but even before that, we started our microservices journey. And so the Intuit API gateway was used for service-to-service, and it continues to be used for a lot of service-to-service communication. So what does the Intuit API gateway provide? It provides routing, security in the form of authentication and authorization of both the application and the user. It produces metrics that are used to feed our golden signals, which provides availability error rates for all the services behind API gateway, as well as it provides detailed access logging of all the requests and responses flowing through our system. And finally, it provides quality of service features, including rate limiting and traffic dialing. And a few benefits and stats of our gateway. It's highly scalable. At peak, we handle over 30 billion requests per day, over 1 million requests per second. And our infrastructure is about 30-plus clusters and 250-plus namespaces. It's highly available with four nines of availability, highly reliable. It has to be trusted. It has to be up all the time. It has to provide correct metrics. It's low latency. We target 30 milliseconds of overhead at the P99. And it has deep self-service capabilities. It's integrated into our developer portal. And so onboarding, configuration management is all self-service. We're supporting over 2,000 developers using our API gateway at Intuit. So our Intuit API gateway was built in-house. I want to discuss quickly why. So our journey started about 11 years ago into a data center before a lot of the cloud-native technologies even existed. And we wanted to move towards microservices from a monolithic architecture. And so we needed an API gateway, and we decided to build one. Really, the value we saw was building in something that we could customize for our needs over the next decade. And that's what we've done. Our approach is very similar to Netflix Zool 2 and AWS API gateway. It uses non-blocking asynchronous communications using Jetty. It's written in Java. And one of the key features of this partitioning is built in as a first-class feature, meaning that different API gateway workloads serve different services. And that way we're able to keep workloads separated between QuickBooks, TurboTax, Mint, MailChimp, and such. It also has more relaxed quotas compared to the AWS API gateway, such as longer timeouts are allowed, longer bigger payloads. And so we started in the data center. We did a lift and shift into AWS. And then we discussed whether moving to Kubernetes and cloud-native technologies made sense. So why migrate to cloud-native technologies? The first thing was Istio. We, as I mentioned, started Service Mesh journey about three years ago and wanted to integrate with that, improve our security, reliability, and observability by integrating with Istio. And as a project of that, we released Admiral, which is our multi-cluster Service Mesh solution. We wanted to reduce NAID data transfer costs, and we also wanted to improve the client-developer experience by abstracting away whether they're going through a Service Mesh endpoint or going to an API gateway endpoint with Service Mesh, with API gateway coming into the Service Mesh that could be made transparent. The next thing is observability. We had metrics and logging in our old API gateway, but we had some gaps. It was difficult to add new metrics. And we had custom solutions, custom technologies, and it caused overhead in our deployment. So we saw opportunities there to improve using Prometheus and other cloud-native technologies, as well as our structure of our system made cost analytics very challenging. So we saw an opportunity there with cluster namespace partitioning to improve our cost analytics, as well as using some of the platform tools that were built around this. And so finally, we wanted to utilize our Intuit's modern SaaS platform, which is something that over the last few years has been built up to support a lot of new services at Intuit and a lot of existing services. We wanted to take advantage of Argo CD, Argo Rollouts, Argo workflows, Istio Service Mesh, our Intuit Service Mesh, Prometheus, and phase out these legacy tools and deployment scripts that were causing us, like, headaches every week. And at Intuit, we believe deeply in open source and open collaboration, where the recipient of the end user award in 2019 and 2022. And we have a few open source projects, including Argo, NumaFlow, Admiral, and as well where the end user of many cloud-native technologies, of course, Kubernetes, as well as Istio, Envoy, Prometheus. And here's a link for our open source community in LinkedIn. So after migrating to cloud-native technologies, what did our architecture look like? It starts with our applications, our mobile apps, web apps, our users. They're calling Intuit APIs through the Intuit API gateway, which is now running in Kubernetes with Istio enabled. So one cluster might be serving 500 different services. And then we use Admiral to have data for all the cross-cluster communication, all the different clusters that API gateway needs to send requests to. So with that configuration, API gateway is able to forward the request to the appropriate service, which is going to be in a different cluster, maybe in a different region. And then those services are able to talk to each other through the service mesh. And a little bit deeper dive into that. So we have our control plane, which is Istio-based. We have Argo, Admiral, and a certificate management system. And then we have our data plane. The requests come in either through the public load balancer or through the Istio Ingress gateway. That's for our network abstraction. They come into our Istio proxy, which has a MTLS or a TLS termination, goes to our Intuit API gateway container, which does all the routing, traffic management, throttling, authentication, and such. And then through Istio proxy, it goes out to the target service, whichever that is. And again, we have over 2,000 such services that we send requests to. And then we have this MTLS sidecar, which is getting updated certs every hour to do the MTLS. So with this, we improved our security, our observability, and our... So now I want to talk about what we're here for, our cloud-native cost optimization journey. So as we started migrating to correlative technologies and pre-prod, we actually realized that our costs were going to be 2x over what we planned it to be. So that was a moment of an emergency, and we had to figure out what was going on. And so we embarked on an analysis, investigating all the different things that are part of our architecture, where we can optimize the cost, how we can bring it down to what we thought it would be and what it was in our AWS workload. And so as a result, we actually found several areas of improvement, which Vesuki will be going into. And by implementing these changes, we actually reduced our expenditure by 50%, bringing us in line with our expectations. Now I want to talk about how we discovered the cost overruns. It's very important to have the tools and observability to understand the cost, analyze the cost. So it's very important to have month-over-month metrics, week-over-week metrics, and daily cost metrics as well on the cost, as well as if you can have metrics on how different services contribute to the total cost. That's really helpful to understand when costs go up, why is it, and how to address it. Without these, you're basically flying blind. And then we also have further detailed analysis, breaking down at the cluster level, namespace level, environment level, business unit level, and service level. So we fortunately had these tools to be able to understand our cost. And so that helped us a lot to bring the cost down. And then the second part of it is combining the cost metrics with the usage metrics. With our API gateway, we don't control the number of requests coming through the system. They're coming from browsers, web apps. And so the more requests that come, the more it costs. And so just because the cost goes up doesn't mean we're doing a worse job. So it's important to also correlate the cost metrics to the usage metrics to understand that how much does it cost per some number, like some, for us, per million requests. What is that cost? So that's the number that we can optimize. And then to understand how much it costs as well, you want to see how many nodes did you have, how much pods do you have, how many pods are you running per node, how much idle do you have on the nodes, as well as the CPU memory usage of each container on the pod, and establishing those baselines for what's expected. So when it goes up, you're able to address it right away. So these are the results in our pre-prod account, our largest pre-prod workload. So starting off, our baseline cost was around $45,000, which is not shown here because it was in a different account, but it was around $45,000. And as we migrated, the cost started going up. And then we saw that our total cost in that month was 2x over what we expected, so it was not acceptable. And then so we started investigating, applying optimizations, and then the next month we got it down 50%. And then since then, it stayed pretty stable. And again, the cost fluctuates based on the workload that we're getting, but it's been pretty stable since then. So with that, I'm going to turn it over to Vasuki who's going to be discussing more details on what we found and how we fixed it. Thank you, Karim. So while we were in this journey, definitely one of the areas was the cost that we saw that had to be looked in immediately. And some of the areas of opportunities that we found were where are we going wrong and how can we actually account for it? So the biggest was the compute. While I'm saying compute, there are many aspects of compute that how you auto-scale, how is your node utilization, what is your pod density. And we also incurred a new cost, which was the data transfer cost because, which I'll touch upon why that new cost it came to us. While we adopted our latest platform, we also increased on our monitoring cost and also the developer infrastructure cost. That was also additional thing that we had during this whole migration. So moving on, let's first deep dive onto the compute and we'll touch the auto-scaling. So what is auto-scaling? I mean, if there is a demand that is created by your application, the pods will get scheduled, they are impending, the auto-scaler will take that request, it will create that capacity for you, the nodes will get scheduled, and the pods will get the resources that it needs and it will start getting scheduled. So this is a life cycle of the cluster, we'll get that auto-scaling in place and this is a typical scenario for any cluster you can take. But some of the challenges that we had in terms of auto-scaling was, since API Gateway to support that large scale of request, we had to solve for how do we account for rapid scaling or instant surges. The simple HPS that we had configured was never working the way we wanted it to work. Either we were over-scaling or we were too under-scaling, we always ended up having issues and always had FCI's with that. So CPU was too oscillating with simple HPS. We had to run more higher minimums just to accommodate certain surges that we used to get. This itself was too much. Running higher minimums, that means you're adding more cost to your infrastructure. So we wanted to make sure that we solve this in a way that we can optimize this whole usage. Before we touch upon the solutions, I would say for any service, first we should know what metric that we need to be scaling or it could be CPU memory, request, connections, or any custom metric that you want to derive. That should be the key indicator for your service before we start scaling. In our case, CPU was the one that was the bottleneck and we had to look at how do we optimize that. So knowing your target CPU means at what is the range in which you can operate your application in the most optimal way is what you need to look at. So knowing your target CPU is very crucial and how you can autoscale. Aggressive scaling you should avoid it because that has a lot of other cascading effects for your infrastructure which can have impact on your monitoring. It will increase your cardinality. That leads to additional cost. So avoid aggressive scaling. So some of the techniques that we used was step scaling which gave us an option to do gradually ramp ups and ramp downs. And also we established a pattern called overcapacity pattern which helped to accommodate surges. So I'll touch upon what is the step scaling. So if you look at this step scaling, we overwrote the behavior of our HPA to say that I want to do it in the most gradual fashion. So in our case, the most sweet spot was between 40 and 60 percent.  We are trying to maintain our state to make sure that we are under that operating at that target state. And it was a very fine grained controlled approach. We did a lot of iteration to get this number so that we don't have any capacity issues or even we are scaling. We are not overscaling for any within this range. Next topic that I want to touch is what is overcapacity pattern? So just an example that in your cluster, say you have an application namespace and you have set of shared nodes application running at scale. So with the overcapacity pattern, what we do is we create an addition, one more namespace called overcapacity and we deploy a low priority pods in that particular shared nodes, which is the same shared nodes that an application would share. If you look at here, I have only one pod in that shared node. That means you should, the way we need to schedule that pod is it should take the entire resource of that node so that only one pod is running in that shared node. And to set a low priority pod, you can update the priority class for your pod to the least level so that it has the least priority for the scheduler. Say for example, I have an auto scaling event that happened. Now application, there was a surge. I started getting, the HPA started triggering and I got a lot of pending pods on my application. Now the scheduler is looking for a resource. In an idle scenario, if you do not have an overcapacity, that means it will go to the cluster auto scaler, it will request for more nodes and it has to wait. And this wait period is what was always impacting us because we were oscillating that CPU. So with overcapacity, what happens in this case is the scheduler will evade that low priority pod which is already sitting on your shared node and it will make space for the spending pods. All the spending pods gets that instance capacity. That means the amount of time that you took to get to accommodate that surge was instant and we were able to add that capacity on this. So if you look at this, now that application got the capacity that it needs. Now those low priority pods, which were in the pending states, the scheduler will spin up additional shared nodes for it and they will also get scheduled. So that means that pods, that overcapacity that you are running for your service is always available for you in the entire lifecycle of your application so that you are giving that instance capacity for it. So this was our before state, before we implemented step scaling and overcapacity. If you look at the first CPU, where is our HPA matrix, the CPS2 oscillating. The big block that you're seeing was the cause of not getting that instance capacity and that is the reason our HPA requested more and more compute on pods so that it was never actually needed. So if you see the second paragraph where it is desired over the ready pods, the amount of time it took to even get to a state that it had to operate, that point of time we started seeing issues. We are not scaling for the demand. And if you look at the third graph, we were still in the ramp up stage but if you look at our HPA graph, the number of pods started to drop off. So that was a clear indication that we were overscaling too much because we were not able to control our target at the state that we wanted to operate. And after we implemented this change, so if you look at the first graph where we were talking about the HPA, for that initial surge, we never overscaled because that overcapacity was what it was protecting us. Our desired and the ready state was maintaining and the delta was minimal and we never went ahead. We didn't miss the target state and we were staying on the target. And if we look at the whole ramp up of a request, we stayed in the steady state while our demand was met. So what we really saved by doing this? So it was a big saving. It was a 25% on our compute saving cost just improving how we were scaling our services. This 25% in the larger scale when we are multi-tenant, this 25% is a big amount that we saved as a part of just improving how we scaled and accommodated for the surges that we got. So moving on within the same compute area, one of the things we had as underutilized nodes. I'll touch upon this. Cold and idle worker nodes. So say in your cluster, you have an application namespace and you are running all your workload on the shared nodes and it is running operating at scale. Good, this is fine. Now there is a scaled-down activity that happened and the number of nodes that upwards that it had to operate it will start going down. Now this is the state that we stayed in. So if you look at this, the target state, in reality, we really scaled down the pods but the nodes continued to stay. We were not taking off the nodes at all. They were sitting idle and cold and the amount of time for it to get was taking to rebalance was anywhere between 10 to 12 hours or sometimes even given the days. So we were just paying for free, just for underutilized nodes because we were not able to rebalance this. So some of the challenges were, as I mentioned, we were slow scaled-down of nodes leading to inefficient resource utilization and also what was contributing to it because we had a slow cluster autoscaler which was not taking off the nodes quickly. So solution was simple. Don't rely on the default configuration what the cluster autoscaler would give. Typically you need to look at all those configurations that are responsible for your cluster autoscaler, how it will fit in for your service and so that you would be able to make that decision that how hot you want to run on your nodes. So these are all the settings that are available for the cluster autoscaler which are responsible for draining your nodes quickly. It decides when you want to scale down and how long you need to wait to remove the node, how hot you want to run on your nodes. So the third parameter which says that scaled-down utilization threshold, if you keep that higher, that means you are using the maximum node utilization. So you're running hotter and while your pods would stay in the target state that you want to operate. So with these changes that we added, we got better pod-to-node ratio. We were able to cordon the nodes quickly and more efficiently and the rebalance of pods and nodes was quick and efficient.  This was an cumulative saving on all the once we fixed autoscaling and also the cluster autoscaler. The default configuration was utilizing, like making the nodes idle. So let's touch upon another thing within the same compute area of pod density. This is a little interesting. Just take a single node in your cluster. In this, I have like that the whole, this is like a node capacity that I can have. I have pod1 which is scheduled. I have a pod2 I was able to schedule and also have a pod3 which I was able to schedule. And there is a certain system level resources that needs to get allocated, which is for demon sets and other system resources. So this top portion of our node, which was 20% of our capacity, which was not utilized by anything, it was just sitting idle. So when we see this 20%, when we have thousands of nodes that you operate, this 20% is huge. You are looking at wasting 300 cores for not utilizing anything or 400 cores not utilizing anything. And the main cause, the challenge was, we were inefficiently been packing our pods so that it was not taking the full capacity of the node. A lot of the times we would use platform capabilities for sidecars which will come automatically. You need to even resize that. You should never go by default. Always resize based on what instance type you operate so that you are able to utilize the full capacity. You will have your own sidecars that you develop. Even that needs to be resized based on what instance type you operate. Solution was simple. Make sure that for a given instance type, fine-tune your request and limit and identify how many pods you can fit into that given node. And that should be the target that you need to be operating.  Continuing to the same within the pod density, selecting an instance type plays a very big role here. For in our case, larger node gave us a better throughput, but it increased the blast radius for us in the sense our error appetite was low, so we couldn't operate on a bigger, bigger instance type. So we had to operate on certain instance type so that we are able to... Our FCIs are lower even if you lose an instance even in case of a failure. So depending on the instance type, you need to be always resizing your pods so that you are not wasting any resources within your node. I mean, it's all about your service. In our case, availability is the biggest factor. So we make sure that we size in such a way that we are able to get the desired throughput and operate in that fashion. And again, always look for an opportunities if you can upgrade to a newer instance types, which can give you better performance. So in our case, we were operating at C5N before the analysis. We went to C6N. We got a 15% performance improvement, and it was an improvement in our cost as well. So one example, how we calculated the pod density. So I'm just taking one simple example for this one specific instance type, which is a C6N for extra large, which comes with a 16-course. But in reality, the usable space is around 13,600 cores because the rest of the CPUs for the systems and demon sets. Then we have all the sidecars, app, stereo, Splunk. It can be any sidecar that in your case. So you are saying that I would be operating per pod, I would have around 3,300 cores. And then I have a pod density. So pod density is the calculation that you can do from a usable compute over the compute by pod. So that means this is a number. So that means you should be having this metric on your dashboard to say that on my ecosystem, I'll be operating four nodes, four pods in that given node. If the factor is in somewhere in like 4.5, 3.5, that means you are doing wrong. You need to resize the pod again because you are literally wasting 0.5 pod of the compute. And that is what we always went on computing and made sure that we have this whole number all the time, which we're always targeting. So this was a big saving just by resizing the pods in such a way that we are utilizing the full capacity of the node. We saved almost 10%. So this is all cumulative saving on top of what we were saving with auto scaling. So this diagram is an outcome of all the changes that we did in terms of compute. Say for example, we have a ramp up that we had to accommodate the surges. We were able to scale up the pods quickly because we had that over capacity which was protecting us. We got the nodes scaled up because the demand was higher. We were able to match the demand. And say we got a ramp down at some point. At that point of time, the pod density is going to drop for you. Because we are going to bring down the pods very quickly and nodes will continue to stay. The goal was, and in this case, we have an optimized scale down because we updated our scaling step down scale down. And then even nodes are also getting rebalanced. The graph for node is very crucial that you should see that nodes are dying quickly while your pods are also going down. And the outcome was this quick rebalance. I think the amount of time that it used to take previously was anywhere between like a day or even 12. And it never reached the stage that we wanted it to. And that particular delta was the entire saving that we achieved as a part of our auto scaling and within the compute space. Moving on, data transfer. So as Karim mentioned that during this migration journey, we also onboarded to Istio. And with Istio, with the scale that API Gateway operates, we incurred a new cost. We never knew that this is the new cost that we would be incurring. So you have a control plane. You have an application namespace. You have all the Istio proxies which would make a connection to the Istio D which are sitting on the same control plane. Now imagine like you have thousands of pods that you operate in a given cluster. They would make connection to all these Istio Ds and that connection can go all over the place. There will be cross easy connections and that they need to be communicating to each other because they are passing on the configurations. So the challenge was we encountered the high volume data transfer because of this change and we never had the observability but we established that observability first who is which namespaces are contributing which pods are doing. We did that deep dive analysis. The solution was simple. We had to just annotate our services to stopology our hands. So the service object that sits in front of your Istio D, we need to annotate that so that that will help establish, it establishes the easy awareness and all the connections and the data transfer that happens will be within the same AC. Starting EKS 127, they updated the annotation to the topology mode. So while in this journey, while we had this migration, we also had a new monitoring solution. We ended up with Prometheus. So every cluster that we operate has a different workload and they have this different capacity requirement. Everything is different. So we have Prometheus that we deploy for all our monitoring purposes. So we started seeing an increased monitoring cost, our metrics cardinality increase because our scaling was too high and we were scraping too many irrelevant metrics. The first thing we did, we did a T-shirt sizing based approach. We T-shirt size all our Prometheus in such a way that we could match to its requirement so that we could operate in certain instance types. We were able to control the cardinality based on we are protecting our system with certain metrics that we could get so that we know that if there are any offenders, they are actually dropped at the source itself. We filtered a lot of unused metrics. A lot of the times too many metrics get ingested which are never used. We started filtering them. This is a simple example from one of the service monitors CRD where we can control how you drop the metrics from a monitor and also how you protect the how many scrapes that you can get from a monitor. So this kind of saved a lot of Prometheus capacity that we were just wasting. So we saved, this was a significant saving while we did just small changes. It was a 40% saving on our Prometheus cost because we did the right T-shirt sizing to operate for the gateway. The other thing was the developer infrastructure cost. Now we are in a platform. There are a lot of developers contributing to a platform. They are developing APIs, controllers, operators, add-ons and they have their own independence of creating clusters, testing and certifying it. So there are so many clusters that we're getting created. There was no hygiene process involved with that. We had hundreds of dem-named spaces which were again not hygiene. A lot of resources getting unused. So to solve this, once we started, we created an observability for every cluster that was created which was not managed. So that was the key. We wanted to know that we have the metric for everything so that we know that how many clusters are getting created. We created an internal tool. We never outsourced it. We called it as an hangman. In reality, it actually just pauses. It actually brings down all the worker nodes for that cluster, keeps the control plane up and running. The key here is we didn't want to impact the developer productivity so that we are... And we are able to do in such a way that it is not too much of operational churn for them. And also we established the same pattern as PodSnoozer and we were able to achieve the same thing. This was a big saving for us just in terms of developer infrastructure cost. It was a 50 to 60% saving for making sure that we do it in a way that it doesn't impact developers. It was seamless implementation for all the developers who were contributing to the platform. So, yeah, that was our presentation in terms of how we were able to do and how we were able to save in certain areas. We have many other areas that we saved. We had a lot of saving that we did in WAFs, logging, and we are further optimizing and we're looking at more opportunities. So some of the takeaways from this presentation is how cops to optimize design during the time you are designing your system. That is the key. Second thing is I picked up this code. It says don't throw money at the problem through ideas at the problem. You do get short-term gains when you just, you know, you throw money for your situation but try to go back to the drawing board and see how you can fix it. And then third one is the most key. You need to have an observability. Don't rely on the default metrics that you get from any monitoring solution. You need to derive your own metric and make sure that you always look at it. Looking from that particular metric, that means there is already, already you are starting to see that there is a deviation and you are going to get that cost. Thank you. So this is our QR code for our booth. Please do visit and please share your feedback using this QR code. Thank you. And so we have a minute for any questions. Yeah. So the question was what's our process for dealing with requests, limits, or HPA thresholds? That's a very good question. And it was basically a lot of testing.  We knew sort of what we had with our EC2 but it doesn't map exactly. So we had to run a lot of testing as well as even in production, observing what or how much CPR we're using, four different workloads and adjusting to see, like, you know, and very important to watch the CPU throttling metric to see if you're actually getting throttled because we didn't have that. So thank you for the question. I think with that we're out of time. So thank you everyone. Thank you.


We won't welcome back to realistic gaming and I'm here subbing for junior again It's okay though because today I found a pretty creepy-looking game I don't know if it's gonna be good or not. It sounds good already like if you hear the music sounds creepy So let's play a slendy tubby's three Campaigns of the campaign and uh, yeah, it's good to it. It's good to let's see if it's scary or not All right, I hear some water Don't see any. Oh, is that Poe? Yeah, yo pose. Just look at no. No, it's a beautiful day Is that Thomas a train? Hello, it's nice. I prefer cold. Oh, hello. No. No, it's nice and warm. Okay. It's nice and warm Oh It sure is it is nice and warm. I am unable to feel warmth Why are you out here all by yourself? Oh, okay? That's a little thing Everyone misses you. Oh So I'm pole. I'm having fun. I'm just enjoying the view. I'm just enjoying the view The view from the lake today is wonderful.  Yes, it does You should head home. You haven't eaten today Yeah, I'm done here anyway. Let's go Actually, I'm gonna stay here for a bit No, no, what are you doing? All right. See you later. No, no Is it new new or no Bye, Paul. We'll be home soon Oh, let's see what happens. I wonder what the others are up to Oh, yo, this is look at this game. I didn't expect this What's that bunny?  You see it is Poe tinky-winky lala Tinky-winky Tinky-winky dipsy. I had to think of the song Dipsy lala Poe Wait, who's that one? I'm there to see that one. Is that a white tinky-winky tinky-winky.  Oh, this is the game already. Look at this guys Tinky-winky Or should I say out of my way? I would be mean tinky-winky is offended. Ah tinky-winky I have to press D. Oh, I have to be a certain way. Have you found your hat yet? Uh, do you know how to turn a custom machine? Goodbye Oh, apparently I only got to click things one time. I was clicking on it three times. Oh, the machine is broken I guess I better fix it Tinky-winky, please hurry. I'm so hungry. Go fetch the toolbox All right. Where's the toolbox bro? Just tell me where it's at Maybe it's over here. No Where's the toolbox tinky-winky? Is it over here? No, is it this? Oh, right here It still works but I don't need it right now. Okay Toolbox right there All right, not time to fix the custer machine. Okay. Now I gotta go fix the custer machine There you go. It took me so long to just figure that out. I should do it. Yeah, you did it tubby custard Could you please make custard and hand it out to each of us? We're hungry.  Lala you look a little down. You're probably hungry here. I got you girl Oh, hi again. Paul sniff. All right. I'm uh I'm gonna come for her. I kind of feel bad. Sure. Lala. I made some custard for you to make you feel better Thank you. Paul. You're a true friend Lala feels a bit better. All right. There you go. And look Dipsy. I got you right here girl Where's that a guy? I don't know Maybe both Here you go. Just say thank you. Paul. Don't forget about yourself.  None of them offered none of them did anything That's to make myself some tubby custard 10 hours later. I I feel like it was 10 hours later after doing all that So they're all taking a nap. Okay sleepy time It could pose facing the other the opposite way. I feel like that means something Paul I can't sleep What's wrong? Paul is either a fart or somebody got up Oh tinky winky What you doing, bro?  So he don't Tinky winky, what are you doing? Get back in the bed. What are you doing? Tinky winky. Oh tinky winky. What's up, bro? Wait, where are you going? Oh tinky winky sleepwalking He's sleepwalking right now Wake the others Follow tinky winky alone. That's how you do it. There's no time to wake the others You need to follow him quickly before I better grab a torch from the workbench. Winky acting a little strange, y'all But honestly, he's always been a little strange if you think about it From back in the day when I used to watch it Let's go follow tinky winky Tinky winky All right, let's walk behind.  Where you going, bro? I can't walk faster Catch up to him, po. You walking with them like legs. Tinky winky. I don't find you, bro. Come on. Just walk faster Winky over here. Oh, which way should I go? I feel like people would always go left. So let's go No, people would go right. So let's go left Tinky winky. Are you around here? Oh, where'd you go? Getting us worried Is this custard? Is this is custard? Who's custard is this? Tubby custard. How did that get here? Tinky winky doesn't seem to be here. I guess I better check the lake. I don't know what tinky winky's doing, but I don't think it's a good idea. Check up on them too much. It says lay- Oh, there he is. Tinky winky! Tinky winky, are you okay? Tell the tubby houses over there. I don't see them chasing me Oh, there he is Wait, so do I gotta go that way? What? Run, po, with your little legs All right, let's check behind the scenes there Tinky winky. Oh, I gotta run again You're gonna scare me There's a step on the bunny. Oh, dude, what the heck? Chill, tinky winky All right, let's just make it over there. Okay, there you go. I'm here Open up. That's her head. Oh, no. How could this happen? See something must have been wrong with the custards The custard, that's what it was. It was my cooking. It was post-cooking Tinky winky. Chill, bro Hold, hold up. Okay. This is this is this is new. What's this?  All right, is it good? All right, if I die this time I'll stop. All right, go go. We're in another story Keep it running. Let's go Paul with them little legs. You help let me go.  Yo, he jumped far. You think about it? He jumped really far. All right, this is where they got me last time Yep, they had to be on On time. If not, I was gonna die. All right, let's not die because I don't want to start this over Let's go. Come on, Paul. Keep it running. We're slowing down Oh somebody's farting Let's go. Come on, Paul. You got this. Oh the tree breaking randomly. Let's go Oh this oh he's running fast now. He's picking it up. I better I better gather the remaining custard for research if I know what's wrong to prevent things getting worse Chapter one a new day. It has begun. Tinky Winky has killed Paul and the rest of his friends You believe that the cussers are responsible for his attacks You use your computer in an attempt to contact other tubby at the satellite station, but with no success Without any delay you prepare a plan to fight All of the infected cussers before traveling to the satellite station for help It's up to you to find out the truth. All right, let's see I'm just do a little bit of chapter one and then if you guys enjoy it Make sure you press like so you can do a part two Dang it for somebody that I can't connect to the satellite station for help It looks like I'm on my own for now It's dark. I need to get in my night vision camera from the storage room before going outside The storage room is locked. I can unlock it from the control room Once I get these cussers. I should go to the satellite station for help Other tubbies will be there. I must hurry. Oh, so this is me right here Hey, yo, I got one of them hats too All right, let's go The control room is on the right So I'm assuming this way Oh, I got a pipe. Nice This is the control room. I forgot how to open this door Maybe I hit it with a with a pipe. No, okay. Oh, maybe you go up here. No Down here. No. No. Okay through here. No Okay How about over here? Can I go this way? Okay, nothing here Okay, go in this way Oh turn valve I feel like there's one more. Oh, there we go pressures that maximum. I should be able to open the control room now Oh, okay. Look at us problem solvers All right, let's go this way And I do this Hey, we make it moves right now. Let's go And then I do this open the door. Okay now time to unlock the storage room door Okay Up here. I'm assuming door controls They got me sobbing little puzzles Oh night vision. Okay night vision camera right there Let's get this night vision camera real quick All right, let's go get the remaining custards before they do any more damage power went out Let's go Okay, hopefully I don't Okay, right click to Okay, so I gotta crash like this Okay, so I got I guess I gotta be careful that thing scared me I should hide behind the grid so it doesn't see me. Okay. Oh, it's not there. Okay. No No, no get away from He didn't see me I'm gonna pass right by me And the camera starts messing up. Hopefully he didn't see look at him He looks ugly. All right, he messes up your camera once again. All right, let's do one more time Okay, one more one more Okay, I get it now I get it now. Okay. Okay, okay Now he didn't see me. He didn't see me All right, let's go. Let's go. Just walk slowly behind them. Look look you got cake slow key Gotta chill here for a bit. Let's see Oh, he's close to me. He's close to me That's what my camera's messing up. Are they starting me over? Okay. I'm gonna just do a speed run real quick See if this works Ah, man, it's hard because once you get close to them the camera starts messing up I'm gonna do this because now I'm I'm curious how to be slow Don't get too close to them too Oh my god. All right, you know what? Okay, I'm gonna be it for today Um, I want to keep playing but we've just been playing for a while now But if you guys want to see a part two make sure you click a like on the video And if we hit, you know a certain amount of likes then I'll tell junior to play part two See if he's down But hopefully you guys enjoyed that uh make sure you guys Click a like subscribe comment share and do all that And yeah, see you guys on the next one. Peace


So, the main question we try to address here is basically what would be the impact of quantum computers on symmetric cryptography. And we care about this because, well, basically some physicists think they can build a quantum computer, so I'm not going to argue whether that's true or false. Maybe it will be in five years, maybe 200, maybe never. But anyway, it's something we take seriously in the crypto community and we try to find out what would be the impact of this and how to have security that would resist this kind of event. So in a nutshell, what would quantum computers do, the idea is they will be able to solve a class of problems much faster than classical computers. So we don't expect they will break all problems, but they will break some problems much faster. And that's interesting for us because in cryptography we like hard problems and we like to have cryptosystems that rely on hard problems. So it's important to understand whether those problems are still hard for quantum computers or whether they become easy. So in the field of public key cryptography in particular, that's something that's been studied a lot. And we know there's a short algorithm that can break factoring integers and also can break this critical algorithm. And because of this, a lot of public key cryptosystems would be broken by quantum computers such as Aris said if you have an elliptic of cryptography. And there's been actually a very large effort in the public cryptography community to design new algorithms that would resist these kind of attacks. On symmetric cryptography, we don't have that much knowledge about what would happen. We know that there's an algorithm by Grover that basically can do exhaustive search of an n-bit key in times two to the n over two. But we don't know whether that is the only attack we have. We don't really know what else there could be. This is the wrong version of my slides, but I'll try to make do with it. There is something else we know, something more than Grover's algorithm. And that's a nice result by Kwakado and Mori, and they showed in 2012 that we can break the even monster cipher with quantum queries. So I tried to explain a little bit how this works. So first, what is the even monster cipher? It's a nice construction. You start from a public permutation P, and the idea is to build a block cipher and you build your block cipher by just exploring a key at the beginning and at the end. And this construction is very simple, and you have a security proof. So it's very nice. It's not really used in practice, but from a theoretical point of view it's very nice because it's quite simple and has a security proof. And it turns out, so before looking at quantum attacks, I'm going to talk about classical attacks, so there are many different ways to attack it. Of course, they don't break the security proof, so they only reach the same security level. And one of those attacks is called the slide with a twist attack. And what you do is you start with two to the end of a two null plaintext xi, and the corresponding ciphertext yi. And what you do is you assume that in this large set of plaintext, well, with high probability, two of those values will have a difference exactly k1. So we assume we have x and x prime with a difference exactly k1. And then when we encrypt them, what happens is the first step in even monster encryption is to absorb a key k1, so that basically swap x and x prime. So what we have is encryption of x is p of x prime plus k2, and encryption of x prime is p of x plus k2. So k1 goes away, and now when you combine those two equations, you can make also k2 go away. And what you get is encryption of x plus p of x is equal to encryption of x prime plus p of x prime. And this is something that's easy to detect now because you can just take all your known plaintext x. Now you just compute yi plus p of xy, you compute this for all your data, and you look for a collision. And you know that if you have a pair with this specific difference, it will be a collision. So every time you get a collision, you get a candidate for k1, and you can try them, and that gives you an attack against the even monster cipher. So this one is a classical attack. And basically what Kuwakado and Murray did is they built a quantum version of this attack. So yeah, I won't go too much into the details of quantum computing here. Basically I'll only see quantum algorithm as a black box, and because it's quantum, there's probably a cat somewhere in the box. So the way this attack works is the basic model is you're going to give a quantum oracle to the adversary instead of just a classical oracle. So you can send superposition queries to the encryption oracle, and get a superposition of corresponding outputs. Before going further, I'd like to say it's a very strong model, of course. We don't really expect such attacks to be actually practical, but also on the other hand it's hard to argue that we cannot do this kind of attack in practice. Like if you have a smart card that encrypts messages with some secret key, we don't know what happens if you send a superposition of messages. We don't really expect to get the superposition of outputs, but it's also hard to say there are no quantum effects, and everything is completely classical. So we don't really have any model in between the completely classical one and the completely quantum one, so it's still interesting to look at this model. And also, as a general thing in cryptography, we like to look at very strong models and prove security in very strong models. So I think it's very interesting to really look at what happens in this model, even though it's not really a direct threat on the cryptography we use. It's also important to understand that it's quite different from what we do with, say, Schor's algorithm. When you try to break RSA with Schor's algorithm, you just take the public key and you build a quantum circuit out of the public key, and then you run this quantum circuit, but the adversary only takes classical inputs. In this model, we assume that the adversary has a quantum box that does encryption with some secret key, so it's really a different thing. So what we're going to do in this model, we're going to use a very nice algorithm called Simon's algorithm that's basically a case of quantum period finding, and what this algorithm does is you start from this assumption that you have a function with a very specific property, but this function has collisions if and only if the input difference is some fixed value S. And the goal is to recover this value S. This is something that's relatively hard for classical algorithm. It takes time to do the other two, but for quantum algorithms, you can do it in time, linear in N. So I will not go into the details of how this works, but basically it works. We can also do it in slightly weaker cases. So I said the initial Simon's algorithm, you assume you have collision if and only if the difference is S, but in our case, we will sometimes have something a little bit weaker that we have collision if the difference is S, but not only if the difference is less. Like there are some extra collisions like don't follow this exact difference. And if those extra collisions are not structured, they are mostly random, then the algorithm will still work. So you can look in the papers for the details on this. So now, how do we break Event Montour with this? The idea is to do something very similar to a classical attack. It's basically a quantization of a classical attack I showed earlier on Event Montour. So we're going to build a function F. You build it like this. And this is what you do to encryption of X plus permutation of X. And so you look at this function. And the important thing is this function satisfies F of X is equal to F of X plus K1. And that's just the same thing as I showed in the classical attack. That's just because when you write down what this function is, it's something like this, and if you input X plus K1, you just swap out those two terms. So of course, there will be collisions. So this is exactly what we want for Simon's algorithm. So now we can run Simon's algorithm and this function will recover K1. And that's how we break Event Montour Cypher. And now this attack only takes tack linear in M. So it's a very efficient attack. So that's what was known so far about quantum attacks on symmetric cartography. And now I'm going to show that actually, it's a lot more general. We can break a lot of modes of operation using the same techniques. So I'll start with CBC max.  But the important thing is the security notion we're going to use is security against chosen plain text attacks. So that's very classical. So what you do is you have some oracle and the adversary can send messages and receive the corresponding tag. And the goal of the adversary at the end is to predict the tag of a new message, a message that was not sent to the oracle, and you have to predict the message for this tag. So that's the classical security notion. Now, when we try to move to a quantum set, so what we want to do is change, replace this classical oracle by a quantum one. So it means now the adversary sends a superposition of messages and gets the corresponding superposition of a max values. But we also have to change a little bit what it means to do a forgery. Because if you send a superposition of messages, you can just send a superposition of all messages. But now we don't know what is a new message, because you already send everything to the oracle. So that's what we want to do. So that's what we want to do. We want to send everything to the oracle. So instead of asking for a new message, what we ask is if you make K queries, you have to create K plus one valid tags and message at the end. So that's the security notion we use, and it's due to a Boolean's injury. So now let's look at CBC Mac. So it's a very common Mac. It's using a lot of protocols. It's a pretty old one. And it comes with a security proof. So it's a good construction.  So let's keep the classical attacks. So how do we do a quantum attack on CBC Mac? So the main step of the attack will be to define a function f with good properties. That's how all those attacks are going to work. And then we're going to run Simon's algorithm in this function, of course. And the way we're going to build this function here, we take two inputs, a one-bit input and one message block. And what we do is we expand this one-bit input to a full block, and we can't get in the other block. And so when you write out what happens when you evaluate this function, so if you start with B equals 0, you're going, the Mac is going to be just encryption, encryption of X plus encryption of 1. And if you start with bit 1, you have encryption of encryption of X plus encryption of 0. You can see that there is a hidden period in this function. If you put, if you change the bit B and you put a difference in X that corresponds to the difference in those two terms here. So if you put difference 1 in the first term and delta in the second, where delta is encryption of 0 plus encryption of 1, you get collisions. So it's basically a differential attack. You put difference 1 here and here you put the corresponding difference to cancel it. So this is nice. Now we can apply Simon's algorithm. We're going to recover this value. In terms of that, we can use this value to make forgeries for exactly the same reason. Now you just put again this difference, corresponding difference here, corresponding difference here, it's consoles, it's collision, and you have forgeries. So this is how we can break CBC Mac using quantum queries. So the main structure is like this. On all the attacks we have in this paper follow this same structure. The next thing is to build some function F with a hidden delta in it that can be used later. So that's where you have to be a little bit clever to see how you can build this function, how you can build your inputs to your Mac and how you have to combine maybe the outputs. And if you do this nicely, well, you have such a function then you use Simon's algorithm, you recover delta, and you can build forgeries. And yeah, an important thing is you need to make a quantum implementation of this function F in order to run Simon's algorithm, so of course you need a quantum version of your recall, and you also need sometimes some extra bits of circuit that you're going to combine with it. So we can use the same kind of ideas on many different constructions, actually, and that's really something a bit surprising that we can really break the variety of model operations. So I'm going to show a few of them. So this one here is PMac. So it's a parallelizable Mac and so the main structure is you encrypt in parallel all your message blocks, but before encrypting, you have to XOR some secret values delta and then you basically XOR the outputs and encrypt again. And if you look at this structure here, if you put only two blocks of messages, it's actually the same shape as CBC Mac, so you can just use the same attack. We can also do an alternative attack just for the sake of variety maybe. What we can do instead is build a different function where we start with one block of message and we just repeat it twice. Then when we compute the Mac of X concatenated with X, it turns out that again you have some structure, you have collisions if you input difference delta 0, XOR delta 1. Let's just, if you think of it, if you have X on X here and if you XOR delta 0, XOR delta 1 into this value X, well you're just swapping around the first two encryption blocks. So of course you're going to have collisions. So this is an alternative attack against PMAC and the nice thing is it's also going to work if you put an encryption block here and this happens in some authenticated encryption modes, you have an extra encryption here and in this case the CBC Mac attack is not applicable to PMAC, but this variant will be applicable. It's nice to have a number of different ways to attack them. So next I'm going to look at GMAC. So GMAC is basically the authentication part of GCN and it's a Carter of Eggman Mac, so you have some polynomial evaluation and then you XOR an encryption of the nodes. I'm not going to go into those details. The important thing is, again it looks very similar to CBC Mac when you look at the picture. You're basically XOR messages and apply some function. So you really want to do the same kind of attack. So you're going to define the same kind of function and turns out you have again that f of BX is equal to f of B plus one X plus delta, so that's the same kind of structure we want for Simon's algorithm. However it's a little bit different because there is a nodes here. So every time we query this oracle we're going to get actually different functions. It's not the same function we're going to query all the time. So that makes the attack a little bit different but even though all those functions are different they all have the same periods because the nodes only appears at the end of the computation. So if you have collisions before you input the nodes, the structure of the collision doesn't depend on the nodes. Thanks to this we can actually apply Simon's algorithm. So it's not exactly Simon's algorithm because we have a family of function but it's basically the same thing and it still works. Also it's nice when you think about this structure this works because the nodes is at the end. If you would put the nodes somewhere closer to the beginning, those attacks would not really work like this. We have also looked at authenticated encryption with associated data. The basic idea is you have two inputs, a message and some associated data A and you want to authenticate the message and only authenticate the associated data and something interesting is in a lot of AEAD construction what you do is you first process your associated data independently of the nodes and then you process the nodes, the message and something that comes from this processing of the associated data and because of this a lot of those attacks will still be applicable because we will just attack the part where you process the associated data and so if you have collisions before the nodes comes in then we can just do the same thing. So to summarize there's a lot of modes that we can break with this really so we can break a lot of modes that are really used that are standardized and really used like CBCMAC, PMAC, GCM, OCB those are really important modes and turns out they are not secure if you can do quantum queries to the oracle. We have also looked at Caesar candidates and it turns out we can break eight of them so that's also a non-negligible fraction. So there's really something happening here. If you compare this to the situation with encryption modes surprisingly it's very different. Most encryption modes are actually secure against quantum queries so a lot of authentication modes are broken but encryption mode seems to be secure. I don't really have a good explanation for this but personally something different happening. It's also important to see that even though we can break a lot of them it's still possible to build a secure max. It's not that the model is too strong and we break everything. Just before concluding I'd like to talk about something a little bit different. Everything so far was about mode of operation and I'm going to talk about cryptanalysis techniques so I'm looking inside the block cipher and I'm going to look at slide attacks. Slide attack is a class of attack where you look at an iterated block cipher and you assume that it's iterating exactly the same function so you repeat the same permutation at every round and you absorb the same key at every round. If you do this there's a nice attack where the idea is to find a pair of inputs xx prime so that they are basically shifted by one round. So the encryption starts one round later and ends one round later. And it turns out it's possible to find values with this kind of relations and if you want to do a classical attack to find this I will skip the details but basically we can detect this by finding collisions and this attack can also be quantized so it's also possible to build a quantum version of this attack and what we do is we build this or function in this way so it's actually a little bit different from the attacks I showed so far but the function is now defined in a different way so we use a one bit input plus one block of data and what we do is if a bit is zero we're going to take x plus p of encryption of x and if a bit is one we're going to take x plus encryption of p of x. And now if you try to write down exactly what this makes you can see that if you have f of zero x you can write down what you get it's actually the same as f of one x plus k so you actually have a period also in this function the period will give out a secret key k so if you have a block cipher with this very strong structure well I should say that actual block cipher usually avoid this structure because we know there are issues with it but it's still interesting to see that if you have this structure you can actually break this in time that's only polynomial in n and that's the first case to the construction So to conclude the first message is that Simon's algorithm actually breaks real problems that's something that was not completely of use from the quantum side of this when Simon's algorithm was first introduced it was a very important result because it was the first case where we had a quantum algorithm that was exponentially faster than classical algorithms but the problem that it solves is considered as very artificial not really something that was important in real life and turns out in cryptography this very problem is actually important for a lot of systems that we use so that's something interesting here and in terms of applications we can break a lot of MAC modes and autenticated encryption modes with attacks that takes only linear time and we can also improve some cryptanalysis techniques so the really big result is well there's not just other algorithms if we look at the security of symmetric cryptography against quantum algorithms there are actually better attacks than Grover's algorithm so I think it's worthwhile looking at it and seeing really what we can do on the other hand this attack is not really practical in the sense that it uses a very strong model so we don't really expect that it will break actual implementations of crypto and this will conclude my talk thank you