Hi everyone, Joe for JaspiesCaseBreaks.com, back from the national and we got some national related goodies that we're going to break for you, Panini VIP National Exclusive Gold and Silver Packs, 25 gold, 20 silver, this is break number six, you can see that the next one is already loaded up. One spot gets you four teams from this big 84 team list, there's also an all other not on list spot, it's usually soccer and maybe some racing is in that group.  There's one already, there's two, three, and four. Should be, oh nice catch Chris Taylor. So there's a, should be 84 on each list right here. So let's roll it, randomize each list, two and a two for the hard way. One, two, three, and four. Will down to Richard, two and a two for the hard way for the teams. One, two, three, and fourth and final time. We got the Halos down to the Jaguars. So I'm not going to read off all these names here, it's just way too many. But I'll give you plenty of time to figure to see what teams you got. So here's the first group, I'm just going to show you the list as is. And then I'll alphabetize by your first, I just want to get this on the recording. And then I'll alphabetize by your first names. You can see all of your teams grouped together. Alright, so Albert there's your group of teams right here. Anthony, Barry, Ben, Chris, Jeff, Mark, Nick has a bunch of teams here. Richard, Rob, Ronald, Steve, TJ, Will, and Will. There you go, I'm going to pause the video and see if there's any trades and when we come back, we'll see if there's any trades. And then this is also an opportunity for me to scroll down to your name if you want to see your teams again. So we'll see you on the other side, be right back. All right, welcome back everybody. There was a deal done, Mariners for Celtics, Richard and Mark getting a deal done. So Richard, you're now in the Mariners spot, put a T there for trade. And Mark, you're now in the Celtics spot. We'll put a T next to the Celtics so we know that they're all involved in the trade now. I'm going to alphabetize by team. So when I'm going through the break, I can easily, more easily identify the teams right there. So you can see Mark still has the Celtics and Richard still has the Mariners. Good luck to the both of you. Let's flip back over here. And once again, it's 20 silver packs, 25 gold packs. Oh, one, two, three, four, five, two, three, four, five. One, two, three, four, five, one, two, three, four, five, five, 10, 15, 20. We'll do the silver packs first. Good luck everybody. You never know what's going to happen in these silver and gold pack breaks. It'll be a little nice hit potential in here. Especially if they're numbered. All card ship, of course. And we've got another, another random team break of this available in the store right now. So if you're watching live right now, we can definitely run another one back. Autographs are few and far between. Well, we did see one a couple of breaks ago, but they're fewer and far between. This is really going for numbered cards, basically, and some of the top tier rookies like this guy, Wander Franko. So all of those Wander Franko's will go to the Rays, and that's going to be for Jeff, Jeff Henn. That's to $4.99, nice. LeBron James numbered to $99, to my Lakers. That will be for TJ and the Lakers. If you get it, TJ also has the Phillies, too. There's a Paolo Benjero to $1.99. Desmond Ritter to $50. So that's for Desmond Ritter, Steve Locke, and the Falcons. And of course Paolo goes to... What team is he on? The number one overall pick, of course, went to Orlando. Duh, he goes to Orlando. Nikola Jokic to $1.99, Julia Rodriguez, Rookie Card, and Jason Tatum to $99. They were both involved in that trade. Nice Wander Franko right here. A Jalen Green, red to $99 for the Rockets. Joe Burrow to $1.99. Scotty Barnes, nice to $25. Another Desmond Ritter to $1.99. Marcello Meyer to $50 for the Red Sox. Tom Brady to $99. That's Patriots Edition, and that one's a Buccaneers Edition. A couple of LeBron James, $1.99. Another one just to base. Mahomes to $1.99. Jason Tatum to $50. Kawhi to $1.99. Wander Franko, Rookie Card. Traylon Burks to $1.99 for the Titans. Mack Jones to $5. Jalen Suggs and Jaden Ivy to $1.99. So let's leave some stuff up here. So Wander Franko raise, obviously. We said Jeff with that one. Mahomes, Patrick Mahomes for the Chiefs. Nice little orange for Nik to $1.99. LeBron James for TJ to $1.99. Patriots, Tom Brady. That will be for Mark Rao to $1.99. Saw Desmond Ritter already. Here's another numbered one to $1.99. He might get some opportunities to play. Scotty Barnes, your Rookie of the Year. Here's his Rookie Card for the Raptors. That's for Nik, $4 out of $25. Another orange Wander Franko for the Rays to $1.99. This might be your AL Rookie of the Year this year, Julio Rodriguez. I think he's the odds-on favorite right now. And the nice Mack Jones, $2 out of $5. Patriots, once again, that is for Mark Rao in the past. As you know by now, most of you, out of $5 and under, get the world-famous train whistle. Nice one, Mark. All aboard the Big Hit Express. All right, those are your silver packs, which are pretty solid. The gold packs might even be better. 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 gold packs. I feel like there was a thick pack in here, so we'll get to that. Good luck. Rex saying Magic Johnson should have signed one season with the Magic before he retired. Or maybe like became owner of the, like became like a part owner of the Orlando Magic. There's that thick card right there. I'll get to that. All right, well, let's see what we got in the gold packs, which are pretty, pretty nice. Jason Tatum, Joe Burrow, Hyper. Got a LeBron James right here, different parallel. And then Alan Iverson, Camo, 19 out of 25. Sixers. That'll be for Nick. Bill, is Jasper's Instagram not working? No, we're not on Instagram tonight. You're stuck with me, Bill. Sorry. It's David Beckham, 35 out of 50. Going to that All Others spot. So is this Dale Earnhardt Jr. Tiger Strype? I don't remember, Rex. If they were kind of chromey, then they would have been gold packs. I think the silver packs are more papery. There's Jalen Waddle, 14 out of 15. For the Dolphins, that's a nice low number. That'll be for Richard, last spot. Oh, is there a, I'm sorry, there is a NASCAR spot. Richard with the NASCAR spot. Our shipping team will make sure they all go to the right place. Walter Payton, cracked ice to 99. So these hyper parallels, by the way, not numbered. All cards ship. And there's an Alec Bohm. Gold shimmer, one out of 10. That's a nice low number. That, I think that's, yeah, TJ with the Phillies. Well tried to trade, couldn't trade Mojo. Rookie, Alec Bohm. Former Rookie of the Year. Mariners Ichiro. Zion Hyper, Lionel Messi to 99. Danica. And it's LeBron James, three out of six. Three color patch. That's TJ and my Lakers. There you go, TJ. Just one off a train whistle, but, but still nice. I don't know what that goes for, but I know that LeBron James stuff, that low numbered, you know, that's still, still a popular player on the secondary market. So what was that? Yeah, Rex was mentioning that we pulled another one of these, that Jason may have pulled another one of these. What would, do you remember the number on that, Rex? Pretty nice each. Ooh, and look at this Peacock Justin Herbert. For the Bolts. Who's got the Chargers? That'll be for Albert. I don't know how short-printed this is, but I think this might be one of the shorter prints. And Albert's screen name is Just Burr. So he must be a fan of Justin Herbert. Or maybe Just Burr from Sesame Street. Does not like Ernie. It was Magic Johnson, six out of 50 for the Lakers. Magic Johnson again, cracked ice to 99. Jamar Chase and Randy Moss. And there you go, ladies and gentlemen. I'm Joe for jaspyscasebrakes.com. We've got more of this in the store. We can run it back a number of times, so let's keep it going, jaspyscasebrakes.com. Bye-bye.


Our next caller is Sam from Saudi Arabia. Oh cool from Saudi Arabia. How are you doing Sam? How can we help you? Hi, how are you? Thank you for having me. No problem. What's your question? So we started the month of Ramadan today where we fast during the day and we eat during night. So my plan is to heavy lifting for free weights during the day. I don't want to heavy lifting during the eating window. So my plan is to work out for 30 minutes of heavy, of free weights for 30 minutes, maximum. So I want to ask you about the nutrition that I should take during the eating window. What should I eat? Any more carbs, more protein, fats? Okay, that's actually a great question. So many people practice this. I don't think he's going to like your answer though, right? I think I know where you're going to go. Well, yeah, a lot of people practice this and number one, I appreciate this practice. I think spiritual practices and spiritual health is very important. As far as your question is concerned, you know, what you would eat during your eating window would be really no different than what you would eat. That would be considered healthy for your body if you were to eat all day long. Now first and foremost, training fasted, totally fine, not eating right after your workout, nothing really wrong with that. If you have a big issue with that, I would recommend then working out right before. You're eating window. As far as diet is concerned, now I've trained clients who practice Ramadan and there's a couple of common things that I've run into with some of these clients, not all of them, but a few of them where they do the fasting window, right? But as soon as the sun goes down and then they can eat, they end up overeating, they end up binging, right? So it ends up becoming a fast and then feast kind of mentality. So my recommendation revolves around kind of slowing down that initial feeding process. So when you're ready to eat, maybe eat a healthy meal, give yourself something, a little bit of structure. So the first meal you eat is more of a structured meal, then wait 30 minutes to an hour and then go ahead and continue to eat. I would prioritize whole natural foods, proteins and fats. I would leave carbohydrates towards the end, just again, in my experience, that tends to reduce overeating. Vegetables also, you could start your meals with vegetables. So kind of prioritize the more important food first, allow yourself to eat until you're satisfied, but be careful to eat past the point of satisfaction. I'm going to add a little bit to this. First, I just really think that when we're doing a practice like this, I think that the main goal is the spiritual side of this, and the truth is, and I've got this question a lot, I've answered this many, many times, and normally the concern from the person that's asking it is that they don't want to lose their gains, right? They've been training for a while and they're like, okay, Ramadan is here. I don't want to have 14 days where I slide way back. And the truth is you're not, especially if you're training during this time, right? If you continue to lift, the setback that you may have in these two weeks is going to be minimal and your body will respond and rebound right away. So the first thing I would say is I wouldn't get that hung up on this when the real idea and objective of doing Ramadan is the spiritual practice of that, right? And to be working inward. So, and that is a part of health, and that's going to only benefit you getting stronger and being better in life. So I would tell you to do that first. And then really, if you're asking more specific about food, more towards Sal's advice, I would really just target, I would target my proteins, fats, and then lots of veggies. Like that's, I would make sure that when I look at my plate of food, I'm getting a high amount of protein because I didn't eat all day long.  And then after that, I would have some carbohydrates like Sal's saying. So that would be like my main focus. But again, if you're training during this time, you're already going to be sending a signal to the body to hang on to whatever muscle you have. The main focus would be the spiritual practice for me. I don't do enough of that. I don't do enough of stopping my life and becoming present and working inward. That's why I love this practice. I love that you guys schedule the 14 days every year like this. I think that this is a great opportunity for you to focus on that stuff. And don't worry, if you're training, you're going to be okay. And you're going to come right out of it when you get done. Now, I do want to add, of course, your training probably should be a little bit, it should be easier, less intensity, slower, because you're not eating or drinking. And so having someone train really hard without food, but especially without fluids or water can cause some problems. So really train very easy. Mind how your body is personally. Again, in my experience, clients have either had success training first thing when they wake up or right before they go and feast. But either way, you still have to be very careful, especially because you're not drinking fluids. That's the big thing I would say be careful for. Does that answer your question? All right. Thank you. Thank you guys. Thank you for having me. No problem. Yeah, this is, um, thank you. You're, it's practiced by, I think something like one and a half billion people worldwide. A huge, a huge amount of people practice this and run. So it's 30 days long. They can't eat all day until night time sunrise and sunset. I don't know how long it is. If it's 30 days or I think you might be right. I can, I can, yeah. He was asking about 14 days, but I believe it's 30 days, right, Doug? It started on the 14th, I believe, of April. Okay. Maybe that's why I misunderstood it. It's a whole month. It goes through, I think, uh, May 13. Yeah. So, and it's no, it's no food, no, it's basically you're abstaining from pleasurable things. No sex, no food, no drink. You're supposed to pray a lot during the day. I thought it wasn't part of the practice. They, they choose something they want to give up. Isn't that part of it? Um, I don't know if they add anything to it. But yeah, it's different. Oh, maybe, maybe that's when I'm getting that. Yeah, that's different. This, yeah, this is Islam and this is, and it's, again, no food, no drink, no sex. Um, and it's sunrise to sunset. Yeah. So now do a lot of people actually do, obviously it's nighttime. That's going to be the focus, but do people wake up earlier, you know, so where it's still dark where they can eat in the morning? I've had clients that'll do that as well. Um, so they'll start the day before the sun right, but the big challenge I've seen is the, you know, when you get to the point where the sun, that's right. Yeah.  And that's the truth is, and your answer with the eat, how you normally would eat, I know, I can, I know, I know exactly where his, where his head is at. It's, it is always the, I don't want to lose my, I want to, or I want to build during this process still. And it's like really the, the, the 30 days of low calorie is not going to do anything, but probably lean you out and probably be good for your body. So do it, especially if he's still continuing training, he is not going to regress as much. You might see a little bit of a strength loss. You might lose a little tiny bit of muscle, but not a whole different shift of focus. And I think that you just have to embrace it. And that's hard to do because like, you're so focused on trying to transform your body and build muscle and all that. You just got to shift your focus. I'll be honest with you. Uh, if somebody was otherwise very consistent, so let's say 11 months out of the year, they're very consistent with their diet, with their training, their sleep, I, I, I honestly think no training, no nothing. I think a 30 day break, completely break or easy movement, you know, maybe focus on mobility. If anything, they'll probably get better result. Now I don't, I'm careful when I say this, I don't want people to do this for this reason. I think it's the, the reason should be for the spiritual gains that you get from it, not the physical gains, but I think the side effect of this honestly would be better physical. It's like a deload month. You're focusing on other things. You're focusing on maybe on mobility, but really it's a spiritual and you're taking a break. This is like, is one of those practices that has, you know, stood the test of time, like in a lot of religions, they do, they do these things for a reason, because it does benefit your, your overall health. That's right.


All right. Hello, everyone. Welcome. I'm John Howard. I am a software engineer at Google. And I'm really excited to be here talking with you guys about some ideas for how we can build Kubernetes controllers in some better patterns. I'm especially excited to be here on a Tuesday talking about something other than Service Mesh, which always is on Friday night. So just a quick overview of what we're going to be talking about. First, I'm going to go over what are controllers. How many people here know what a Kubernetes controller is? All right. Quite a few. It's kind of what I expected. How many of you are involved in the development of controllers in some way, like you write the code or even you just read the code? Wow. That's actually more than I expected. So that's good. So I'm glad everyone knows what controllers are. You might have some different ideas of what a controller is than me, so I'm still going to go over it. Next, I'm going to try and convince you that writing controllers is pretty hard to do correctly. You might already have this opinion, in which case it won't be a hard argument, but if not, you know, we're going to go over this. And specifically, I'm going to talk about a lot of the challenges we've faced in Istio. I've been working on Istio for about five years now, mostly on, you know, the control plane, which is basically a big controller. And we've had a lot of challenges that are somewhat unique to Istio compared to other controller projects. And so we'll give kind of a deep dive into that. And then talk about some ways that we can solve these problems and kind of introduce a different approach to writing controllers. So if we look at what are controllers, Kubernetes has this big blurb. It's very useful, but quite long. I like to think of controller as something that takes in some input and has some output. It's a very broad, generic thing. So for an example, in Kubernetes, a user creates a deployment. There is a controller that reads the deployment and outputs a replica set. That is a controller, some input and some output. And Kubernetes is not just one controller. It consists of a ton of different controllers that all operate together to give us the Kubernetes experience that we know and maybe love. So there's another controller that takes a replica set and outputs a pod. There's another one that takes pods and services and outputs endpoints.  You can have custom controllers that are third-party ones that maybe operate on third-party custom resource definitions. So I maybe have a certificate issuer and a pod, and I create a certificate. So that's the general idea, what is a controller? It's really driving this whole declarative API that Kubernetes provides us. The problem, though, is that it's really hard to write these controllers. And more importantly, it's hard to write them correctly so that there's no bugs that your users will find when they do some obscure thing that you didn't think of, right? I find that writing controllers is very low-level, and that's really the root cause of this. If we look at the primitives that Kubernetes gives us for writing controllers, you could operate a bit lower than this, but generally we're looking at an informer, which essentially allows you to subscribe to resources. So you can say, when pods are added, updated or deleted, call my function, and I'll kind of figure it out. This sounds probably simple, but it ends up being very, very, very complicated in practice to handle all the cases that are required. So if you look at a real-world controller that is fairly robust, tested, handles all these edge cases, even for the simplest business logic, it's about 400 lines of code. I can't really show a whole 400 lines of code, so I showed an extremely simplified view of what this looks like, but the simplified view doesn't really showcase how complex it is. The tricky thing, too, is that it's not just that there's so much code, right? It's annoying, but it's not the end of the world. It's that you have to be so precise in following it in the exact right order in the exact right way. I've written, I don't know, maybe 50-100 controllers of various types over the years, and every time I don't have another one that's written properly, side-by-side, and I'm copying-pacing the exact order, I'm always introducing some type of bug, and it's usually a slightly different one than I did last time. So you can find these types of bugs all over the ecosystem. This is a little bit easier. Here's one. We didn't properly use a queue for some instance handler. We handled events out of order. This could easily cause an outage for a user. Here's another one. For some edge case, I forget why. We caused to miss events, and now your data is incorrect. That could cause really bad things for users. Kubernetes Core is not immune to this, right? It's not a thing that developers are bad at writing Kubernetes controllers because they're not experienced, right? The people who made Kubernetes are also introducing bugs in Kubernetes controllers, right? It's not a developer problem. It's a framework and ecosystem problem. So here was an example where we were starting up too soon, and we were saying that we were ready and had synchronized everything, but we weren't, and so we could be serving stale data, which could lead to unexpected results. Another example of such a case in the scheduler, right? So specifically in Istio, you don't need to know what Istio really is, but if you're not familiar, it is a service mesh, right? And all you need to know for this talk is that we put an envoy proxy on each pod, and that proxy needs to be dynamically configured. So we have a control plane that is sending, you know, the proxy configuration dynamically to it. That's all you need to know for service mesh. So in Istio, what this looks like, and if I didn't mention Istio, is the service mesh and the service mesh I work on. It's basically one giant controller. So, you know, I showed the other examples. Ah, one input, one output. Quite simple, right? In Istio, we read 45 different resource types as inputs. And instead of outputting to Kubernetes resources, we're outputting to Envoy. Envoy has a slightly different API. It's called XDS. The details don't really matter. The key point really is that it's not just about one Kubernetes in and one Kubernetes out, right? We have tons of Kubernetes input, and we have an output that's not even in Kubernetes. So what's tricky about this is the scope is huge, right? We have all this information we need to manage, right? And the size of this state is also huge. The green stuff on the end, the XDS, if you sum it up across a large scale cluster, it can be terabytes of data, right? We can't store this in cluster, like standard Kubernetes controllers that we showed earlier do, where they're, you know, deployment to pod. We can't even keep 10 terabytes of data in memory, right? We need to be computing this on demand. And so it's a very different problem than a standard controller is operating on. And this problem isn't unique to Istio either. There's a lot of other controllers that are not just Kubernetes in, Kubernetes out that have these problems. Like in Core, one example would be Kube proxy, right? It's reading Kubernetes configuration, but its output is some IP tables rules in the kernel. So, of course, no one can write a function that takes in 45 inputs and mumbles them all together and produces 10 different outputs, right? That would be quite crazy. So we do split up into many different smaller controllers just like Kubernetes does, but we have to do it all internal to Istio in memory, right? So what we have is an architecture that looks somewhat like this. We have a bunch of smaller controllers, and each controller does a somewhat small amount of work, builds up some intermediate state, and then some other controller builds up intermediate state from those and so on and so on until finally we can produce our outputs, right? Now the challenge with this is that in the standard Kubernetes model, you have Kubernetes is the intermediate state for these, right? And it's giving us all these things for free. I say free because we don't have to go implement that in our code, but it's absolutely not free, right? The cost of reading and writing from etcd is quite large, especially at scale. And so in Istio, we simply can't do that. It's too much data, so we do that in our own application. So what this kind of looks like is we would have some controller, it's got some inputs and some outputs. We would get an event from the input, say a pod is changing. Generally the event just says like there's an update, it doesn't say what the actual information is, so we'll go read that back. We'll do a bunch of business logic to recompute some internal state, notify the dependency something's changed, and they in turn will most likely go read from our internal state. And we build this over and over again, all over the project, and we have to maintain this perfect state management. The thing that's tricky about this is that it's very imperative, right? I got an update. Now I have to go find what changed and go update it in all these different maps or indexes or whatnot. It's not like the experience you have with Kubernetes where everything's reconciled for you and it's simple, right? There's a lot of bugs that are introduced in this process. Another thing that's super important at Istio, and I think most controllers that run at scale, is event detection.  That would work for a demo, but it's not really scalable, right? We want to have whatever inputs change. We output the minimal amount of information, so we do the least amount of work. In Istio, this is absolutely critical. The output is extremely expensive from a compute and network bandwidth perspective. So anywhere we can stop an event from kind of trickling down the chain is a huge win for our users. The challenge here is, again, because we're re-implementing this internally without having Kubernetes as an intermediary, we have to do this all ourselves. So Kubernetes, to some extent, has this on with server-side apply. It works in a lot of cases, but it can still be very deceptively hard to use correctly, and you're still sending these right requests to Kubernetes every time you want to make a change. It made a side, there was nothing actually changed, so I'm doing nothing with it, but you still sent that API call. You still sent the full object to the API server, and it had to process it. So it can still be quite hard. And, of course, for Istio, so we have to implement this all ourselves. A lot of the Istio codebase is all about just these random optimizations for some specific thing. Like, one example, we have some annotation that I think is autoscaler or something's adding to services. It was adding it a lot, so it was pushing a lot of information down the entire chain. We add an optimization that says, ignore this annotation. That's really dangerous. It requires knowledge of the full system. Did I skip the annotation way up the stack, but later on I needed to read it, and now I'm serving stale data? Those types of issues are a numerous source of bugs, but the opposite is also just as bad. If we don't skip those events, Istio is unusable. Even a single optimization like that for users at large scale can be the difference between Istio using half a CPU or 100 CPUs, or just not even functioning at all. Getting this right is absolutely critical. I want to briefly go over some actual examples of what this actually looks like in practice. I won't go over every line, but just broad strokes. This is an example of one of the smaller controllers in Istio. You can see we basically just have a bunch of different maps of things. Every time we get some event of some podge change, some service change, some node, whatever, we have to go recompute all these different maps. I need to find this podge change, what were all the addresses and what index was that in and go update all these things? What's a delete? What's an add? I'm doing all this manual work. It can be even worse too because a lot of the objects are related. Maybe a service changed. I need to go find all the pods in that service and then go recompute all the pods. These are dramatically simplified examples because I can only put so much code on slides. In reality, like I said, we have 45 objects. We have lots of relationships between these objects, and it gets simply unsustainable to manage the relations of these independently. So, quick overview. Istio is one giant controller, and it's not sustainable to implement one giant controller this way without having proper building blocks to do it. If we take a step back, how can we improve this? I think some of the goals that we should be targeting is that a controller is easy to write correctly and efficiently. We want someone to go in and write the obvious thing, and it should be both bug-free and efficient. That's not the case today, I think. You can write a correct controller. You can do it in an efficient manner, but it's extremely hard to do so. Part of this is being high-level. We want the controller authors to be writing about business logic. They shouldn't be concerned about all this low-level state management. Was it a delete? Was it an update? Do I need to update this index or that index? And they should be composable so that we can have all these building blocks and just add them together to build a full system. Istio is not going to be one giant function. It's going to continue to be many different components that all build up to build Istio. Now, after writing all this stuff, I realized one simple meme could probably explain this better. Istio gives users a declarative API. You may not say it's easier or great to use, but I think it's at least better than the alternative of manually saying, I want a cluster IP. I want a DNS name. You declare your intent. I want a service. But this is all possible because under the hood, we have these imperative controllers that are doing all the dirty work for us.  But that's simply not the case. There's no real large-scale controller that is bug-free, I would imagine. So we need to push this further down. We need to make it so that controllers are in this declarative model as well and push the imperativeness, which is probably required, down to an even lower level so that less people need to worry about it. I saw probably half the people here raised their hands saying they were involved in writing controllers. You all shouldn't need to be writing all this imperative code. A small set of a library or something could manage that for you, right? So I've been thinking about this problem a lot over the past few years of working at Istio, and I've kind of done some prototypes and investigating kind of how can we solve this problem. And I think ultimately, it is possible, right? If we consider a simple interface like this, you know, we have a collection of resources. You can get them. You can access them, and you can watch them. It sounds quite trivial, right? It's almost identical to Informer, but we can build an ecosystem around this that makes writing controllers much more efficient, right? So what does this look like? First, we need a bunch of ways to get data into this interface, right? The obvious one is Informer, right? We already have Informers. The API is very similar. In Istio, we also have a mode where we can read from files. We can read from Kubernetes at all, or for whatever reason you want to read from files, maybe testing, right? You could read from in-memory objects. This could be useful for tests or other things. You maybe read from some external state. Maybe you want to store objects in a SQL database or S3 or something. That's totally fine. The interface is agnostic to where we're getting it from, right? In Kubernetes, that's not really the case. Anything that's not reading from Kubernetes, you don't have Informer. You can look up your own abstractions, your own implementation on how to manage these inputs. Now, the most important part, really, is what we do with those inputs, right? We don't just take the inputs and read them and call it a day. We have to actually produce some output with those. So we want to have transformations like indexes. Can we look up things efficiently by some value? We want to transform them. We talked about deployments turning into replica sets. We need to have some way to model that transformation. And they need to allow complex compositions. The service case I gave was fairly simple. We read a service in pods. We produce endpoints. In Istio, we're doing a lot more complex compositions. We're reading five, ten different resources and merging them all together into one state. We need to be able to efficiently model those. And then finally, what do we do with those once we have them? We need some outputs. Of course, writing back to Kubernetes is probably the most common case. In Istio, sending over XDS is probably common as well. Or maybe you want to write to some cloud API. Maybe the load balancer controller. We have all these different inputs, outputs and transformation steps that are kind of the building blocks for building controllers. So what this could look like in practice I think is a... Well, let me just go through actually an example. Say we want to build a config object in memory that is managing various config states of our service. In this example, I'm going to read from two config maps, kind of merge them together, and I want that to be dynamically updated. So what this looks like, first we build a collection from a config map informer. And now what we want is to turn these config maps into this config object. So we're going to build a new collection. And let's go through some of this. So first we fetch some config maps. So we have to make this a bit more complex. I'm saying we have two config maps that we're going to merge together. And then eventually we merge them, right? This code is very simple. It's not dealing with any state in Kubernetes at all, right? And what's happening here under the hood, like I said, we have Kubernetes Informer. We are building a function. We just tell the library how to build a config. We don't tell it to go fetch the data, right? Well, we do tell it to fetch, but it's a declarative intent. We're not saying I'm reading this object right now. We're saying when you want to build a config, you should do it by fetching from these config maps, right? And what that allows us to do is push all the state management into the library. The library can detect when the config maps the inputs change and knows to recompute the outputs the config object. And it knows that anyone that later on subscribed to the config updates, it knows to also notify them if it changed. So we see that a config map just added some random annotation or something we don't care about and the config output doesn't change. And at that point, it could automatically know not to notify dependencies of config that it changed. So, yeah, I just actually covered this, but, you know, we can do the event detection that I talked about automatically at the framework level so that each controller isn't needing to do this in their own controller code. So just going back to this diagram, like if a deployment we're reading from didn't change, we could short-circuit right away and, you know, all this is done out of the box in the framework for you. Just some more examples of things that we could do with a framework like this would be something like an index, right? It's pretty common that you still want to look up things efficiently, right? We want to find a pod object by its IP address. You can actually do this in Kubernetes and Formers, too, so this one's perhaps less interesting. But just to show kind of the flexibility of what we can do once we have a common interface with things, right? Even though Kubernetes and Formers have indexes, you can only have Informers on Kubernetes objects, so it's not universal, right? So here's just a simple example. I'm saying in pods fetch a key that's based on the pod IP and then later we can look up the pod by that IP. Now, most things want to write to Kubernetes eventually, right? That's the end goal is we're reading some inputs and then we're writing them back to Kubernetes. We can probably be modeled by a framework like this, right? We may want to build up a collection of some desired state. So I admitted the details of how we're doing that, but you can imagine you've defined a collection of here's how the pods that I want and then we could actually watch the pods that actually exist in the cluster and then we can simply tell the framework to reconcile them, make them the same, right? And it knows how do I delete a Kubernetes object? And it knows what it wants and what it has and can do that dip for you, right? It's very similar to using Kubernetes as an end user but as a controller writer. Now, having this higher level library also unlocks a lot of potential deeper integrations and tooling for developing controllers. So this is an actual diagram that was made by code, not by myself, auto-generated from a collection that I wrote. So you can see we have this automatic architecture diagram that's just derived from the code, can easily help give an overview of how the system works, where dependencies are. I didn't go this far, but one could even imagine a cool like animated diagram as the change flows through the system. Or perhaps more useful or realistic, we can add tracing, right? This is probably way too small to see but I'm sure you've all seen tracing spans. This shows a single event propagating through a big tree of collections that are building on top of each other. So we can see that this event impacted this other controller and this other one and in turn impacted this one, how long it's taken at each spot. You have a strong visibility into what's going on in the system and even the performance of it. I don't think that in most Kubernetes controllers today that there's anything really like this out there that gives you this amount of visibility into what a controller is doing. Additionally, testing is one of the biggest parts of writing a controller today because you have to deal with all this weird state. In Istio, most of our tests of controllers are not actually about the business logic at all. It's more about if I took this object and updated it, was it the same as if I just created it to begin with? It's all the state management. It's not actually the business logic. But because we put all of our business logic in these kind of pure functions that are just some input to some output, you can just go test that. You don't need to test all the state. We also have a bit more potential future possibilities for things once we have kind of a collection of ideas. Perhaps we could add some sort of automated fuzz testing because we have this higher level thing. When you're working with the lower level primitives like Informer, it's harder to build these nice integrations around testing, around visibility, and whatnot because it's less opinionated. So where is this now and where are we going? Everything I talked about does exist in some form. I would say it's basically demoware at this point. It's not just an idea in my head that we can do this. I've actually gone and implemented prototypes and whatnot. In fact, probably about 50% of Istio over time as I was working on this, integrating it and thinking up ideas, I've replaced with this model and it seems to work fairly well. That being said, deploying something like this to production is a far different matter than doing so in my own branch. So where are we going? It could be a new library. It could be something that we start seeing others adopt. It could just be something that quietly disappears or quietly emerges into Istio. It really depends. I heard a lot of people saying that there was interest in this, so if there's more interest, I'd be happy to discuss and bring this more broadly. If not, I think the ideas are useful, if not the library. For me personally, I think a lot of you may be looking at this to me and like, wow, this is way too much magic. And I feel the same way, which is why I haven't been pushing this in Istio for the actual merging to production yet. I think probably dialing back a little bit of the magic would go a long way in making this something that's reasonable to use in production, but still giving a lot of the benefits. So, yeah, that's it. I think we have some time for questions. I'll be around afterwards as well, but I do have to run to a panel right after this. So if you have more questions, you can find me just downstairs at Service Mesh Battle Scars. So, thank you, everyone. And yeah, come up to the sides if you have questions. There's microphones. Hello. I'm Xu Dong from University of Illinois. Great talk. And especially like this is about the testings. And I'm here to ask you because we are actually building some automatic testing tools for controllers. And especially, you know, fuzzing testing. So I actually want to hear your opinions on because fuzzing testing is also very broad topic and there are many ways you can test your controllers. So I want to know like what kind of like specific testing scenarios or testing inputs you would like to, you know, try to test, for example, E-Steel or some other controllers. You think of E-Steel, you know, super useful. Yeah, in the current state of E-Steel, I think one thing I've been thinking a lot about is actually that as well, fuzzing the controllers, right? Is like, like I said, most of the E-Steel code and complexity and bugs comes from all this manual state management. So testing things like if I add and remove something multiple times, is it the same as if I never did anything or, you know, just updating things that are things like that seem like could be very well covered. In some ways, moving to a framework like this almost takes away those use cases from the application or the controller developer. It would of course push those into the controller library where they would be useful. But I still think there's possibilities like if you have invariance in your even if it's just a function of pods to name insets or whatever, or that's backwards but, you know, there may be invariance you want to test so it still makes sense there I think. But in many ways, I think probably a lot of the bugs that you would want to test today are around all this manual state management. Great, thanks. I think if we can probably talk them all. Yeah, sounds good. Hello, thank you for the talk. So you talked about there are like 45 number of different controller talking, controller talking to the central controller. Yep. There have been a lot of works in network layer verification. Seems like that technique can be useful to catch any undesirable behavior when there are multiple controller interacting with each other for service layer networking. Do you think it is useful? If it is, do you have any concrete example? It sounds like it might be useful but I don't know enough about what you're talking about to give a useful answer I think. Like for example, these controller want to do A and there's another controller want to do B but this A and B kind of conflicting each other for some way. If we can verify this conflicting behavior with some magic model or program will it be useful? It's maybe, I'm not sure in Istio it's more like all the controllers funnel down to one output really. It's not like we have multiple things writing to the same thing and those kind of conflicts. Which is the problem space that I've spent a lot of time in. It sounds like it could be potentially useful in other areas but I haven't thought too much in those spaces. Thank you. I have a question over here about what you just said about they all go to one single source of logging. How do you track that because it can get really messy if you have a lot of microcontrollers to just separate the data? Do you have any advice on that? That's something we've struggled with a bit. For logging is that the main concern? Each of our controllers we have, I don't know about in our library or logging library we have a scope label and so each thing has a scope and we're trying to move towards more consistent structure logging that has this Kubernetes upstream so that you can have a consistent way to say x object updated and it's in a structured manner that you could query over but we're not actually super mature in that area either. That's something we're working to improve as well. Is each controller their own thing or is it a lot of controllers within one operator? We have one binary but it has a bunch of subcontrollers and stuff to just organizationally and to make sure that we don't have one giant super function. No problem. Thank you very much for this. This is really informative. I was wondering if you think this would be useful to upstream to something like the controller runtime library which I feel like has sort of a similar goal of simplifying the controller loop? It's possible. I didn't really want to go out and push this and be like, ah, you guys should take this. If people are interested it sounds like a possible path forward but I haven't really talked much with them directly yet. But definitely interested if others are. Yeah, I definitely would be interested in something like this in that library. Thank you. How do you go about tracing controllers and linked resources? Yeah, the thing I may have been slightly misleading on the tracing slide and overselling it. The thing that enables it to be done in this manner is because our controller is one binary. That's how we propagate the context. If you're actually writing to Kubernetes and then a different process is reading it I haven't seen any solution for propagating context through that. So in Istio it's all one process so we propagate it in memory so it's a bit easier. Okay, that makes sense. So speaking of interest it's entirely possible I missed a link. You mentioned having a branch where you're experimenting with this in the Istio code base. Is there somewhere that we can go to get the code and play around with this? That would have been a very good thing to add a link to here. Yes, I'll try to update on the sketch, I guess, if I can add my slides and update it, but if not I don't know you can ask me on Slack maybe and I'll post something. It's just in my fork of Istio really but it's under probably some obscure branch name. Okay, thank you. Yeah. Yeah, so I have a question on testing. Our, we found test ENV to be pretty sub par for what we wanted so we went with a more end-to-end kind cluster type of testing but as I was looking at your subcontroller with the data flow do you find that the writing tests for the subcontrollers kind of as a more unit based approach negates the need for a complete integration test or end-to-end? I think I mean the generic answer is both are useful. We definitely don't in Istio exclusively use end-to-end test because there's so much surface area to cover right and end-to-end tests of course are quite expensive so we tackle them at both layers. I think in Istio we tend to use we use the fake Informer library quite a bit. I think others tend to prefer like the cube end stuff. We never found much need or success with that and we were perfectly fine with the fake client but we're also using a lot less functionality like server-side apply or other things that aren't in the fake library but with the fake library it's been fairly seamless to write a unit test. Now the problem we've had is that those unit tests are not testing the useful thing we actually want they're not testing the business logic they're testing all this Informer issues. Thank you. Alright looks like that's everyone. Thanks everyone.


Greetings! This week I'm going to tell you about the murders of Molly Southbourne by Tade Thompson. This is another lucky find that I got free from Tor.com. If you're not following Tor.com, you should. There's so much great science fiction being given away there. But I enjoyed this book so much that I immediately went on and bought the sequel, The Survival of Molly Southbourne, which was almost as good. I recommend it as well. But how do I describe this book? We start with a little girl who was raised in isolation by her parents on a remote farm, and all of her life they told her, if you ever see yourself, scream and run and find one of your parents, and never ever bleed. If that doesn't intrigue you enough to want to know what this is about, I'm not going to tell you anything else about it. The unfolding of the secrets of this girl's life is so strange and so unique. I've never read anything quite like it, and those of you who know me from the past know how much I like something new, something I've never seen before. And in the second book, Molly starts to discover that everything she learned about her life in the first book is probably completely wrong. So you have that to look forward to. Thank you for watching. Please come back next week for another review. And in the meantime, please become a sponsor. Help me make more videos. Follow the link on screen and in the description below where you can make a monthly pledge or a one-time donation. And please leave a comment. Let me know what you think. Bye.


Well, hi everybody, it's Sandy and welcome to my channel today. We're going to talk about art impressions watercolor I've been sharing a lot of these on Instagram lately and lots of you are asking for a tutorial so today we're going to do an intermediate project and I want beginners to pay attention because I'm going to show you some beginner tips along the way and some beginner shopping tips at the end because I've learned a lot from teaching some beginner classes So I have an arbor stamp this can be an intermediate project not one I would recommend you beginning with but I have the stamp a palette some brushes I've got my my sticky notes for masking a couple stamps and I'm going to use more stamps than that and watercolor paper and Some Tombow markers you don't have to have very many actually didn't even use all these colors in this project so you don't have to have a whole lot to get started but you do need water-based markers and Art impressions recommends the marvies, but you can also use distress markers You can use mementos tombows lots of different water-based just not anything alcohol-based and this is my collection of The art impressions stamps you can see you can get very overwhelmed very quickly and that is what a lot of people tell Me they take my beginner class because they've bought a gajillion like me and then they're like I don't know what to do So I would recommend starting with the starter sets and not with these advanced ones even though I have a bunch of them I've done a lot of practicing with them, and I know I'll use them But here are all the flowers that I've pulled out of all the different sets and I keep them all in one container So that I can use them all together With all the other stamps that I get and these are all stamping up containers that I I bought some sets in a long time ago And that's what I store them in Here is an advanced project and a lot of people see this and like oh, yeah, I'll buy the stamps and I can do that one So there's a house. There's containers. There's flowers and grasses. There's a gate. There's bushes There's trees. There's clouds and you can spend a gajillion dollars And then sit there and stare at it all and freak out because you can't do it because you don't you know you have to understand the principles of how to build an image like this and The beginner sets are much more conducive to doing that and I would recommend those I'll talk about those and show them to you later on in this video It is going to be a long one. I'll apologize now for that because there's so much to share I'm going to be using the six by six block from fluid 100 It's a higher end paper, but you can also use some lower-end paper And I would recommend practicing on the lower-end stuff anyway And I have my stamp already on my block I'm going to take my Tombow marker and I'm just going to color on the surface of the rubber stamp and Don't worry if you get interrupted by the dog barking or the doorbell ringing or something Because you can put the color on here and it'll stay there until you clean it off and cleaning off off Is either stamping it or washing it so if you get interrupted in the middle and Like I did on this one and I just huffed on it and just breathe on it real quickly And that will re moisten it enough to be able to stamp with it So figure out where I want to put it and stamp it onto my paper It's going to look really light and I'll tell you right now It'll be surprising to you how much color you get out of that by the time you're done What I always do is I stamp my main focal image and sometimes two focal images if there's going to be two main pictures Two main items and then I do whatever sky or background that I'm going to do The reason is because I don't want to have to paint a background around a bunch of little teeny tiny flowers So if I'm going to do a lot of flowers or trees I don't want to have to paint blue around the edges of each and every one of them Here if I do my blue sky and then it's all dry by the time I stamp flowers over top of it It's going to look very natural and it's just going to cover that blue So you don't want a too intensive a color or something It's going to clash with whatever you're painting over it But you can just paint your sky first and I'm going to paint a little bit inside of the arbor Like some of those little tiny sections Just in case I don't have flowers across all of it because I haven't decided how many flowers or how much it's going to spill out over I Would recommend if you can think ahead to come up with a plan But I usually just let the stamps kind of tell me what they're going to do Because I I don't plan out a lot of this I just wait and see kind of what happens you do have to have enough of a plan So you know what's in the background and foreground and that's really about all you you need to plan out I'm adding water along the top just to soften out that blue edge And now I'm going to start stamping some of my other images So I'm going to put it on my block. That's a Lawn Fawn block by the way That has that funky cool shape. So it's really easy to hold in your hands I'll have links to that in the doobly-doo in the description So I'll stamp that and then the little mousy. I'm going to stamp him in multiple colors And I have him stamped mostly in the gray and then I added some brown on his back and I give him a little pink tail And you'll see how that plays out when we add the water to him So I'll stamp him sort of in the foreground So I'll have a background behind the arbor and then the arbor and the the container in the middle and then in the very front is going to be this little mouse and you can see I got a whole lot of brown all of a sudden and Sometimes some of the colors depending on your marker or how it was applied to the block or how it was stamped or anything We'll have more color and sometimes we'll have less and it's really a matter of what happens when you hit it with water And here I'm going to hit a little bit more clean water on the top of his His nose and his tail and stuff because I want those to remain light And I as I was painting the brown I was picking up more brown color So I wanted to wash my brush and make sure I got a really light color there on his top of his head On something like this you want to make sure that if you're going to add any detail on top of it You do it after it's dried because in a few minutes. I will make a mistake It's not a huge one, but it's one that I wished I had done something differently with But here I'm doing some pink in his ears So I just dropped a little bit of pink that I had scribbled onto the palette dropped a little bit inside the ear and painted over it with water gave him a little pink on his cheeks and Then I went in with the Bullet nib of the pen on the other side and drew the eyes back in because they didn't stamp very well in the gray ink And then I decided this is my mistake to add the whiskers and I did that while that that was still wet So my my whiskers on this forward side on the right hand side of him got a little bit softer and mushier But I did want to add some gray to the brown So I have gray that I've scribbled on the palette and painted it over the brown and it blended perfectly and now I'll color the Container and here you can see a lot better to how that color just pulls in From each of the lines now different marker lines will pull in different amounts of color and Certain ones are going to hold more of that line the integrity of that line Will stay or go depending on the amount of water and then which kind of marker What I found is that the Tombows are kind of mid-range they hold the line but they also do watercolor look and the distress and the Momentos tend to hold the line a little bit more So if you want more of a sharp line you may want to use a certain kind of marker But you'll have to test out how yours work and how your technique works But the clean color pens which are all the rage right now They don't hold a line at all because as soon as you hit them with water they want to play That's just the way that they're built So I would not recommend the clean colors unless you're just going to do like washi flowers because Those they do very well very very well But if you wanted to stamp this arbor in the clean colors that that whole line would just disappear And it would just be a rounded blob so I Am going to do a test with a lot of different kinds of markers at some point but Not today because this is already a long enough video So here I did some stamping that didn't go so well And I had this little bush stamped on the top in green and on the bottom in a darker green and the top Didn't work very well, so I just added it with my pen So if you ever have stamping that doesn't work really great Just scribble in a little bit and especially with these Tombows since they do turn into water really easily And they do this watercolor look really easily. They they do this very very well Have some really nice little bushes I'll stamp the same thing again so you can see how I do it I have green on the top the light green and then the darker green on the bottom Didn't worry about blending anything on the stamp itself. Just scribbled it on there And here I got a much better looking bush so you can see what that stamp looks like but I can add the water to it and But a boom but a being I get a really nice washy looking bush Now I could have used the trees in the background because I wanted to add trees to this But I wanted to show you that you can take something like this hollyhock stamp from one of the sets and Make trees out of it. So even though it may look like hollyhock hollyhocks for the moment It's going to transform magically when we hit it with the water So you can look at any of the stamps in any of the sets that you get and try turning them on their side Try painting them a different way painting them in a different color can sometimes Help your mind to see them in a different way So that like with this one I thought of it as hollyhocks for a while until I accidentally stamped it as a Like a little piece of a bush and then I suddenly went wait a minute. That looks like it could be a good tree So as soon as I start doing the little Bob Ross painting on it little happy trees The hollyhocks turned into a line of trees. Isn't that sweet? So think of your stamps in unique ways and let them do more work than just what you think they were originally intended to do Anything you paint in the background that you want to look like it's at a distance Should be a little lighter in color or a little softer in color so you want to use a little bit more water for them that kind of thing and Anything in the foreground you want to be a little bit on the Sharper edges and a little bit more intense color And here I wanted to create a tree line So I just added a little bit of green marker at the bottom that Container is going to cover that area with more flowers. So I just didn't stamp anything in that area above it Now I'm going to start creating what I sort of think of as a trail for my my flowers to go down I take a light green of whatever sort and I just start painting Just just clusters. I want to have Whatever's going to be in the background I do in a light color and I just let it be really washy so I can get those general shapes down and figure out where all that stuff is going to hang out at I Wanted to see how they were going to cascade over that arbor and Then once I get to the portion where I'm going to add my flowers and here I it's mostly added here after it was dried So I want to let you know that you want to you want to mostly let some of this dry You'll see in a moment What's going to happen when I don't let it all dry completely because there is one spot that I'm going to hit right there Where there was water so if you do if you want that look then you can definitely stamp while it's wet but I've got some pink flowers and some Purple flowers both stamped in there the purple ones are teeny tiny dots and I'm just going over all the pink ones first and I try to make clusters Clusters seem to look more natural to me clusters in different directions and of different sizes and stuff if you make anything look too regular like you know Equally spaced and that sort of thing it won't look very natural because nature doesn't make things look that way So I'm adding some greens some little darker greens for my container And then I decided I wanted to add my darker greens around my arbor and I'm only having the arbor Spill a little bit over on the right and then some of it is going to twist around Down on that left-hand side because I did like how that sky still shows through in between Where I had painted it in between the arbor and now I wanted to add some definition to the arbor so I'm taking some green from my palette and I'm adding it right around the edges of that arbor because that's going to add a little definition So any of those places where you might lose a little bit of those edges It's really easy to just paint them back in and I'm just painting scribbles I'm not painting like super fantastic things and almost little grassy shapes little flick marks and You know you can do all different kinds of things with with something like this to add a little bit more color and detail now as I'm doing this, I'm realizing that my I Just wasn't feeling there was enough fluff at the top Like it was looking too groomed Because as I said nature doesn't doesn't do things in a kind of really groomed sort of a way So I just added some random green ones at the top just to add a little bit of extra greens and It was a little too intense. So I just dabbed off a little bit with paper towel.  There's my hollyhock again I'm going to let it look like a hollyhock while it's in there because now it's in in the container as flowers And I'll add water over top of some of that and blend out some of the purples and the blues and the the pinks together and As I add consecutive layers on top of each other I do less water on the front ones than I did in the back and then I'll do these tiny flowers in the very front and not Add anything there is a time lapse on this. So there these did dry somewhat before stamping those flowers on there so Now I wanted to add a little bit of ground to this But here is another one of those tips, which is you don't want to touch the water to the images you already have there So I don't want to touch You know the the bottom of the arbor or the mouse or anything like that So I've got to figure out how to paint around it carefully so that I don't end up Bleeding the mouse color out into the grasses So this is one of those places where having a really tiny fine brush really helps a lot and The silver brushes that I'm using here and links in the description work really great because you can get into all this teeny tiny areas and Not really, you know, you can get really close to the mouse without actually touching him Which is really helpful So I'm adding greens and brown so I can make a little bit of a path and Here my mouse is completely dry So I'm painting on a little bit of gray detail to add a little bit of fur to him with my brush Little color off the palette and if I add water to it now, I won't get as much movement Because a lot of that is already dried. So it really came out nicely there are a couple different size grasses in some of the different sets and I'm using the smaller ones in the distance and the bigger ones up front and You can see I painted the grasses right over top of the container So you don't even have to mask out some of that if you just paint over top of it Mush that color around a little bit So I'm adding a little bit at the bottom of the arbor and now I want to work on the area around the mouse Those pieces of grass are not in real good scale to that mouse because he he's really actually very much in front Or else he's a giant mouse So I decided since I wasn't having any success painting them larger I just took the marker and I made little grass lines So that the grass was a little more in proportion to him And I painted it right over where it was already wet with the tombows You can get away with that with some of the other markers like the distress markers I haven't had any success painting those right over top of wet So sometimes you have to wait for it to dry and sometimes you can paint it right over top Really depends on the marker type that you're using and my last step here is to add a little bit of Dry brush and dry brushes where the brush has color on it, but not a lot of water And I'm laying it kind of on its side across it. So it's picking up the texture of the paper My final little step is my signopen which bales me out of a lot of different things The little container full of flowers had gotten really mushy and I wasn't very happy with it So I went in and added some clean ends lace dots as well as dots in the center of those little pink flowers And I think that little extra detail made that much more of a focal point For the painting and I think it really helped quite a bit So if you get any areas that are like really dark and mushy just add some clean ends lace over it and it'll really help Now to assemble my card I took a 12 by 12 and cut it in half because this is a six by six image and shaved a little bit off that And I thought well, what if I put some pink under it? Maybe that will help But that didn't seem to do it either. I really wanted a stitched edge around this for some reason so Since I don't have a square six by six I do have this This border die from pretty pink posh and it one end cuts and then there's a stitched edge But there's two of them. So how do you cut just one of them? I just want to cut the outside one Not the inside one So I'm going to tape it down with some washi tape onto my image And run it through my die cut machine and hang on my hand will move out of the way in a second But I'm only putting that bottom edge in between the plates So that plate place where you see the edge of the plate That's the only place there's going to be pressure The other part is hanging off And that part that's hanging off will not cut So it does take a little bit of a deep breath to uh do that and And trust that it's going to work But here you can see that I have a lovely stitched edge around it So with this die and partial die cutting you can get any size rectangle that's stitched without having to Conform to the size that nested dies come in There's the finished card and I you can tell that the color is a little brighter because I can get better color on still photography than video And I added a couple layers to the inside pink and green since The card base was really lightweight since it's 12 by 12 paper This is a piece that I did when I was doing some demos and you can see I used like every image I could probably shove on to one piece flowers and trees and carts and chairs and everything You don't need to do that much And here's one with the rocking chair and the containers and the flowers It's more of an intermediate project than you may want to start with And I'm telling you this for a reason because I just know too many people Who have bought too many stamps and gotten themselves overwhelmed and confused But these stamps make it very easy. They have a focal image and a couple flowers And I'm going to link you to some of these in the description down below so you can check them out You can get the entire image that's shown on the package with just the little stamps that are in there You don't need to have every stamp no demand in order to do something even though you may look at the painting I didn't go wow Here's a few other sets if you want to get a little variety in your flowers There's a foliage and a flower set and I do like these a lot. I use them in a lot of my pieces So I just want to help you not feel like you have to do something like that These are the cards that I'm teaching in the classes And they're using these the simple sets that have just a focal image and a couple flowers You can stamp them multiple times and in multiple colors in order to get More of a massive flower look Like especially on this one. That's really it's really using the birdhouse set and just the flowers that come with it this one has a house And a kite and just a few little beachy grasses And this one's got just a chest and a few flowers You don't need to have everything known to man in order to do beautiful cards And I would recommend starting with just one of the smaller sets until you know that you like doing this technique And I hope that this was enjoyable and educational for you Here are a couple other videos if you want to see those there's links to everything in the doobly do To both these videos to other projects to my getting started with watercolor That has lots of information about brushes and paper and everything Lots more supplies and everything down there and I will see you guys later. Have a great day


This man standing to my right, my immediate right, can't miss him. He is making his valiant and triumphant return to the 21 convention stage. He came by last year and he's excited to be in Orlando. I know he's hopped a couple of flights to get here, so he's a little exhausted. But we're going to have to prime from this stage, he's really excited to speak. So we guys get a lot out of it. This is the head of PUA Training US, Adam Lyonson. Take it away. Alright guys, so here we are back in Orlando. I've got a whole bunch of stuff that I want to talk to you guys about today. Some are just my basic observations. I've found, I don't know if you guys agree with me, but I do a lot of these talks. I travel around the world and I go to all these different public speaking summits. And people talk a lot of fluff, don't they? It's something that I've noticed, you'll sit there listening to someone chat for an hour. And the actual content that you can pull away that's useful for you is pretty much useless, right? And there's a reason for that, I'm sure of it. And I'm sure that reason is they're going to sell you a great product at the end of it that's going to have all of that great information in that they kind of hinted about.  And what I'm going to do is I'm going to give you guys two very specific topics and I'm going to try and teach them in their entirety. I don't plan on selling you guys anything, but what I do want to do is give you a whole bunch of free stuff on top of the two lessons. So the only website that I want you to take note of, I would like to write down, is www.puatraining.com forward slash under 21. I spoke to Gambler in the UK and I've got them to give away a whole bunch of their really expensive paid material for you guys. You can just go on there and that will be unique for you, nobody else on the website knows about it, it's only for the people in this room. You can get all that stuff for free and that's specifically for the under 21 guys. And then like I said during the talk, I want to take you guys through two topics that I'm kind of in love with at the moment, but I want to teach. And the first of these topics is the one I'm going to start with which is closing. Now there is a massive problem in this community, right? And I noticed it a couple of years ago and the problem I had a couple of years ago was that dudes didn't hang around with girls. They just hung around with other guys. I came out and I said it, I stood on stage. I've been in the community for a while, no one knew who I was.   And since being in the community the more I've looked at it, the more I've analyzed it, I've realized there is a new problem. Serial openness. Guys that run around opening, right? And I mean this in the nicest way. I really don't want to pick on somebody because he seems like a genuine guy but there was a minute before I came up, the guy that's MCing said, has anyone got any great stories that happened last night? And this guy goes, yeah, this opener I used and he told this story of this opener. And it was a funny opener. He's like, put your hand over it, that was me.  And that's funny, okay, I get it. But that was the end of the story. He opened and I see it. I go to these venues, I see these poors running around, opening people and they're so serious about it. Dude, I got a guy emailed me. I beat my level, I opened a thousand sets last week. Basically you irritated a thousand women, that's what you did.  They're so concerned with how many they opened. I got people emailed me, Adam, I've got this problem. I opened this guy using this line. What do you think I should use? On boot camps, do you know what most PUA instructors consider a demo? If you open. Before I got married, when I demoed, I did it specifically to close. I'd make out with the chick, I'd look at the student and go, did you see how easy that was? That was my idea of a demo. You can't open, but other PUA is like, well, you should be able to just randomly go up to people and open them. No, you shouldn't, that's opening, that's annoying, that's irritating. Don't open people if you're not going to do anything with it. Close. And that's a massive issue, that's a problem that the community has. And I wanted to address it. Before I do, I want to warn you about some of the hazards of closing. Now, I know that a lot of my really good friends love my stories on stage and some of them have heard this one. I think the majority of people in this room won't have. I'm going to warn you in advance. If you have a little bit of a sickly stomach, if you're somebody that doesn't like graphic descriptions, you probably want to put your fingers in your ears for this next story. I don't want to tell you about the hazards that come from closing. I met this girl, gamed her very well, and we eventually end up back in my place. Now, there are a number of little, what I love is how all different events come together to cause problems. And if you guys know this, you go, oh, just do that, that doesn't matter, and oh, got that going on. But when they come together, everything falls apart. And in this one particular incident, I thought everything was great. I brought the chick home, she was ready for a same night life. It's all right? Not bad. And I just perfected my squirting technique. So I'd learn how to successfully make pretty much any girl squirt. Now, you'd think this would be a really good combination, right? But I added another factor, because, you know, you got to do that. My flatmate wasn't him. And I thought you don't be really funny. It would be to do it on his bed. So, not that my bed was full, my bed was empty, I just wanted to do it on his. So if he is watching the video, Amog Scott, I love you very much. Although he doesn't know this happened as you're about to find out. So she's lying on the bed, and normally when a girl squirting, I get lying on their back, right? But I thought, again, I'll add something else, this mix. Let's get one of all fours. Why not? All four squirting, it sounds like fun. What I'd effectively created without knowing it was some kind of rudimentary projectile device. Because she's on all fours, right? We were asked up in the air. And so I'm going at it. Don't watch, but I'm going at it.  And I'm like, no, that's okay, it's supposed to happen. Sorry about that, relax, let it happen. So she does, and she squirts straight out the back of her across my mate's bed. Now, I kind of knew that was going to happen. It was kind of going to be funny, you know. What I didn't expect was for her to come on at the same time. And so she had period stains all over the bed that squirted out the back of her. And that's kind of possibly the most gross thing that ever happened to me in the game. And you think I'd be proud, right? I closed. Same as I lay. Great. Not so great, actually. Funny enough, closing has problems, okay? You're worried about opening? You're worried about the closing problems. They're more expensive, okay? You have to pay for cleaning bills and stuff. Closing problems are much harder. But closing is where the fun is. Closing is where the funny stories happen. Closing, you're really not doing anything. You're just running around speaking to God.


This 2019 GMC Yukon XL is stock number 1-2-3-1-0-z. We are here at Summit Automotive in Fond du Lac, Wisconsin. You're new and used SUV headquarters. This 2019 GMC Yukon XL has the 5.3 liter V8 engine. This vehicle has been fully-safetyed and inspected by our service shop. It has a fresh oil and filter change. All the fluids have been checked and topped off per the state of Wisconsin inspection process. And this vehicle is 100% ready to go. Crimson red tint coat is the color. We shoot all of our videos in 1080p, 60 frames per second. So if you have HD capabilities on your computer, tablet, smartphone, or television, I highly recommend turning them on right now. Because it is your best way to check out the quality, condition, and options of the vehicle before seeing it in person. We're going to go inside, outside, under the hood, start it up. So turn those HD capabilities on right now. And if you like the video and want to subscribe to our YouTube channel, the upper right hand part of the screen is a subscribe button. Click that and then click the bell notifications. You'll get updates on the videos we do each and every day here at Summit Auto. This one comes with the 20-inch polished aluminum rims. We kind of got a clear coat on the polished aluminum, but really nice condition. It has continental cross-contact tires. These are P275 55R20s, and they have probably about 60% of the tread left on them. Front fender is in excellent condition. And in sceny denser dings in there, it does come with the LED running lights, projector lamp headlamps, and the factory fog lights. Front bumper parking sensors, the front bumper itself is in excellent condition. I didn't see any major scuffs, scrapes, or cracks on that. And the headlight lenses are crystal clear. The hood is in very nice condition. I didn't see any major dents or dings on that. And the passenger side front fender looks really good as well. Passenger side front rim, no scuffs or scrapes. And this crimson red metallic definitely got just a little bit of metal flake to it. So it looks really good in the sunlight. There we go, you can see it there. Take note as you go down this side of the vehicle how clean the body is, how reflective and mirror-like that paint is. And we take these HD videos so if you are far away or even if you're close by and just cannot make the trip down but you're still interested in purchasing the vehicle, you can see the vehicle here, the vehicle, and of confidence in the vehicle you're looking at before you even get here so you can make a smart and informed buying decision from wherever you're at. And if this video helps you make that decision, let your salesman know that you saw the video, enjoyed the video, and that it helped you out. And that Brett sent you. The back rim is in excellent condition as well, no scuffs or scrapes. And the back tires have just as much tread as the front tires. Rear quarter looks really good. You do get the LED tail lamps on here coming around to the back. Rear bumper is in great shape. It does have a towing package which includes the receiver hitch and seven-pin wiring. Get those backup parking sensors in there. And yes, we do have the hitch cover for that. We always put it inside the vehicle so they do not go missing. Back storage area is very clean. There is that hitch cover and that's in really nice shape as well. You do get storage underneath there. Comes with a set of factory carpet floor mats. And these third-row seats do power fold down. I'm always amazed at how fast they go. That seat is, the second-row seat is up too far for that to go down. But you can see how fast they go back up really quick. And to get this gate down, you just press this button right here. And it will come on down. Now you also get the flipper glass on here. So that goes up like so. And you can see that the shocks are doing a nice job. And that those rear defrost cords are still connected. The rear gate is in excellent condition. And as you go down the driver's side, just as clean as that passenger side. No dents or dings on the rear quarter. And for full disclosure, this back rim is in excellent shape. So I didn't see any scuffs or scrapes on any of those rims. So really nice there. Driver's side doors look good. You get blind spot monitoring. Power fold-in mirrors with built-in directional signals. And these mirrors are heated.  There are no rips. There are no tears on the seats. They are in excellent condition. Smells very clean inside this Yukon. Get the factory all-weather floor mats. Factory brake controller. Power telescopic and tilt steering wheel. Power pedals. Land departure warning. Parking sensors turned out four-wheel drive. Auto headlamps. Power windows, power locks, power mirrors. And like I said, these mirrors do power fold-in. I always like showing both sides. So you know that both sides are working properly. And you get memory driver's seat on this vehicle. We'll hop inside. Turn the ignition on. Check out the miles, the radio and everything that this vehicle has to offer. You can see that this one has 14,676 miles. You do get a digital spinometer. Information center is nice and clean. You get a heated leather-wrapped steering wheel. Bluetooth and information center controls on the right. Cruise controls and forward collision warning controls on the left. Heated steering wheel button. And now this one, we got to have it running. But we'll see how many gears are on this one. It's either eight or six. Anyways, you get the GMC Intel Link System, AM FM and Sirius XM radio capabilities on here. There's your AM, FM and Sirius. You can see that it did have the factory navigation system. You also can see it as projection manager. You can project your cell phone to the screen. And you do get a storage container or storage area behind the radio with a USB charging port. Nice little hidden cubby. Now you can project your cell phone to the screen via Android Auto or Apple CarPlay CD player.  Heated and cooled seat buttons too. Or a 12 volt power point and two USBs right there. Keyless entry has remote start and power lift gate on it. Passengers side format and seat are in excellent condition. No rips or tears on there. Smells very clean inside this vehicle. I don't think it's ever been smoked in. There's your dual DVD players. Power sunroof. Home link buttons for your garage door security systems and lane systems. Map lights and sunroof and rear gate controls. On-star and SOS capabilities in the rear view mirror. We'll take a quick look at the back seats. And then we'll check out the backup camera, the gears and start it up and check out under the hood. Second row quad seating. Or the buckets. Factory or child safety locks. Latch child safety system there for any child car seats. Factory all-weather floor mats, rear air controls. You do get a 110 volt, 150 watt plug-in. Two USBs, HDMI port and an AUG's port there. And then you can see it gets your DVD players up there. Those are actually Blu-ray players.  You can see Blu-ray is one of the options. These seats do fold up like so. Factory all-weather floor mat back here. Third row seats are in excellent condition. No rips or tears on them. Side current and airbags on those front seats. Bottoms of the doors all look really good. And we'll start it up. Take a quick look under the hood. Starts right up. No check engine lights or anything like that. I wanted to put it down below here. This one has the six-speed automatic transmission. Also, your backup camera shows up right there. I would personally like to thank you for checking out the video today. And hopefully from this HD video, we've been able to verify the quality and condition on this Yukon XL. Inside and out. Under the hood, we have the 5.3-liter V8 engine. Engine-based, very clean, runs very smooth. Once again, this vehicle has been fully-safetyed and inspected by our service shop. Per the state of Wisconsin inspection process, has a fresh oil and filter change. All the fluids have been checked and topped off. Runs very smooth. There's your mission sticker. And this Yukon XL is 100% ready to go. I would highly recommend this SUV from a quality and condition standpoint. And to see more pictures of this Yukon XL and one of our other 450 new and used cars, trucks, SUVs, minivans, wranglers. You name it, we've got to go to that website right there, www.summitauto.com. Full pictures and descriptions of every single vehicle from two locations all at summitauto.com. And if you'd like to check out more HD videos, you can go to youtube.com slash summitauto. Remember to like, subscribe, and share on this video and all the videos that you see there. Click the bell notifications. You'll get updates on the videos we do each and every day here at Summit Auto. In fact, any second you will see a link to subscribe to our YouTube channel on the upper left. A link to more Yukon XL videos like this one on the upper right. Link to this vehicle on our website on the lower left. And a link to one of our latest YouTube videos on the lower right. Click those, check us out. And we really look forward to helping you with this super clean 2019 Yukon XL SLT in crimson red tin cone. Thanks again for checking out the video. Remember to like, subscribe, and share.