Hello everybody and welcome to another hobby cheating video and today we're going to talk about making alien world bases. So this is really fun. This is you've got let's say some sci-fi army and you want to set it on a far off imaginary world. Well today we're going to make a fun alien world base and one of the fun things about doing this is that it's really more about the paint and the colors than it is about the geography. So right now I've got a nice little 40 mil base here and I'm laying down some cork just to give me a little bit of verticality I guess we'd say and so gluing that down, letting that set. Now I'm getting out various types of basing paste. Now here I'm using some Vallejo sandy basing paste, I'll talk about each of these as I use them. But one of the keys to an alien biome is you want the environment to feel a little weird. So I've used a sand basing paste here. Now I've got some Martian iron earth which is a crackle paint from Citadel from GW but of course you can use you know there's all sorts of different crackle type basing paste out there you can use any of them. So now I'm putting some of that over the top you'll notice I'm there getting all kind of mixed up and weird in each other's business and I'm just slapping down goop on this base that's all it is. Now we're going to take some Stirling Battlemire which is just a heavy thick high grit mud again you could use a Vallejo one you could mix your own from you know dirt from your yard. The key with it is you want to have different types of environments here it'll feel more strange and kind of off-putting an alien if there's lots of different textures within all the small amount of space so it's not a readily identifiable earth biome okay. So that's why I've kind of mixed all three of these together so it looks just a little bit weirder it's a little more visually interesting and it's just all in all cooler you can do this by the way on other bases even for your people who are on more traditional earth like worlds but whatever. So now I'm just putting some rocks in to break up the texture even more kind of cross them together so easy peasy and that basically is that now I set that aside and we're going to let that dry for a little while. Alright so full honesty here I painted this whole base and got this all done and then realized that the middle part here where I was laying down the inks didn't record so I had to go back paint the whole base white and then shoot this that's why there's suddenly plants on here as is the little things glued down so I apologize I'll explain what I did one of the keys to an alien base is alien flora or fauna now the fauna is generally going to be your mini you're not generally gonna have room to put other animals and stuff on there and the other thing is color so I wanted to make a little alien plant to make that little alien tentacle plant I went into my bits box and I grabbed three scaven tails scaven from games workshop and I just glued them down in a little format where they looked like angry tentacles coming up out of the ground perfect little plant and that's my point you can use lots of natural organic bits like that to make odd looking weird plants the next step is obviously the colors so here I have a purple ink a turquoise ink and a magenta ink okay and you notice I'm working very wet on wet with these just splashing it around it's gonna run more in the details with these with those big chunks that came out I'm just putting a little white back on and then I'll blend that back in but you notice I just literally took a nice fat brush and started splashing that paint all over it okay you can see how because they're wet I can work right on top the other one bring them together make lots of weird interesting color transitions happen but working in these sort of synth wave alien colors like a bright electric blue again I'm using Daler Rowney FW inks there's nothing magical about the particular ones I'm using use anything you want you could use paint you use contrast stuff the key is use unusual colors it will fit as long as you have some kind of visual cue I have the little plant little tentacle plant as one of those you notice the little plants are gone now the flora that I had because we're back to the original footage so I have an alien looking skull I think that's like a towel skull or something I let all those inks dry and then I came back in and I'm gonna do a quick dry brush to pick out all of those all the raised areas add some more differentiation the key is alien skull alien plant alien colors and then when I actually put the little tiny tufts on I'm using alien world tufts which are again dark blue and neon fluorescent pink so everything is working together here to make it feel like whoa we are not anywhere near this is not a world that I recognize again you could do this in completely different colors you could have like a bright green mixed with a bright blue that would be weird you could have like really shock orange mixed in with some pink and yellow to make it feel like kind of a tequila sunrise thing all sorts of different colors you could use now after the what I'm trying to do here is even though I worked wet on wet and I blended a bunch of stuff together the dry brush is going to naturally de-saturate everything add more texture now I'm adding a little bit of shading so I'm going back in with a purple wash so this is just some traditional like Gucci violet type of stuff and I'm just kind of working it around in some of the deeper areas I'm working more with the magenta and the purple ink on the little tentacle plant just making sure that all of my colors are again have some interesting little hints as they get into each other now one point I'll make if you're working with inks like I am here that's really important to understand is that they dry quite glossy you will need to map this down you don't want to have your bases being all shiny and weird that's just going to clash in a weird way and make light look unusual so matte this all out after you're done it's just the necessary thing to do I know we you might say but Vince what if the rocks are shiny well then you wouldn't dry brush white on top of them to pick them out because those would be the things reflecting the most and you're gonna get shine where you don't want shine in the lower lights not in the upper lights that's the problem with shiny stuff okay back to me finishing this off so again just working that purple wash in over and over again you notice I'm shoving the purple wash at the elevation changes under the tentacle plant on the sides of the skull creating separation of the various elements in the base so there we go that's all dry and you can see now that that looks pretty nice pretty solid easy to work with there we've got we've got some nice color looks very alien now it's time to actually put those plants on you saw a little while ago these are from gamers grass I absolutely love them I mean look at those things look at that fantastic synthwave alien grass you cannot go wrong with these they have a bunch of different colors by the way of all this stuff as well as of course normal biome more earthly biome stuffs as well and so now what I'm doing is just glue them down and making sure that they're all in place now I did this after I painted this time because I loved the natural color of these and thought they would actually fit really well on this base just using some tweezers to work them in place you notice that I spread the toughed out after I push it down so like after I push it on the glue I take the tweezers and I'm literally pushing the tips of it back out spreading it making sure it's nice and sort of looking like an unfurled plant right so we don't want to we don't want to make it sometimes toughs when you glue them down they can get weird shapes you want them to be unfurled and look like a fully open exposed plant in the wind okay now and then just quickly put a little drop on to accelerate their glue and we're good to go one final little step as always we never have unpainted elements on our base so I put a little bit of purple wash around the bottom of them and then I do a little very light dry brush of white over the top of the plants just to get a little bit of light catching the edge of those thin strands of the plant makes them feel much more like part of it they're then highlighted in the same way as the rocks and everything's all set to go so there you go this is a really fast fun easy process there's nothing complicated in here I think these bases look fantastic I really love how this came out and it gives you a great chance to play with unusual colors and to make your army really stand apart so there you go if you liked that give it a like subscribe for additional hobby cheating in the future if you've got any questions drop them below but as always thank you very much for watching and we'll see you next time


Okay, welcome to the developer track at scale 14. This is sponsored by Percona, which means that I have to read you their marketing blurb. With more than 3,000 customers worldwide, Percona is the only company that delivers enterprise class solutions for both MySQL and MongoDB across traditional and cloud-based platforms. And with that, I'm just gonna turn it over to Jesse and let him do his presentation. Thanks, everybody. So, I'm Jesse Davis. Is your mic on? Is it? Check, check. I think it's on. I work for MongoDB, and MongoDB's pretty cool. Naturally, we are hiring. And if you wanna find me on Twitter, I'm over here. And I'm gonna be tweeting at a link more information about co-routines at the end of this talk, so you can find that link there. What I wanna show you is how a non-blocking framework that uses callbacks and an event loop would be implemented in Python 3. And we're gonna go in three stages. So, you'll know where you are. First of all, we're just gonna do a basic blocking HTTP client, and that'll be like our base case, so that we understand the simplest possible implementation of a solution to this problem. But we'll see that that's not very efficient, and so we'll replace it with an ASIC framework that uses callbacks.  And so, we'll replace that with something that's quite beautiful called co-routines. So, a little bit of setup. I've got a web server running on port 5000, and if we see what that web server is serving, we'll see that it says, hello, scale. And we'll also see, it's not very fast. I've deliberately coded it to take about a second to answer each request. And we'll see in a moment why it's so important that this is slow. It's actually talking to slow servers that an ASIC framework is best for. So, let's do the first bit here. Let's write a basic blocking HTTP client. So, I think the simple way to do this is just write a function that will fetch a URL at a path. And it's gonna need a socket. So, we'll import that from the socket module. And let's connect it to localhost port 5000. And we'll need to send an HTTP request to the server. So, it'll be like get some path, and we'll tell it that a protocol is HTTP one. I will substitute the path in there. And since I'm using Python three, we'll need to encode it before we can send it over the wire. So, we're transforming from a string into bytes that way. Oh, and an HTTP request ends for some reason with a double carriage return line feed. I have never known or cared why. So, once we send this get request, then we need to read the server response.  And with HTTP one, the way you know you're done is that the server closes its side of the connection. And so you get an empty read. So, the way we're gonna do that is we're gonna make an empty buffer to store the chunks in. And then we'll go in a loop and we'll just do a chunk is, pardon? Yeah. Good. A chunk is just whatever we get when we ask for up to a thousand bytes. We might get one byte, we might get all thousand bytes. We just say what our maximum buffer size is. And if we get something, then we'll just add it to the buffer and keep asking for the next chunk. Or if we get an empty chunk, that's the socket module's way of telling us that the server's closed its connection. And in that case, we're done. We've read the full HTTP response. So, the response is equal to, this is like a Python idiom. This means the empty byte. And we use it to join up all the chunks in the buffer into one big byte string. And then we'll decode that. So, now we have a text string. And let's print it and let's remember to return cause we're in a well true loop. So, let's see if I got this right. We'll get the foo URL and run that. And it says hello scale a couple hundred times. It doesn't seem very fast. So, let's see how long that this takes. So, we write down the start time and we'll print how long this took. Percent time dot time minus the start time run that. All right, so it takes a second and it's not very surprising because I very carefully coded the server side so that this would take just about exactly a second. And you can maybe see this a little more clearly if I just print the first line of the response just the HTTP status header. So, let's split that by new line and print the first of them there. So, we see that HTTP one 200 okay. And that it took one second. Now, the problem here is that if I get two URLs how long is this gonna take? It'll take two seconds because I'm doing them serially. Each get must read the full response before the next get sends the next request. So, there's a couple of ways of solving this problem. Obviously, what we wanna do is we wanna do these two things concurrently. And in Python, you can do things concurrently with threads. There's the infamous global interpreter lock but that doesn't actually get in our way very much in this case because the Python interpreter, so the global interpreter lock means that only one Python thread can execute Python code at a time. And so it means parallel computation is not possible in Python using multi-threading. But that's not the problem that we need to solve here. We're not actually doing significant computation. All we're doing is just dumping bytes into a buffer and then printing them out. We're not actually using the CPU very much. And the nice thing about multi-threading in Python is that Python threads drop the global lock while they're waiting for socket IO. And so you can actually use Python threads to do concurrent network operations as long as you don't need to use the CPU very much. So that's a perfectly reasonable way to solve this problem. But another great way to solve this problem is async. We could talk about the pros and cons in a little bit but let's just say for now that we've decided that we're not gonna do multi-threading and that we want to do concurrent operations on a single thread. And it sounds impossible. So let's figure out how to do it. We're gonna write an async framework. And an async framework, it has three kind of components. One of them is non-blocking sockets. The second component is selectors. And the third component is an event loop. So non-blocking socket, it's just a socket where you've called set-blocking false. So easy enough. Now I've made my thing async, let's run it. So that didn't work very well. We get this blocking IO error and the line that through it is the connect line. Through an exception as soon as I called connect. Well, I sort of have a rule of thumb for Python exceptions, which is if I don't care about it, I should just ignore it. So let's, I don't know, let's see if that works. Well, we got a different exception, so that's progress. And we got an exception on a later line. The exception was socket is not connected. So this sort of makes sense, right? We told the socket, don't block. And the contract of a non-blocking socket is that every operation either succeeds or fails immediately. It never waits to complete. Since connection can't succeed immediately, it takes some time to set up the TCP channel. So it throws an exception. And this isn't actually an error. There's nothing going wrong here. It's just saying I couldn't do this immediately. So I'm gonna tell you that by throwing an exception. It's obnoxious, but this is how they work. So I'm just going to ignore that blocking IO error. But that means that I immediately get here and we're not yet connected. So I want some way now to wait for the connection to complete. And this is where this second part comes in, selectors. So since the dawn of ages, operating systems have had ways to say that we're interested in events on non-blocking sockets and to find some way to wait for those events to occur. And those are functions with names like select or pull. On Litix, the most scalable version of that is called the E-Pull. On a Mac like this, it's called KQ. Depending on the operating system, you might want to use a different method to wait for an event. But the nice thing is that in Python 3, we've got this selectors module, which means we don't have to worry about where we're running. We can just say from selectors, import default selector. And we make one of those and that's whatever is best. On my Mac, it'll choose KQ. On a Linux box, it would choose E-Pull. I don't have to worry about it. The way I use the selector is down here, I do register the file number of my socket. And this is just a number. It's the file descriptor of the socket. It's four or five or something like that. And I write the list of events I'm interested in. In this case, I'm waiting for the socket to become writable because that's the next thing that I want to do on it. I want to write to the socket. And I'll import that from selectors.  And here's now where I block. Select waits for the socket to become writable. Once it is, I'll clean up after myself and then I'll be able to call send. So let's see how this does. Throws another error. Well, but that's good. So I threw an error. Another blocking IO error. But this time I did it down here in receive. So I managed to get past this part and I got down here. And I think that means that I just need to do the same stuff that I did before. But this time I'm not waiting for the socket to be writable I'm waiting for it to be readable. So I'll import that, run this. It's not that great, is it? Like it still took two seconds and the code is worse. So what's so great about ASIC? This is gonna be a theme of the talk, which is things have to get better or things have to get worse before they get better. So let's, how could we make this better? What we wanna do is once we've registered this socket to be and we're waiting for writability, we wanna somehow do other work until that's ready so that we can do these two fetches concurrently. So in order to be able to do other work, this get function, it needs to return so that we can then begin the next call to the next get. So what if I do that? That's not gonna work, right? We need to somehow get here once that select finishes. So let's start to kind of sketch out how we would do that. What we wanna do is we wanna write a function, it's called writable, that will be executed once this socket becomes writable once we're ready to do the next thing with it. And PyCharm is underlining S and path because those are no longer available in here, those were local variables of get and we're not in the get function anymore. So let's say that those somehow get passed in so that we have them again. And we're not gonna need this select call anymore because we're assuming that we're somehow, by the time we get in here, the socket's already writable. So now we need to figure out some way to schedule this writable function to be executed as soon as it's ready to run. And the way we're gonna do that is, here's where all the magic happens. This register function takes a third optional argument called data. And data can be anything we want. We're in Python, it's dynamically typed, we could stick in a number or a string, or we could actually stick in a function there as the data. So let's do that. Let's make a closure using the lambda word. And what the closure is gonna do is it's gonna execute writable with S and path captured from these local variables. This is gonna be a little function that doesn't actually run right now, but when you do call it, it'll call into writable. So that stuff's spurious now. So now we have an async framework, so let's run it. So it was very fast, but it didn't do any work. Why is that? Well, down here we called get foo and get bar, and so we registered the two sockets to, with their callbacks, we're waiting for them to become writable, but then we never call select, I deleted that line. So let's do that, selector.select, and that returns something sort of complicated. So let's print that out and see what the return value of select is. So we run this and there's its return value. And it's sort of this big mess, but we can see it's got two selector keys. What these selector keys are is there a bunch of information about the two sockets that are registered for notifications about.  We have the file descriptor, we have the file descriptor again for some reason. We have the list of events that occurred. This is what I really care about. Here's that lambda that I registered earlier as the data argument. This is the callback that we wanna execute as soon as the socket is writable. So we can pull that out. First we need to iterate over all of the things that the select call returns. So that's gonna be for key. And it also returns an event mask, which I don't care about, I only care about the key. I really don't care about anything in the key except for the data. Because that's that lambda that I passed in. So we'll call that, that's equal to key.data and we'll execute it. So if I run this, now we have an async framework, right? Okay, so it threw an exception here. Well, okay, so far we're making progress, right? Because writable got executed. So that means that we have successfully waited for the socket to become writable and we wrote to it. But what went wrong was, so receive through blocking IO error that indicates that the socket's not actually ready to be read yet. And I think that the reason that that happened is we called select here and we're not supposed to be calling select here anymore, not inside this callback. What actually happened is that the first socket became writable. So we entered its callback and then we called select again and the event we got was something completely irrelevant. We got the event from the other socket becoming writable. And so we thought, okay, great. So now it's time to read my socket, right? But that wasn't at all what we were supposed to find out. So what we need to do is we need to delete this select call. So now it's gonna get a little complicated. We've entered writable, we wrote our request and now we're waiting to read the response. So we register, we wanna know when the socket becomes writable and then we somehow wanna do something once that's ready. So let's call that writable. So this is gonna be the callback and S and buff are underlined in red. They're not available here. So again, we'll pass those in. And the way that we'll get those local variables into a closure and pass them in when we're ready to use them is once again, we'll make a lambda that we'll call writable with S and buff. Bug, there was a Freudian slip. All right, and we don't wanna do that forever, we just wanna do that once. And I'll fix the indentation here. Okay, and now there's one more thing that we need to do which is if we read a chunk and we add it to the buffer, then this means that we are not yet finished reading the response. So we need to re-register until the socket is readable again. And that means that more server response is available for us. And the way to do that is just to copy and paste, which is all I've ever done as a professional. All right, and I think we might be ready to go. So what's going wrong? Anybody? Why isn't this working yet? Yeah, we call select, but we only call it once, right? So we called it, we waited for an event, we handled that event, we called the related callback and then we're done. And we say, oh, that took zero seconds. Async really is great. So what we need to do here is we need to do while, while Turing, while true, process the events. And whenever an event happens, we call the associated callback and then we wait for the next event. This is great. How long did that take? It's still running. I forgot to ever leave the while true loop. That's correct. I got rid of that while true loop. Yeah. Yeah, I got rid of that. So we've just got one while true loop here, right? There's no exit condition for this loop whatsoever. So I think we want to somehow sort of know when we're finished, right? So once we've returned from here twice, that means we're done. So I think what we want to do, let's say up top that we've got like n jobs equals zero. This is the number of things that we're working on. And then here, global n jobs. So in Python, you need to declare something as global in order to modify it from an inner scope. So we do that and then we increment it. So now we're working on one URL and we work on it and we work on it. And then when we're finally done here, we don't need this return anymore, but we do need a global n jobs. And then here we need to decrement that. And then I think, so these two gets will both increment and then eventually they'll be decremented again. And then we'll just, we'll only loop until n jobs goes back to zero. Well, there we go. So that's pretty cool, right? And what's really cool is, so we got two URLs in one second instead of two seconds. And what if we get like 20 URLs? That also takes one second. So that's pretty neat. We're very efficiently doing concurrent IO on one thread. And that's possible because most of the work, basically there is no work. It's spending all of its time waiting around. So it's hardly ever using the CPU. All it's doing is adding events to the list of things it's waiting for. That's cheap. And compared to the multi-threaded version of this, the overhead for waiting for each of these events is minimal. All you've got is a file descriptor in a list of things that you're waiting for and a pointer to a closure, right? It's tens of bytes. Compared to the overhead of a thread, which has a stack. It has entries in like scheduler data structures deep within the curdle, I assume. I have no idea how that works. There are hard limits on the number of threads that you can run, which are typically much lower than the limits on the number of sockets that you can open. If for every socket that you're working on, you also have a thread. You will run out of threads first.  Allocating a thread per socket artificially limits the number of sockets that you can work on concurrently. So that's the problem that Async solves. If you have lots of sockets, but you're not doing much work on each, Async allows you to scale to a larger number of sockets concurrently. So that's cool, right? Yeah, so the question was, isn't this while end jobs loop a busy loop? Are we spinning a lot of CPUs, that the concern? So no, because the select call, this is the one place that the framework blocks. This select call will wait quietly until some event occurs. And this is the only place in the entire framework that we're allowed to actually pause and not do anything. We've essentially said that this thing here, which is the event loop, is the sole part of the code that's responsible for blocking. Nothing else can wait. So what have we seen so far? We are, what time is it? We are 32 minutes into the talk. We've written an Async framework with callbacks and an event loop. And we've shown that this is very efficient and also that it's very ugly. We bloated this thing out from like 20 nice lines and one function to about what, 100 lines, 70 lines, and it's disgusting. How can we get back to the like, Edenic beauty that we began with without sacrificing the efficiency that we've gained? Co-routines. So, co-routines, what I'm gonna show you is how co-routines are implemented in the Python 3 standard library module called Async.io, which was introduced by Guido van Rossem in Python 3.4. And they're built with a future class generators, which are a Python built-in feature which has been around for many years. And the last bit is a task class. So we're gonna go through these one by one. So, first of all, the future. A future wraps a callback and a future represents some value which is not ready yet. So, I can make an extremely dumb one that has a callback, which begins now. And it has this idea that it will resolve, which is some event that we're waiting for. And when the future is resolved, it executes the callback that was waiting for it to be resolved. And everywhere that we use callbacks now, I'll replace those callbacks with futures. And we'll see how that goes here. So, here's a callback. Let's make a future. Let's set the futures callback to this lambda and we'll pass in the future instead of the callback. And here's another callback. So we'll move that out and we have one more callback and that's here. So, once again, we'll wrap that in a future. And now, instead of registering callbacks, we register futures that wrap callbacks. So that means that down here, this key data, this isn't the callback anymore. This is a future. And so we wanna execute the futures call, well, we wanna resolve the future and that'll make it execute the callback. So now we run this. Once again, it takes one second and we haven't gained anything, right? I only made the code even worse. But I warned you that this was gonna be a theme, that things get worse before they get better in this talk. So, I'm fulfilling that anti-promise. So we wrapped all our callbacks and futures. The next portion of this is generators. So let's engage in a digression. I've got myself a Python console here and the way generators work in Python, it's a little bit bizarre. So generators come from generator functions. And a generator function is a function with a yield statement in it. So let's say that our generator function prints start and it's got this statement yield one. And because it has a yield in it, now it's a generator function. We'll see what that means in a second. So maybe next to prints middle and I don't know, it assigns a local, then it yields another number and then it's done. So that's the contents of our generator function. And if we execute it, it doesn't actually run. It doesn't print start, it doesn't print middle. It just returns this generator object. So what's a generator object? Well, it's got two things. It's got some code. So here's its code. It's named generator function because that's where it came from. And you can actually see the code. There it is, very enlightening. That's some compiled Python byte code. We can ask how much is there? There's 40 bytes of it. And besides code, the generator object, it also has a stack frame. So this stack frame, it hasn't done anything yet. So its instruction pointer is negative one. It has not executed any byte codes yet. And like any stack frame, it's also got the local variables. And there aren't any yet because this hasn't had a chance to create any. So the way you make a generator run is you call next on it. Next G. So now it started to run, right? We saw it print start. And the return value of next was one. That was the number that it yielded. So it printed start and it yielded one. And now it's actually stopped at the 13th of those 40 byte codes. So it's in suspended animation here. It's waiting for me to call next on it again. So if I do that, now it prints out middle. So now it's reached the next point in its execution. The return value was two. That was the next number that it yielded. We can see that its last instruction pointer is now 34. So it's advanced farther through its code. And it also, it's had a chance to execute x equals seven. And so now it has locals. If I call next G again, it tells me rather bluntly that it's finished by raising a stop iteration exception. So that was our digression. That's how Python generators work. They're incredibly weird and interesting. And they're also very useful because it's a function that you can start and stop at will that you can cooperatively schedule. So this seems like a pretty cool thing to use to create co-routines. Things that can be scheduled asynchronously to cooperate with each other. So how would that work? I think the idea would be like this get function, this would become a generator function by putting some yield statements into it. So instead of like declaring a callback here and then having the callback run down here, what if we could somehow just say like yield F and then somehow we know the socket is writable by the time this generator is resumed. If that could somehow work that way, then we wouldn't need this readable callback either, right? We could just say like yield this future and then somehow socket is writable, is readable by the time we get here. If that worked that way, then we could get rid of this callback as well. So every time we get a chunk, we would just wanna go back up here. We would wanna create another future, then wait for it again until we had read all of the chunks. So we wouldn't need to keep re-registering the socket down here. Right, if that worked that way, we could actually, we could just get our while true loop back. Then we would kind of be back to where we were where we wait for the socket to become readable. And then somehow by yielding F, we wait until that event occurs. And then we receive a chunk, we append it to our buffer and then we just do that again until we're done. And this loop has the same kind of structure as we originally had in our blocking example question. Well, it's about to be. For the moment, all we know is that yield F, it's gonna pause this generator. And then somehow we need to get this generator resumed once that future is resolved. So how's that gonna work? Well, let's run this and see. Well, okay, so far so bad. The reason is that what I've got right now is I called get, but now that get is a generator function, it just returns a generator when I execute it, right? It doesn't execute its code. We saw that earlier. So we need to somehow call next on this generator until it runs to completion and raises a stop iteration exception. So the way we do that is this third thing, this task class. So I'll write that down here. Task is the name for the class that the Async.io standard library module uses to call next on the generator. And task is essentially the thing that turns a generator into a co-routine by scheduling it, by running it to completion and resuming it whenever whatever it's waiting for is ready. So it's gonna take in a generator as its argument and store it away. And then let's say that it has a method called step, and step is gonna call next on self.gen to run it to the next yield statement. And whenever one of these things yields, what's the return value of yield going to be? It's gonna be the future that it's yielding. So that'll pop out here. Some future object will be F. So now we wanna kind of wait for F to finish. And the way we wait for F to finish is that we assign something to its callback. We say, this is what you should do when the future resolves. So what do we wanna do when this future resolves? Call next again, right? Yeah. So the way we do that is we'd say step, step, is the callback that we wanna execute. Right, so it's like funny recursion. So let's run that. So it still doesn't work. Can you see why not? What am I missing? We do resolve the future. Oh, we never created a task. Okay, that's a good start. Task, right? So we need to create the tasks and wrap up these generators and tasks. Let's see if that was it. No. Oh, still need to call step. That's right. So let's do that here in the constructor. So as soon as you create a task, it gets a generator and starts running it. And then whenever the generator pauses, we say, okay, resume it whenever the thing it's waiting for is ready. Let's run that. This is looking good. I feel good. Yeah, right?  Too much output, too process. Okay, what if we do this somewhat fewer times? Feel good if an infinite loop here again somewhere. Where is it? Ah, there it is, right? We have a while true loop. So now we need to return again. All right, stop iteration. And that's getting thrown from step. Oh, so that's good, right? It's good that we're seeing a stop iteration because that means that we've started to be able to run generators to completion. We've run the get generator all the way to the point where it returns. So you know my philosophy about exceptions in Python, which is to ignore them completely. So what are we gonna do here? I think we just wanna return, right? Cause this task is done. So if we do that, woo, right? So we're back to where we were. And for once, I've actually made things better. At least, thank you. At least that's my opinion, right? We, it's not as good as it was when we started. It's a hundred lines of code now, whereas before it was like 20. But it's really efficient. It's just as efficient as it was with callbacks. And we're back down to a single get function. It's a little more complicated than it was once. And it's partly because we haven't implemented the sort of rich convenient methods of a real async framework. If this were async IO, it would be just about as short as the blocking example would be. Cause we wouldn't have to do quite so much manually. Wouldn't have to like make our non-blocking sockets and stuff. And by substituting yield statements for callbacks, we've managed to get all the way back to a single function again. We have normal exception handling. We have normal local variables. We don't have to pass them around in closures anymore. It's beautiful again, but it's got all the efficiency of single threaded concurrency. So let me see, I wonder if I have to blather on with the conclusion. Okay, a couple of minutes. So let me blather on with the conclusion now. We learned two cool things. One of them was technical. Co-routines are a beautiful way to do asynchronous concurrent processing in a single thread. It means you can do lots of concurrent IO without allocating a separate thread for each socket. So you can scale out highly concurrent network applications much, much more efficiently with this style than you could with threads. But they're almost as pretty as threads. And if you want to learn more about that, I've set up a page for you at bit.ly slash co-routines here and that's got a bunch of links out to a lot of much deeper information. It's got both the code that I wrote just now and it's also got a link to a chapter that I wrote with Guido van Rossum, which has a much deeper and broader co-routine example than this one. The other, so it's the sort of technical hooray, but the non-technical aspect of this is look at everything that we were able to understand in just one session. We went from absolute nothing all the way to a co-routine based asynchronous framework. This thing that looks like it's totally magical is actually completely within your grasp. You can learn it. You can learn not just how to use co-routines, but how they're implemented from the bottom up. And it really isn't that hard. It really doesn't take that long. So if you follow that link and you read in a little deeper, I think that really grasping this awesome new idiom is completely within your grasp. Thank you very much. So we've got a few minutes for questions if you want. Go ahead. Sorry I didn't get that. Take the microphone. So if you want to write an app using AirBros and try to take as much as resources of the server for my application, it can't be bad, right? Because I block another process to sell system resources. So how can you revamp it? Like you as much as a socket I have for my applications and it just like revamp another application to use the socket on the server. So do you know the way to revamp that from other developer that just try to make their browser as fast as possible and just take away from other application sockets. You get the question or? No, I'm sorry. I'm not totally following. So we have a limited number of sockets we can use on the server. And if I use it across and they try to wrap as much as a socket for my application. Right, right. I've got an idea. I've got an application. Yeah, so do you have any suggestion to revamp that happen on the team? So the question is once you remove threads as a bottleneck how your next bottleneck is likely various caps on the number of sockets that you can open and how to remove that. On Linux there are various ways. I don't know all of the specific commands but I have heard of Linux boxes running million concurrent connections. It requires a bunch of kernel tuning. You probably have to run as root but it is very much possible to end up with only memory as a bottleneck which is actually pretty exciting because you've reached a point where hardware itself is your bottleneck and that's the bottleneck that you wanna have. That means that you're using your hardware to its fullest. Another question? All right, great. Thank you so much, everybody.


Today, as part of this talk, we are going to discuss an awesome pairing technique that is promiscuous pairing. We will get into the detail about what exactly the promiscuous pairing is, how it is different from our traditional pairing practices that we have been using as an agile practice or sorry XP practices for a long. Along with that, we will get into the details of what is the beginner's mind, how we can leverage it. By getting into the details of that, we will also walk through that how exactly we were able to adopt it, what are the challenges that we have faced and what was the final outcome that we have gained out of it. So before I do that, let me just quickly brief you about myself. I am Ankur. I am working with the JPMorgan as an agile developer and I have spent like 12 years into the industry on various product developments into the financial as well as into the telecom. In my current role, I am an agile developer working with a cross-functional feature team. Now what does the cross-function feature team means is the team is able to hold all the various flavor that is needed, so beta QA, beta development, your requirements, everything is handled by the same team and it is end-to-end feature team. That means it takes care of implementing the feature end-to-end, whatever it takes, cutting cross across multiple components, products, layers, everything. It's not that we were not agile before and this is something with which we tried to get into the agile mode. We have been agile for a pretty decent time and it's been over a one-and-a-half year and this background is necessary to understand when we will get into the details about how the promise case pairing effectively works. Why you need to have that well-geld team where you can actually trust and you can that comfortably pair with them. As part of our experiments, we keep on doing various xp practices, experiment some work, some doesn't. We picked up that this promise case pairing is one of our experiments. I think I have already covered that, but just to give you more just around it, so though we are cross-functional and feature team, we work into the banking domain, so the domain itself is pretty complex. That's a very interesting jigsaw. We are talking about the banks, so certainly it's a highly regulated environment. It's not like whatever you want to do, you can do. Again, now it's a cross-functional feature teams and building feature end-to-end and doing that throughout every time. By the way, before I get into the promise case pairing, how many of you have actually practiced the pair programming ever before? For the benefit of the larger audience, let me just quickly spend a minute on this, what the pair programming is about. Pair programming is when two programmers work together on the same workstation.


Everybody forced here ripping Sunday fund a NBA 30 box prism treasures basketball mixer random team style check out these results anytime a late sports cards calm and There is a Lincoln chat for you. Good luck everybody. So the recap is going to be a separate video or behind So I'll just do it later on tonight. Get it posted later Just the heads up on that do the hit recap separate get up get it done later for you Good luck everybody. We'll also do the basketballs at the end. So all boxes are up here basketballs at the end Let's start with some dawn rush choice And going gonna go a little quicker than Normal on one of these we'll start with four boxes of dawn rush choice some 20 21 and some 21 22 two of each Ortiz comes back part odor of Disney Never see will again Guys make sure you so rich won't be here on his birthday. You got a wish and happy birthday right now All right, rookies of Dio O'Kungwu Riller LB Manion oh a Calvin Murphy Hall Dominators gold auto one of ten for the Rockets Rockets a gold Calvin Murphy auto to start you off and a James Weisman rated rookie auto for the dubs Got red Barrett to 99 nicks black and gold Rui Hachimora four of eight wizards very good first box here Four of eight on the Hachimora and an abdia for the wizards to 99 Already you have to ask you'll have to ask him Peter Everyone's always asking for deals. Hmm interesting Naji Sadiq Bay Nesmith Killian Hayes Patrick Williams Sabin Lee Pistons on the red rated rookie auto 14 of 99 and Maverick's rated rookie Terrell Terry Gold Jamal Murray ten of ten nuggets good colors in these boxes here Red rated rookie Nesmith Celtics 98 of 99 and blue wizards Troy Brown to 49 21 22 now Shengun Trey Murphy Shengun's been balling man Garza Kispert Jalen Green Franz Wagner Rated rookie auto Orlando Franz been killing it too, man. He like 34 last night or two nights ago Awesome Franz Nets Cameron Thomas rated rookie auto Gold Anthony Edwards second year eight of ten Timberwolves Eric R This break is starting off running Gold Donrush choice second year Edwards Nice ants red rose to 99 nicks and Red come in get to 99 warriors What a good box Let's get these Don Russ choice to bring you some heat Rich you get to watch the Patriots on your birthday. How about that, huh? What a great gift, right? McBride Williams Livers man Kai Jones. Oh very nice and next day rookie auto Grizzly Sire Williams Hawks Jalen Johnson rated rookie auto red number at 81 of 99 Russ popped off today. Red bird tans to 99 for the wizards Gold R. J. Barrett one of ten nicks We've got a gold in every single one of these boxes a gold or lower Trey Manta 99 thunder Geez man, where do we go from that chronicles now? Let's do chronicles Yeah, Rich's rules for drinking around the world at Epcot are what three drinks at every location no water no sunscreen no food Those are the rules here at seven. You got a Zaire Williams rookie limited 41 of 75 Cade Phoenix base a Red Evan Mobley hometown heroes Cleveland Cavaliers 146 of 149 Kyrie Duarte That's how I'm feeling Vaughn. I don't want to watch the game tomorrow, but I will because I'm inside because I'm off At night, you know year 7 rookie to 49 heat Silver Dwayne Washington jr. Rookie Pacers prism update Grimes and Osumu to 149 essentials bulls Franz Wagner Thomas treasures to 99 rookie magic Marquilla brawn Jalen Suggs luminance rookie to 149 magic Mobley Davion Mitchell gold standard a rookie Jersey Auto Kings 14 of 99. Oh Boy JT broad Zion back up. Oh boy. Oh boy. Oh boy Shengyun and Edwards Magic Jalen Suggs a Phoenix Mobley Purple Marquis Luca to 49 Mavericks. Oh, I forgot to say to be any of the break. Some of you may not know say it for this box Oh Donovitch to 25 national pride auto for the Hawks Barnes essentials Scottie Barnes Marquis If we pull out of 1819 prism a luga Donchich rookie prism based parallel silver or higher Everyone's gonna every spot is gonna get a box of 21 to 22 optic basketball hobby sent to them with their cards every single spot slight hobby hybrid 21 22 Everyone's hoping for Lucas silver or better in those boxes. That's fair lane Would you get a Ben Simmons Jersey or an A-Rod Jersey Suggs concourse? Concourse disco smart for the Celtics. I think we have a Jersey Auto here Every box is hitting pretty well so far. It seems and we've got Jalen Johnson Hawks rookie disco Jersey Auto not numbered Yo Hawks man. We're cooking in this mixer disco jaw a Concourse from your level silver rookie Josh Christopher Rockets Lions plus 20,000 wins fools easy money Easy money for Vegas Red Miles Turner courtside for the Pacers 14 of 49 silver concourse JT Thor rookie for the Hornets concourse from your level Beasley T Wolves Let's go to Let's keep rolling with selects then let's keep rolling with the select boxes 21 22 select hobby What are the Patriots Super Bowl odds pager? It can't be much better than Lions. Can it? Lions actually have an offense Barnes 33 of 99 nets rookie Jersey day around sharp premier level silver rookie Aldama Grizzlies Plus one trillion. I wouldn't doubt it Anthony. I wouldn't doubt it It just technically has to be better than teams like the Rams. You know what I mean? Conquer silver rookie Cade cunning and pistons Like it's got to be better than the Rams. It's got to be better than who else is like a bad team right now Try color rookie concourse Jericho Sims nicks Lions are a good team. They're good offense. Their defense is pretty sketch But I've mobility concourse, but for a team that's like rebuilding what you want is a good offense. I think concourse scope Jimmy Butler heat silver concourse D Rose nicks Lonzo premier level purple die-cut bulls 67 of 99 Maybe we'll see a Lonzo rookie in this break Jalen green concourse Light blue rookie concourse Tray Murphy the third pelicans who's been really good 257 to 299 Tri-color concourse Kelly ubré Hornets Tray Murphy the third premier level 49 of 99 Raymond Felton Jersey for the Mavericks scope premier level Devonte Graham pelicans Silver concourse Rondo for the Cavs Scotty Barnes 109 of 249 rookie Silverado Nice Scotty Congrats Raptors. We'll get that magged. I Don't think it's an exaggeration to say that we've hit pretty well in every single box They're like 90% of the boxes so far Premier level tri-color Capella for the Hawks Swiss Bank Let's move on to these choice boxes from 2022 2122 To prism to optic choices then we'll come back to the prisms later on We'll save in the war one-on-one. I'm at an NT for later after these will do select and prism guys Trying to pull some heat here. All right optic choice 2122 Hala rated rookie Sixers Jaden Springer a Moses Moody Warriors red optographs rookie auto non numbered or choice Optographs auto there Niners look good, but like I don't know red and green Brogdon for the Pacers Long-term the quarterback situation still has to be factored in long term for the Niners red 47 of 88 DeMar de Rosen bulls It's kind of heat-looking because it his car was an error card had that photon like parallel on every single one of his base It's a pretty wild pretty busy card, but unique Red Raider rookies non numbered JT Thor and Alperin Shengun Yeah, Debo hurt now, too Their defense is nasty their offense is dynamic not having like an Allen or on the homes is I think it's gonna sting them at some point Silver bug donovitch Hawks. I think they can beat any team, but I mean that it's tough to do and you don't have to like a really really good QB Eight of eight optographs black gold Paul Presley bucks Long-term they have Brock Purdy. Oh, not you too Lane. Oh, what nice red and green Kate Cunningham pistons THT Lakers number to 79 of 88. Yeah Rams are a mess Mowgli rated rookie calves Red not numbered and Greg Brown the third Blazers Prism choice now two of them. Come on Nebula Most likely win eight Super Bowls He's the next Steve Young over there Steve Young Joe Montana combined Slivers shy gilded Alexander Thunder Dennis Schroeder Celtics Blue yellow green Zion Gafford for the Wizards in giddy Okay, see a JT Thor red choice auto for the Hornets not numbered Red Tarian Prince T Wolves numbered 54 of 88 and Blue for the Thunder shy gilded just Alexander Blue choice for 39.  I peaked at the back card Silver Warriors Dremond green silver Jason Williams Kings Blue yellow green McCollum Blazers Booker Sons Ray Allen bucks. Oh my god I gotta see who has this team first. Oh, yeah, I've got Trey Murphy the third red choice auto for the Pelicans.  I saw the back Going to the magic rookie Franz Wagner Ka boom, let's go one of one magic Oh freaking way Harper has the magic What a gigantic hit Wow Yeah Trying to like Saddle down a bit. Oh, baby That's amazing That is amazing big congrats Harper. Oh My god, that's gorgeous Franz is so good too. Oh Man this mixer has been awesome so far when you maggot. Let me see it again.  Happy for you, buddy. Look at that. Oh Man, geez dude Yeah, yeah, so yeah exactly bumby. Yep, so huge It looks pretty good too, which says a lot with how prism centering was this year Centering looks good at least I can't speak for the surface and edges and all that stuff, but man Yeah, my goodness What a card Not that something that is a ton of time because it's a one of one But it's always nice to get a better grade, right? Let's go into the select boxes now. I can't believe I can't believe I Can't believe it 16 17 select two boxes Wow Hopefully that'll make top ten polls of late in sports cars this week Wow Yeah, thank you Harper man Harper joins a lot of breaks ice personals Thank you Harper I gotta get a gotta get a little less lightheaded now. Oh bird man silver for the calves Almost as big as that Franz Bembrie Silver Steph Curry warriors Shaq oh Shaq's right behind me too Yang Bogdanovitch 1617 silver Mike Muscala for the Hawks. Oh Boy, that's Sam's buddy right there Jake layman Bryce Johnson bird man best part of the break a Tri-color norm pal Raptors So I guess we're a little slow living through these because they are a little tiny bit like not stuck But they don't move as well as like newer cards That's silver Ryan Anderson Rockets magic legend Lakers 178 of two down on the Zubak auto. How young he looks there my god I only picture him with a beard at all times, so They the muscala is bigger than the It's a Beasley rookie Red in an a rockets or maroon 95 175 whichever color a Kobe auto would be a freaking awesome. Oh Bigger magic card Mario his own ya Rookie blue for the Suns Tyler Euless 266 of 299 Brandon Jennings Evan 40 game magic legends Tri-color Anthony Davis pelicans Russell Westbrook Jersey card okc Della Vadova Della Vadova What's going on Mike? Tri-color Kyle Anderson for the Spurs Ben Simmons rookie the hair. He is you guys You got tonight Jake chargers or dolphins Simmons again. That was a premiere level right on that one. Whoa Dwight Powell purple to 99 for the Mavericks Auto Porter to 99 Jersey card for the Wizards there Brandon Ingram rookie. There we go. Yo Lakers It's going pretty well. Mike. Just pulled the Franz Wagner Nebula out of prism choice Silver rookie McClellan wizards. Oh boy a Flallow as a king check the aloe brawn Williams Zubak rookie silver for the Lakers now Boogie Galanari Wiggins as a T-Wolf one more 16 17 come on Kobe Come on Kobe We can we can top the front's Nebula. Why not? We can top it and guys gonna be behind for the rest of the night. Just FYI the Cory Brewer silver The recap for this break will be done later on as a separate video Tri-color siakam Rookie Raptors nice card there You know Raptors not numbered Jamal Wilkes To 50 on the die-cut auto for the Warriors We have a lot of chance to pull some big cards in this in this mixer Tri-color a Michael Green Grizzlies Patrick McCall Sarich rookie and Erin O'Fallow for the Kings Numbered 125 a 199 54 of 199 magic Jeff Green Jersey Teague and Len Abrinus Tabo Sepulosa silver silver Deon waiters for the heat Yacopodal blue norm Powell Raptors Numbered 112 of 299 Yeah, I know von Osher you a little slower on these but can't do that now. Unfortunately silver James Hardin Rockets D D Wade as a bull. We point that out Tri-color Kyrie for the calves calves color match on the tri-colors there Ben Simmons Rookie again Marshall Plumlee silver diamond stone rookie Clippers Carmel Lone 11 to 25 on the jazz on the jazz scope auto here Die-cut Clellyn Chris Dunn Prince silver Ricky Rubio Zubak Zaza Jeremy Lam on the red or maroon 52 of 175 for the Hornets Dame and Dane Just keep going with select here. Let's do 1920 and then 1718 the last two select boxes here And we'll get into prism Again everybody personals and group breaks resume Tuesday Second-year Tatum Pascal or no third year Tatum Garland rookie silver concourse for the Cavaliers areas Starland Clark Wow Deandre Hunter 3 of 25 on the tie-dye horizontal RPA Nice hit for the Hawks there. There we go Concourse over sexton for the Cavs Definitely a nice one there hunter solid tie-dye honest concourse bucks 22 of 25 Very nice. He honest congrats bucks on that one Grant Williams rookie John Marant Jersey rookie Jersey Grizzlies Tri-color concourse John Wall wizards Silver Anthony Davis concourse Lakers Tramont courtside Cabin Gale Cabin Gale Silver Premier level rookie Darius Garland You go pretty solid box here for the Cavaliers Bible Tri-color Rudy go bear for the jazz Concourse Tristan taco there he is taco go Knights scope concourse Marvin Bagley Kings Tristan taco. That's what I said J.J. Berea Mavericks Jersey card dude no way come on now Come on now bucks Tie-dye die-cut now Yannis onto the Kumpo Premier level one of 25 To tie-dye Yannis in the box to tie-dye Yannis That that is something so Keldon Johnson concourse Yeah, two different levels. I yeah Light blue Blake Griffin concourse for the Pistons 34 of 299 Williams shy insert Cameron Johnson premier level rookie tri-color for the Suns Garland concourse silver concourse Zach Levine bulls Jared Culver rookie courtside all the depot Okay, 1718 select Last select box and we're in a prism again 1718 Sterling Brown scope concourse for the Celtics Josh Hart to 65 rookie signature Lakers Solid one Josh Hart's pretty good And Al Jefferson Number 35 out of 49 for the For the Pacers there Al Jefferson It's I cut coming Wilson Chandler Nuggets purple die-cut 43 of 99 silver what's Russ Westbrook thunder Tri-color Marquise Chris for the Suns Larry marketing rookie silver Tyler Johnson for the heat Remember Tyler Johnson Dwayne wait on the Jersey card for Miami Throwback memorabilia Adams and Dirk come on big color. Come on Jordan Bell a Jordan Bell blue rookie for the Warriors 134 299 silver rookie kuzma Lakers Tri-color Doug McDermott nicks the Aaron Fox concourse rookie Joe Johnson to 99 Jersey card for the net Joe Johnson silver Kevin Love concourse for Cleveland Come on last two packs. Come on. Let's see some nice color here. Come on Fox Mitchell or Tatum. Come on There's Mitchell. Maybe even like a BAM. I try color Portis Bulls Wayne Selden a DeMarco Rose and red for the Raptors number 16 of 199 BAM is an intellect is he it's in prison though Okay back to 2122 prison. Let's do hobby and then first off the line Real quick. I just remember to do this. I need to take this phone off before we get to the basketballs And I want to get out of my way honestly Mowgli base Hyper mindset Trey young Aaron Bain's Raptors base auto silver Anthony Davis Lakers Hyper rookie Zegorowski nets Shengyun rookie Ruby wave RJ Barrett nicks To 75 Terence Ross magic 75th anniversary. Come on. See some nice prism here Soon moves silver Valenchunis orange wave Robert Williams the third nice Time Lord 23 of 60 Jalen Green 75 years of the NBA Ruby wave boots of itch bulls Hyper kid nets Hyper kid Jalen Green base silver Isaiah Roby Thunder Silver feelers penny hardaway Pulsar may column for the Blazers Blue Michael Porter jr. Nuggets number 52 out of 199 Trey Murphy the third Red Halliburton King second year Number 76 of 299 Silver Rondo Lakers Hyper D'Angelo Russell T wolves Silver Thomas Bryant wizards purple eyes bled so clippers 109 of 149 Ruby wave Darius Garland calves hyper Pascal Raptors Silver Lakers Dwight Howard Silver prismatic Kevin Durant a redemption Kevin Durant flashback signatures flashback signatures that could be few teams Okay, so Durant is nets and flashback signatures Durant is nets There you go nets on the Durant's redemption very nice once that guys photo 21 22 Hey guys contenders out the basketball is on a Wednesday release day Wednesday spots are up on the site right now Some teams are going quick Ruby wave for the Mavericks Maxie Cleaver Hyper calves Darius Garland Chargers Dolphin just started Very nice silver D weight for the heat silver fireworks and bead Sixers and manual quickly blue shimmer nicks Number 15 of 30 nice card Nick second year color match Blue ice favors for the thunder 48 of 125 and a Nets rookie auto Cameron Thomas and Bf 53 and 12 what the heck Silver Conley jazz a hyper Conley jazz Ruby wave Siakam Raptors red holiday Pacers Justin Holiday 190 of 299 Yeah, guys only two spots left for tonight the NFL mixer Silver coming up Malik Beasley T-wolves in an orange wave behind it is Christian Wood Rockets Houston there 33 of 60 last two spots until Tuesday until Tuesday Silver rookie Nimi Esquita Kings Silver widescreen Lillard Blazers Nets another auto here Joe Harris in all the prism autos and nets are bones base Bounds Jake who's favorite NBA player Ruby wave rookie Keon Johnson Clippers Nice one clips to 75 Torian Prince T-wolves on the anniversary parallel Legal it is it is Oh Bowl Bowl. Yeah, that's good choice Silver Sabonis Pacers thing my favorites Bowl Bowl right now Hyper no aura for the Bucks unless taco falls on a roster Mobley concourse or not concourse just just just a just a mobley rookie because this is prism So have another shimmer companies last three packs And this is it It is it Tim Duncan spurs 12 of 30 blue shimmer the big fundamental nice card for the spurs You guys in breaks listed through Saturday Trent jr. Raptors to 199 blue listen through Saturday Tenors optic basketball Wednesday daytime with me and then Friday double header release day top-stone black with Matt triple threads with Sam Silver Moba Purple ice Jared Allen for the Cavs three of 149 Herbert Jones Pulsar Jordan Clarkson jazz Hyper Dwight Howard Lakers Taiwanese League legend Dwight Howard is that where he's playing Taiwan to our T-Rookie Or not the best box at first off the line, but the hits were the shimmers were decent Not the best though. Let's hope for some big stuff in the other prisms here guys Let's keep it going again. We're gonna finish with noir one-on-one iMac and NT in the basketball So let's do 1718 prism first 1718 prism hobby here. We go Markel folds on it, baby Vince Carter on the Kings. What the heck? Mike Budenholzer Hawks coach at the time Aaron Gordon magic blue ice Separated here to 99 magic Shadarius Thornwell or Cinderius Thornwell. All right sold out for the night everybody He said he got him Sam and or he said he got him Pilch, but he didn't bring him to me. He says he's gonna get him to be this week sometime But he does have them. Thank you again, man. I'm excited to see him silver Mike Conley Grizzlies a Blue Quinn Snyder jazz you do not want coach color very much to 199 there nothing against you Quinn Snyder Jamir Nelson there he is We got mojo. Come on, baby. Come on come on mojo. Come on Jonathan Isaac There we go luck of the lottery Jonathan Isaac magic 18 to 25. Hopefully he'll play again Mojo Isaac rookie insert Hopefully he was really good when he when he was playing His packs don't want to tear in the right spots to imagine beat the Raptors again The magic own the Raptors they own them auto's coming, but he's a little stuck Devon Reed sons on these Silverado Silver Kristaps Hyper fundamentals Kyle Lowry Raptors Lonzo rookie base Lakers Laurie marketing bulls rookie Wayne Seldon What was last time he played did he play in the bubble or was it before the bubble? I forget now Bron base Hyper Chandler Parsons Grizzlies a Ruby wave Brad Steven Celtics. All right, the coach color can stop now Unless it's gonna be like a one-of-one or something Alfred Payton John Collins There you go Hawks rookie Silverado Solid card for the Hawks Brooke Lopez silver for the Lakers Hyper has on a white side get hyped hyper get hyped No, it hasn't taken place yet. We we are behind so It's not started yet took us a while to fill this mixer up Hyper Corey Joseph Pacers would be wave Rick Carlisle. Okay, this is getting ridiculous This is getting ridiculous for Carlisle great great coach great coach sad man sad It is a coach box you got to turn it around though you turn it around Silver subbonus Pacers Terence Ferguson rookie Thunder blue to $1.99 Courtney Lee magic legends Hyper Muratich bulls Ruby wave Bledsoe Sons Justin Jackson. Come on. Come on. Come on. Hyper Paul George Thunder Ruby wave Terence Ross magic prism. Come on prism Hyper go bear fundamentals jazz Come on 1718 To assist doing what Vaughn? How old is your mirror jogger? silver Eliseo bulls a Drew holiday pelicans number to 75 There might be purple I don't do it man. That was a tough box. I'm sorry guys 1819 two boxes now again if we pull a Luca rookie silver Ruby wave hyper or numbered Everybody in the break gets for every spot in the break gets a box of 21 22 optic basketball hobby Ship to them with their cards Yeah, Vaughn that sounds like the most you are me or you're a thing that could ever happen right there When you told me that I just wasn't surprised. I just assumed he was still playing Come on Luca blue Seth Curry Blazers It's a 199 Ruby wave Kyle Lowry Raptors Silver Chris Paul Rockets Amir Johnson 76ers on the base auto Hyper rookie Kostas onto the Kumpo Mavericks Robinson Lonnie Walker Alonzo Trier, so that riches riches rooting for it to you guys he wants to give everybody free stuff hyper Ryan Anderson Rockets Sexton base rookie Jalen Brunson Mavericks on the blue ice. There you go Mavs 29 of 99 Not necessarily the guy are looking for but also good player Ruby wave rookie Javon Carter Grizzlies Brunson Isis is definitely a good non-Luca Mavericks rookie for sure. He's he's killing it this year, right as the next guy Silver rookie Jaren Jackson jr. Grizzlies aren't gonna solid box going here Hyper LeBron Lakers Right, okay. Hey, okay Getting there Silver Lynn Sanity for the Hawks Ruby wave Isaiah Thomas Nuggets, okay now it's just getting weird Isaiah Thomas Nuggets Lynn Sanity Hawks, what's next? What's next? Grayson Allen Everyone's favorite player Purple ice Bill Russell 113 of 149 For the C's a Ruby wave John Collins For Atlanta Petra Ewing his sonics uniform. I don't say that don't say that. Oh, there's a tray. Hey, there we go base tray Atlanta silver Dr. J Sixers Purple clay Thompson Warriors 4275 is a much better box in that 1718 Just go we need we needed a bit of a bounce back after that one three coach prisms in that one MPJ base rookie Bates Jop Sons Macal bridges There we go on the base auto. There you go sons Nice nice nice hyper rondo for the Lakers Rande Hollis Jefferson. I remember that guy Marvin Bagley Time Lord rookie red Austin Rivers wizards to 299. Don't remember that Ruby wave Chris Dunn bulls Jalen Brunson base Lot of work is I forget about this class Silver Torian Prince Hawks Hyper Noelle Thunder. Come on Luca. Come on Luca Silver Damien Lillard Blazers Fireworks over Chris Paul as a rocket right not even a base Luca Come on One more not base that means we're due right went one without it now. We got to get one with it Don't do it Lane. I mean maybe do it. Maybe maybe do it, but don't do it I maybe I guess he made it this far. Don't do it silver and beads for the Sixers purple Marcus smart Celtics 30 of 75 C's Hyper all-day towns for the T Wolves Blazers and Anthony Simons rookie Otto Nice card Blazers and a hyper Anthony Simons. Wow. What a pack for the Blazers Yeah, I got you rich Good stuff man. Nice cards there Good stuff for Portland for sure His stuff has quietly gone up and as it should though. He's a great player He's just in the port land the land of all the ports Lonnie Moe Bomba, baby Kobe Purple ice Dennis Johnson to 149 C's Ruby wave every Bradley Clippers is he I have no idea time Lord again. Yeah, those are some nice Simmons, man Those are some nice Simmons for sure Troy Brown.  You played forever Silver Kali Stein Kings. Oh points 250 random at the end hyper AI sixers to dosage Melton hyper Wiggins for the T Wolves Josh Hart blue Julius Randall for the for the Pelicans to 199 Ruby way a lot of Porter jr. Wizards con sexton again Come on three packs Moe Wagner Silver Kelly ubré a few players we haven't even seen base of Kid Gilchrist hyper Trey base again for Atlanta Silver Wilt Chamberlain Lakers Ruby waves thought of Meyer Sons No way he was playing back then that has to be a like a throwback card The vet card Diop blue ice is a Jason Tatum a second-year Tatum There you go 45 and 99 C's and Ruby wave rendez Hollis Jeperson for the Nets So not even a Luca base Or a shy base Moving on. Let's do one-on-one not even a single Luke. I'm sorry Maverick spot to one-on-one Luca Otto from any are you saying Luca Otto from any of these Rest of the break Luca Otto could be a ball could be anything. All right, we're back in guys Everybody's back in everyone's pulling for the Mavericks now To one-on-one again. These came from the top of the case I did it during the stream not recorded before we did the random and everything So we're going to go back and check that we did that Scotty Barnes to 99 nice Parallel for Toronto It's not moving little Out of the where it should be the Raptors And rookie Otto Luca Garza Pistons 14 of 99 Thomas woman Luca. Come on a hardened green and number four or five for the Sixers and a Wizards prime Jersey Otto rookie Corey Kisford wizard of 14 of 99 or he said wizards. Let's do Let's do noir first offline first, then we'll just go through iMac and a NT nor first offline 21 22 Now there's gonna be a lot with this. What's your elder at the end? All right. Oh, there's Luca to 35 Am I taking Luca or Zion? I would go Luca Yanis to 99 bucks wizards din witty 9 of 10 a feature length gold frame LeBron James two of 11 Lakers are the first off the line frames card. Yep, that's sick LeBron James. I threw to the sound effects on my own now Awesome card Lakers going in a mag, of course Rookie Jersey cabs Evan Mowbley number 24 25 Rookie patch rather Not perfect corners. Sometimes it happens in noir a Game-warrant Jalen Brown Celtics to 99 box office Jersey Sonic Sean Kemp Sonic's go to the Thunder Game-warrant Jersey 99 Otto's coming up here Rookie Auto Clippers Jason Preston 92 of 99 Cavaliers Ricky Rubio Otto 21 of 99 RPA Noir Joshua Primo Spurs 58 of 99 and a Jama Rant redemption freeze frame signatures congrats Grizzlies Jake, what does it grizzly sound like? I don't What does it sound like man? You do it so well. I do it so yeah, you do the grizzlies not noise so well I Congrats grizzlies He does he just he just didn't want to do right now guys 2021 iMac Two of them guys who are in a fight a grilled cheese or a taco got Dreymond green 24 of 99 warriors Hawks Jersey John Collins 43 of 99 Blazers patch season McCollum 6 of 25 Hawks rookie auto Nathan Knight numbered 79 of 99 Signature moves Pistons Grant Hill 45 of 49 love the designs on these Grant Hill there he is man legend And shadow box signatures clippers if it gets you back to a 10 Zubat's back Come on Luca. Come on, Luca Everybody wants optic. Come on Luca. Yeah breakers call. It's a real thing. Ask rich. It's real thing You break enough like bowman jumbo Or super jumbo and you're holding cards like this all night, and then you're you can't move your ring or pinky finger anymore Yeah, which has it permanently Chris Paul six six of 49 sons Jersey card bucks true holiday 76 of 99 really cool Pistons triple patch here for the rookies Killian Hayes Sadiq Bay and Isaiah Stewart five out of 25 Immaculate signature moves Kings buddy heal this was before the trade. They were traded last season. This is 2021 This is Kings buddy healed Immaculate signature moves a Nuggets RPA Zeke Najee six of 99 Yo, check this hit out you guys check this hit out Bulls one of one game use laundry tag auto Luke Longley Check that out that's a Chicago body One of one game more laundry tag auto Luke Longley There's a name right there, baby Luke almost almost Luca almost We'll get that bag for you bulls And here we go guys 21 22 NT hobby last box of cards We still have four signed basketballs coming up and again gonna recap later on tonight. We are behind now We're behind like 40 minutes Luca Longley, come on Luca Doncic. Come on get everybody somatic come on Hero to 99 heat base card base parallel Pistons rip Hamilton flawless printing plate Jumbo Jersey game worn for the seas Jason Tatum three of 99 Lakers LeBron James One of 99 materials. I'll be game worn. Sounds good rich. We'll do So rich said if we don't pull a Luca auto then we'll add another box of one and one on on him to the break Thanks for filling this up guys did have some very nice hits triple Jersey auto net circuit day run sharp 72 of 99 Thank you. Thank you. Thank you again We are sold out for the night can hangers out the basketball releases Wednesday breaks are up a pink RPA thunder Tray man 22 of 25 Man is that a nice card? Get it Jake his name is man Get it man. Oh man Very nice card thunder. We will get that magged. All right, so I got some other autos coming up here Jersey Quran Butler for the Clippers. Oh, yeah, he did play for the Clippers didn't he that Wagner? Oh my god, dude I cannot wait to see that Wagner again Jersey card for the The Bucks Michael Redd 68 of 99 Oh the goat magic National Treasures National Archives Inc. Hey to Turcaloo 9 of 10 there we go and Peerless signature Joe Harris Nets 1 of 10 Rich do you want me to add the one and one now or wait till we get done with the basketball to see if there's an Art Luca in there Just curious. I'll do the basketballs first anyway Basketballs sealed case. I'm gonna leave it right here guys. I'll just put it up here Try start basketball sealed case here Follow them inside. Okay, we'll just add it now then actually before I do this Again from breaks. I'm taking the top box as you guys can see here. It's on the right. Let me get the Sharpie 1211 again there before left Just do the one on one real quick here while Jake still has all the cards. Okay There's gonna be Luca in here, isn't there? You Thomas moments look in here, isn't there? If there's a one-on-one. How do you guys think Jake is gonna react this time? So bonus box bonus box everybody this is the 40 the 31st box of the break 9 of 15 k pj rockets. Oh, that's gold That's gold 75th team signatures gold Alan Iverson one out of ten Sixers with a very nice bonus hit. Let's go That's sick. That is awesome and love the gold trim on these the answer Tom bow practice Not a game Practice Again, I don't think these have team designations. So Again longest tenure if they're inactive and then if they're active It goes the current team Okay, this one is like wrapped wrapped wrapped in this stuff. Oh This is This is a Jack sigma Jack sigma is he sonics or Pacers Jack sigma to be longest tenure It is Why did I say Pacers? He was never a pacer, right? It's uh, it's sonics. Let's go to the thunder via the sonics Why didn't he say it was never a pacer?  Sorry This player I just want to double check that it is this team Because I'm biased with it when it comes to this player, so I would assume a different team It's probably gonna be Okay, so this one is gonna be for the bulls This is actually a lot closer than I thought it was gonna be honestly with this guy Where's the oh there it is Horace Grant? Horace Grant Seven years Orlando seven years Chicago, but games played tiebreaker goes to Chicago 546 to 411 he did not must have been out a lot with the magic 546 games played with seven years goes to the bulls Horace Grant very nice Yeah, sick my signs and some panini card products They seem like just a few few products a year Current player current star if you will De'Aaron Fox De'Aaron Fox Kings There you go He's been pretty good. I mean he's been good like his entire career, but he's been really good this year, too Last box of the break everybody. Thank you again. We'll do the recap later on so I don't get it uploaded separately See his players for sure. He's tired. I just want to double check. I got the right team so This one goes Washington Yes, one goes Washington Multiple Washington franchises for this guy season. He's an older one Elvin Hayes Elvin Hayes Hall of Fame 90 Maybe nine or five what year was he Hall of Fame? It's kind of cut off there Maybe it's just 90 Elvin Hayes Wizards was Washington and that'll do it. Thanks again everybody again recap to come later. I have to watch this after the fact It'll be uploaded separately. Thanks again everybody. We're on to football now


We brought you the story of a Syrian boy who is now attending university against all odds He was one of thousands who benefited from a billion dollar investment by a Philanthropist here in the UAE well I spoke to two of those students and the man who helped changed their lives. This is part of our conversation The situation was my dad couldn't find job for two years So me and my elder sister we had to work instead because someone had to pay for our expenses So what's your story? I've always wanted to become an engineer then lately after discovering all the Technological advances and stuff and deciding that I want to be involved in the field of computer science I applied to this university and here I am. This is a huge investment in the next generation Why there's some why now if our nation need to go to the next phase and To me to overcome its challenges. I think it's only through education will make it. What are your expectations from the students? I think I love the students that we have a Great pool of students. We had fourteen thousand five hundred applicant So this is really the best of the best in the Arab world and the UAE I love their Excitement their determination some of the background they've been through like Said and here he comes You know he's studying at American University Chargers. This is great. Are you finding it tough? It is tough It's basically demanding time demanding what I really want to do getting a high GPA It's not for the sake of the grades basically it's for the sake of knowledge. So how Competitive was the process one assumes you wanted the creme de la creme. We made it So easy because it was all internet-based and we have two criteria You have to be academically advanced and then second is we also we want to make sure they come from there You know low-income family people who you know never thought they can ever make it to school So you have to meet the two criteria once we selected the best of the academically achievement and The most deserved candidate then we do a Skype interview We also need to make sure that their personality their skill their attitude to school to people the community fits How was that Skype interview cool? I really really liked it The way she made me feel during the interview. It just made me always smiling and talking freely and without Having to consider like okay. Oh, well who's watching me? Who's gonna see this? I was gonna be good for you inside. Yeah, I guess it was really friendly and easy-going Yeah, but you can like feel the tricky questions. They're asking it was challenging It is challenging without making you feel inadequate in any way. Yeah, it's clear that this scholarship Was incredibly important to you without it. No, I won't be here. I cannot afford the expenses of such University it's world-class university. We are talking about so the scholarship was the only solution for me We know that the unemployment rates across this region are pretty dire What are your hopes and aspirations going forward given the opportunity that you've been given it? I would like to launch An organization that's mainly aiming at encouraging young especially females who are interested in pursuing their careers in the in the field of computer science and hopefully to employ people in in in this Field in this field. So Becky to kind of solve this problem. This is music to me. We think it's Philanthropy is big business man role You don't have to be a rich person to to be a philanthropist I would love to see thousand many philanthropy across the Arab world everybody in their own You know a scope of work That is an inspiring example of philanthropy and how one person can make a very very big difference


and it's been slammed into each other enough that it's just consistently bringing black now. Or maybe Mendo perps, you know? And what we know about Mendo perps is it's, it expresses a lot of different smells in the S1s. One of those is heavy anise, you know? And that's always very interesting. And I think the fact that it breeds true to black in a lot of cases is another interesting point to that. What's your thoughts on it? I will admit that, this is a little political or whatever, but I will admit that I did not believe for a long time some of the stuff Matt was saying in terms of, not that I thought it was lying or anything like that. I just, you know, I just didn't, I just didn't quite see it quite as much. And then,


The paper compares three different methods for land surface temperature, LST, inversion from Landsat 8 thermal infrared sensor, TERS, including radiative transfer equation-based, split-window algorithm and single-channel method. The radiative transfer equation-based method using band 10 has the highest accuracy with RMSE lower than 1K, while the SW algorithm has moderate accuracy and the SC method has the lowest accuracy. This article was authored by Xiaoliu, Xulinghua, and Xiaotsong Wu.


Police have arrested a 51-year-old woman after four people were found dead and another seriously injured at a hospital near Berlin on Wednesday evening. Police arrived at the Oberlin clinic late in the evening and a spokesman was quoted as saying that deaths were the result of violence and that the 51-year-old was a prime suspect. The Oberlin clinic is a specialist orthopedic hospital with some 160 beds and 300 staff. It's unclear if the dead were patients at the clinic and there was no information regarding a motive.


So who are you here for our kids or the killers? I'm here for people like Alex Navarro She's a mom's demand action leader in the San Francisco Bay Area and last week after I convened a meeting among my Constituents and people like Fred Guttenberg and dr. Joe sacran an emergency room physician at Johns Hopkins Alex Navarro told my constituents That her six-year-old daughter After you've all day after seeing the images behind me Said to her mom What picture are you gonna use for me? What picture are you going to use for me? That's what children are asking their parents across America because they don't believe they're gonna come out alive What picture are you going to use for me? We're supposed to be the protectors. We're supposed to be here for the kids And so to my colleagues today who flew in town came to work Got ready to argue. My question is why did you come here for at all? Why did you come here at all? If you're not here for the children Why don't you go to the funeral of the killer? Because that's the only place where the killer is being celebrated We're here to get things done and protect our kids. What's your job? I yield back And he is exactly right Democrats have got to remind Republicans at every chance that they get that they Cultivated this environment of fear where we have to fear if children will be slaughtered at schools Where we have to fear if a gunman is gonna walk into a movie theater or a grocery store and kill us They've done this They're a fusel to take even the most basic common-sense measures to reduce gun violence that most of the country supports has Specifically led to this moment and blood is on their hands and they need to be reminded of that But when you remind them of what they've done well, they react in the way that Louis Gomert reacted take a look to infer by Rhetorical supposed questions. Who are you here for?  I mean for heaven's sake.  So what does he do? He lashes out Again if you wanted to take action You had numerous opportunities to do just that but he won't even do the bare minimum Let me remind you about Louie Gohmert's voting record within the last four years He's had four chances to support universal background checks that 90% of Americans support and he voted against them every Single time but don't worry. He's gonna tell you he took action in 2018 by voting for the stop school violence act But what specifically is entailed with the stop school violence act the so-called a stop school violence act? Well more guns in school Put armed guards in school Potentially, you know give teachers The ability to have guns in schools. Hey Louie remind me what happened when we had good guys With guns show up at Uvaldi. They waited around for an hour while kids were being slaughtered So the solutions that he supported in the past aren't actually solutions Republicans will talk about everything but guns. We've seen this countless times. It's a Perhaps legalization of cannabis. This is what Laura Ingram is now saying. It's a lack of God in schools Mental health its doors if you ask Greg Abbott and Ted Cruz They don't want to address the actual problem, which is guns now He tried to do a little bit of a what about ism with regard to Democrats were in control of big cities and have higher murder rates Well, this is not necessarily a good thing to bring up when you're against gun control because ask yourself Louie Why is the murder rates so high in these areas? Could it possibly be to due to a lack of federal gun reform and even if you know a city wants to take action? Republicans at every single level across the country have tried to stop them And in fact another Democrat Mary Gay Scanlon pointed this out I do want to respond first to mr. Gomeran I'm sorry that he and many of his colleagues didn't think it was important enough to be here today But I did want to respond to his allegation that Philadelphia's homicide rate No, I will not Gentle lady does not use my gentle lady does not yield the time is I waited I wanted to Gentle lady is not yield I wanted to respond to mr. Gomer it's allegation that Philadelphia's homicide rate is the fault of Democratic leadership in that city Apparently he doesn't understand that the Commonwealth's Republican legislature For decades has blocked city leadership from passing the types of common-sense gun safety laws We are considering today so to the broader question like most Americans I am Sickened and sick to death of the gun carnage we experience in this country every single day And she's right about that now even if Republicans in that particular situation weren't blocking gun reform the reason why Federal gun control is necessary is because if you live in a state where you can't get a gun Well, you can simply cross state lines and purchase a gun in a state with more lax gun control laws So this is why you have to homogenize every single state make sure that the laws are consistent So crazy people don't get the guns But Louie Gomer he doesn't even support the bare minimum In fact, he's voted to support gun manufacturers the actual makers of these devices of deaths So it's just it's ridiculous But yet he's mad when the Democratic Party reminds him of the blood that's on his hands Ridiculous now. Look, let me be clear here. Both parties have blood on their hands in different respects I think that members of the Democratic Party who don't support Medicare for all and let people die due to a lack of health insurance They're guilty of deaths to Republicans are also guilty of this to be clear when nobody in Congress does anything About the housing crisis or food insecurity. They're responsible for those deaths as well But when it comes to gun reform This lies squarely on the shoulders of Republicans who have blocked every single measure That could make even a small difference Now since we're talking about Louie Gomer You might have noticed that he was partaking in this meeting via zoom And that's because currently Congress is supposed to be on vacation and Republicans didn't want to hold this meeting So they decided to phone it in they had to be there right because they had to espouse the talking points of their donors But you know, they decided to phone this in and I'm glad that Mary pointed that out as well But you know, I've got to talk about Louie Gomer more broadly speaking because you know seeing him overreact to that That's necessary because this is somebody who was a very dumb person and that's not an ad hominem attack I'm not just saying that to be mean.  We know there's significant solar flare activity He said and so is there anything that the National Forest Service or Bureau of Land Management?  How does he like 60 70 75? The fact that he's survived this long is genuinely impressive to me like there have been multiple times I'm assuming throughout his life where he nearly died By forgetting to breathe spontaneously or by wandering into traffic not really realizing what he's doing or bumping You know his head and causing himself to get a concussion by tying his shoelaces together The fact that he's made it this long is genuinely impressive and the fact that he's a member of Congress Should let everyone who doubts themselves realize that they are capable of anything if Louie Gohmert can make it to Congress You can do anything you want to so look he's mad But I don't care he should be mad because he did this it's on him The blood is on his hands and he has to live with himself every single day so Louie die mad


So this is the time we successfully saved the pet from an unattended death scene. So last year our West Palm Beach franchise was hired to clean out an unattended death scene slash Horde. Unfortunately the individual had passed away in their bed and the decomp had been absorbed into the mattress itself. What we didn't know going in was that the individual was an avid collector of horror movie memorabilia. Annabelle, Raggedy Ann, the nun, you name it, she had it. Unfortunately the homeowner's cat Holly had not been seen in several days. Typically when a homeowner passes away their pet is also unfortunately left to starve and die because no one's there to take care of them. However when we went into the bedroom to clean the decomp we had also discovered that a giant hole had been cut out of the box spring. So a lot of us were thinking to ourselves oh we're about to find a dead cat inside of a box spring. But then all of a sudden Holly comes flying out of the box spring and into another bedroom. Luckily the client was able to successfully capture Holly and put her in one of the pet cages. These are without a doubt terrifying experiences that no pet should ever have to go through. Fortunately in this case Holly's living happily with her new family.


What's going on everyone? Sam here with late in sports cards and I'm ripping two boxes of 2021 Penini contenders optic for Joe L. So good luck Joe. Not sure if you're in chat at the moment. I know you're usually uh I know you're sometimes in chat so if you're here good luck if not and you're watching this tomorrow good luck again. You think Detroit has a surprise team this season Dallas? I don't know man. I don't know about that. Got uh red Aaron Jones season ticket that is the 175 Packers. There you go. Got to 75 Jair Alexander and Aaron Rodgers on the X's and O's for the Packers. Base of Russell Wilson. Base rookie of uh that is Nico Collins. We've got first autograph is Gary Brightwell on the Silver Autograph for the Giants. That is Gary Brightwell and Larry Roundtree is the second autograph that is for the Chargers. There you go. Let's heat up a little bit in the second box. I don't know how good Goff is. That's the only thing. He was carried by like when he was on the Rams he was carried by that defense and that offense and that coaching. I think you kind of know what you have with Jared Goff at this point. Let me get this out. Come on. Come on. Base there. Maybe not an RPA but got something here. We've got Pat Fryermuth on the I'm assuming that's red right? Yeah red rookie to 175 for the Steelers. So he's down 40 and relaxes. Got round numbers. That is Kylan Granson and Jacob Harris on the red, white and blue to 13. Nice low numbered hit there. Got that Crestcott base. Uh base rookie is Tarris Marshall Jr. We've got base autograph is Kylan Hill that is for the Packers. Pretty nice one here. We've got RPA to 25 for the Chargers. Orange of Josh Palmer. There you go. Congrats on that hit Joe. Pretty solid. Nice RPA. Congrats on that one there. Congrats on all the hits from your break there Joe. Thank you again as always. We'll get those right out to you. Thanks man.