All righty, welcome back to operating systems. So today we get to talk about locking. So we kind of figured out what a mutex is. So today we will see some more advanced usage and kind of set us up for the next assignment. So as an aside, in some languages there might be something called a monitor and with object oriented programming developers wanted something easier to use in a mutex because with a mutex you can always lock it and forget to unlock it. If you have multiple ways to exit a method then you have to make sure you unlock at every rate before every return statement. So what some people did is they just say, hey, you can mark a method as monitored and automatically let the compiler handle the locking and unlocking for you. So the rule is an object can only have one thread active at a time in its monitored methods. Basically it means that the object gets a mutex as part of one of its fields, it's created for you so you don't have to manage it and then any method that is declared as monitored the compiler essentially inserts a lock call right at the beginning and then an unlock before every return statement. So if you've done Java, there's a synchronized keyword and that is an example of a monitor. So if I had a class that was supposed to represent, I don't know, someone's bank account I could have an in balance and then I would say the deposit and withdraw methods are synchronized. Therefore they won't have any data races because the compiler will essentially transform the calls into something like this. So this stop monitor would just be the mutex. So in the deposit method, since it's declared as synchronized, it would get a lock and then it would do its calculation and then it would get an unlock and then same with withdrawal and this would be one mutex per object. So you won't have any data races between with the balance of a single object. So that is what Java does for that. It's built into other languages, just depends. They'll all just be called a monitor. So we can go ahead and explore our last synchronization parameters. So there is something called condition variables. Although they're supposed to be a mechanism for keeping track of variables that might change and you want to wake up threads based off a condition. The implementation themselves, it's easier to just think of it as a queue. So there's this pthread conned underscore t. You can think of it as a queue and there's an init, a destroy and then there's a few other methods. So there is a signal. So that will explicitly wake up one thread that is currently waiting in the queue. Broadcast will wake up every single thread that is waiting in the queue and then this weight will put the thread in the queue and just block it until someone else calls signal or another thread called broadcast to wake it up. There's also a version of weight called time weight which will automatically unblock itself after a set amount of time you give it. So if you want to just make sure it gets up after some amount of time, you can use time weight. So for this, we'll just use weight and signal. So weight adds the thread to the queue, puts it to sleep and then signal will wake up a single thread in the queue. Broadcast wakes up everything. You might see broadcast once you get into GPU programming and things like that. That's basically what broadcast does. So all these condition variables which are basically a queue must be paired with a mutex and any calls to weight, the mutex must already be held. So you must have done a lock call on the mutex before you call weight. So you can only call weight if the mutex is locked by you. Signal and broadcast, you don't have to call it while you have the mutex. It doesn't matter, you're just waking up a thread. So why do you have to do this? Well, you can think of weight, it needs to do a few things. So one, it needs to add itself to the queue safely. So we don't have any data races and also it's probably protecting some variable that we're using to use as a condition. So we wanna make sure threads don't have any data races while they are changing that variable. So that's why it needs a mutex. And as part of that weight call, the weight call will atomically add this thread to the queue and also unlock the mutex so that another thread can make some progress. So you can have one mutex protecting multiple condition variables if you want. Generally you just pair it with one and keep track of some variable. So we'll just make it simple. We will just consider calls to weight and signal. So again, we should understand what weight does. So the thread calling weight will atomically do three steps. It will add itself to the queue for this condition variable. So you can think of that p thread con. I mean, I find it easier to just think of that as the queue itself. And then it will also unlock the mutex and then it will be blocked because it has put itself to sleep. So the thread calling weight, by default, if you just call weight, it's not going to wake back up until another thread calls signal on it. If another thread calls signal on it, well, it will be unblocked. It'll be eligible to run. And then the first thing it will do is try and acquire the lock before returning. So before you call weight, you will have the lock. As part of the implementation of weight, it will give up the lock and put itself to sleep. And then whenever it wakes back up again, before it returns, it will try and acquire the lock. So before and after, you have the lock. So you're guaranteed you have mutual exclusion. Yep. No, this is p thread con weight. To join? Yeah, so thread join, weights for that thread to terminate. This weight just puts this current thread to sleep. So we're definitely overusing the word weight because weight means the different things for processes too. And yeah, so we're not terribly creative. We don't have a lot of names for things. So there's like weight means different things if we're talking about processes versus these condition variables. So weight in this case just puts the thread to sleep, adds itself to the queue that's handled by this p thread con type. So if we go back and look at our producer consumer example, well, instead of using two semaphores, we could actually just use a condition variable. So our condition is going to be an int and filled. So we can just keep track of the number of filled slots. And we can have essentially a queue here for threads that are waiting for a filled slot and another queue here for threads that are weighing on an empty slot. So we can change around instead of using semaphores. We will have a mutex that's shared between both of those queues. So we lock it. That way we have no data races whenever we check this, that's annoying, whenever we check this end filled variable. So we'll just have a while. So while the number of filled slots is equal to n, which is going to be our buffer size. So everything is completely full. Then we're going to put this producer to sleep and throw itself in a queue that is waiting for an empty slot. So we'll just call it the has empty queue. And of course you have to give it the mutex. The other side of the coin is if the consumer is currently executing, while while the number of filled slots is equal to zero. So that means that everything is empty. Well, I can just put myself to sleep in this queue that is waiting for a filled slot and just put myself to sleep explicitly and I have a nice condition there. So back in the producer, if we fill a slot, well, we would increment the number of filled slots. So we just increased it again. This is in the critical section. So we don't have any data races with the number of filled slots. And then we could just signal has filled. So we could wake up exactly one consumer thread if there's a consumer thread waiting. If there is no thread in this has filled queue, then signal just does nothing. Then afterwards we unlock it and I could flip these two lines around if I really wanted to. Other side of this is in the consumer. Well, if it empties a slot, it can signal a producer thread that might be waiting with the has empty. And say we had a producer thread waiting, it would wake up right here on this line and then go try the condition again, make sure that every slot is not filled and then if not, well, it can keep on going, fill a slot, all that. So any questions about this? Yeah. So this condition variable, this p thread con, basically you can think of it as just a queue. So there is a queue for producer threads. So the producer threads go in this has empty queue. So weight essentially puts yourself to sleep and adds you to the queue. So in this, I check if all the slots are filled. If all the slots are filled, I put this producer thread to sleep in this has empty queue and I just put as many of them will go into this queue. And then in the producer, well, it will empty a slot and then signal that has empty queue, which will wake up exactly one thread. So we'll wake up one thread from the has empty queue. It will come back to life here, check the condition again, make sure that it's still not all full and then keep on going. Yeah. Yeah. So weight will just block until another thread will signal that queue. And signal just wakes up a single thread. Yeah. So the queue can have multiple threads asleep in it. Yeah. So that's a good question. And we call signal. Do we know what threads? So based off the implementation, it should just be in FIFO order. So what the order they actually went to sleep added themselves to the queue in. Yeah. So, well, silly answer is you have to because it's a parameter and other question and other reason is, well, essentially we need to ensure mutual exclusion because internally that weight function is adding this thread to the queue. We don't want any data races while it's adding itself to the queue. And so that's another reason why it would need a mutex and it also needs a reference to the mutex because we don't want to put that thread to sleep while it's holding the mutex, otherwise nothing else can do it. So this function right before it puts this thread to sleep, it unlocks it. So it needs it so that when it wakes back up, it tries to lock it again. And it'll only return from weight while it has the mutex. So it won't be the case where you call weight while you lock it and then you come back and then someone else can take the mutex because that would defeat mutual exclusion. Yep, so signal just wakes up a thread, it doesn't need any mutual exclusion at all. So just wakes up a single thread, that's it. So you can do it while you have the lock or while you don't have the lock, it doesn't really matter because the thread's just gonna wake up and then try and acquire the mutex, so. Yep, yeah, because we don't want, right? The problem we had with producers is when everything was full, we don't wanna overwrite any data, so that's what that's checking. So this is a bit more explicit than, remember we had our two center four case where we just did a center four weight and we initialized them, so. Is this easier to read than the center four case or worse? This is worse. Oh, we got thumbs up, so this is a mixed reaction for this one. So I think this one's kind of easier because with the center four case, it really depends on the initial value, too. And this, hey, I don't have an initial value, you don't have to argue it. Pretty, like it's more explicit what the conditions are. So, but again, personal taste. So let's make sure we understand it. So let's see this code and see what's the issue with this. So is there an interleaving of these two threads that will cause some bad outcome to happen? And some bad outcome would be, whoops, would be, if I'm using a condition variable, in here, I basically want to make sure that this condition is true, whoops. So I want to make sure the condition is true right here. So while I'm executing that line, that condition better be true, otherwise this whole thing is kind of a farce. So is there any way, any interleaving between thread one and two that will have thread one execute that line such that the condition is not true? So if thread, so initially, yes, let's also assume initially, whoops, initially our condition is equal to false. So you want thread two to execute first. So if thread two executes first, then what's going to happen is it's going to change the condition from false to true, and then thread one, well, if it executes, if we context switch back to thread one, it could grab the mutex, no problem. Check the while, so while not conditioned, well, it's currently true, so that's false, so it just goes here and it reaches this line while the condition's true, which is what we want. So that actually worked, and let's reset. So any other idea is how we can get something bad. So thread one executes first, so it grabs a lock, okay, and then does it keep going? So it checks the condition, so the condition's currently false, so it would hit the weight, and then add itself to the cue. So let's go conned. My cue just looks like thread one right now. So no other choice but to execute thread two. So if we execute thread two, it changes the condition from false to true, and then does a signal. So thread one is currently in the cue, so it would wake it up, and it would resume, it would wake up, try and grab the lock right now, no other thread has a lock, so it would go back, check the condition. Right now the condition's true, so it makes it to this line while the condition's true. So that's also good. Yeah, so in this case, we're actually good, but this is bad practice. So let's see, so what about if it looked something like this? Yeah, sorry. Going back here, yeah, so this is fine, but if we added another thread called thread three, thread three set the condition to false, then we might be in a situation where we are screwed. So it might be the case where we start executing thread one, while checks the condition. The condition is currently false, and then it would go put itself to sleep, and then thread two could set it to true, wake that thread up, and then before it even wakes up, thread three could set the condition to false, in which case that would also be fine. We would only have the, it would only be bad if what happens is thread two, thread two starts executing, sets the condition here, three set back. So the case that's really bad, everything's reset. So right now, if thread two executes first, what it can do is change the condition from false to true. So our condition is now true. If thread one executes, well, it could make it past this condition, make it to this line without executing it, and then thread three could run, because there's nothing to prevent it from running, even though thread one currently has the mutex, thread three doesn't use it, and it just sets the condition back to false. And then in which case, if we start executing again, then, well, we execute thread one, and at this line, the condition is false. So we don't have the problem if we only change it from false to true, but you can see if we make this more complicated and we add more threads that are changing the condition, well then, I should, what should I do to fix this? So I can ensure that this does not happen. Yeah, yeah, I want to add a mutex to be safe. I should probably just add a mutex to both of them. So I should, oops, and then same thing here, lock, and then unlock. So now, if I have this, no data raises, yeah. Yeah, so if thread one starts executing in this case, here we can reset everything, actually. So in this case, if thread one starts executing, well, it would grab the lock. No thread, even if we context switch it, they can't pass the lock. Check the condition, it's currently false, and then we add ourselves to the weight queue, and then as part of that, well, currently this thread goes to sleep, so thread one is on the queue, and then as part of that going to sleep, it also unlocks the mutex. So this is why we want to make sure that that's what one of the things that weight does. So since it has unlocked the mutex, now doesn't matter, either thread could go, and we're fine, no data raise. Sorry? No, so as part of the weight, it unlocks the mutex, well, first it adds itself to the queue, then it unlocks the mutex, and then it goes to sleep. So it can't execute anymore, so we still have mutual exclusion. So let's say thread two ran, and then change the condition from false, it got the lock while it was in the queue, changed the condition from false to true, and then signaled it, so now it woke up, so now it is currently not in the queue. So at this point, either thread two, or thread three could get the lock, or thread one could get the lock while it's returning from weight. So your question's about what happens if thread three goes? Yeah? Yep, well in this case thread two's done if that's the only thing it's gonna do. So if that's the only thing it's gonna do, then thread one is gonna wake back up, acquire the mutex, check the condition again, and it's false and just put self to sleep again, because while the condition's false, so it can't do anything anyways, because it wants to make sure that that only runs if the condition's true. So if it's not true and it never becomes true, well then it's just in the queue forever. Yeah? Yeah, in this example, but you could have in a realistic program, that multiple threads might be updating it to true or whatever, yeah. So if we don't have lock and unlock, so if we don't have these locks, so what could happen is, well the simplest case is thread one executes, grabs the mutex, and then let's say thread two executes, then changes the condition from false to true, then thread one executes, checks the condition, and it's true, so it passes, and then right before it executes a line where we want to make sure the condition is true, well thread three can execute, and then change it back from true to false, and then if thread two executed again, it would be running this code while the condition is false, which is not what we want. Yeah? Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. So we'll get, so another thing that could happen, so let's assume the wait call, or the lock and unlock calls are there, so it's false, we'll move thread one back to the beginning, thread two back to the beginning, whoops, and thread three back to the beginning. Oh no, I'm just resetting the whole question, sorry. So your question was, okay, so what happens if thread one executes first, grabs the mutex, conditions currently false, so it needs to wait, so it would put itself here in the queue, and then unlock the mutex, put itself to sleep, all that good stuff. So now you said what happens if thread two executes? That only does the condition. Only the condition equal to true. So it changes the condition to true, and that's it before it gets the signal, and then it unlocks the mutex, say, and before it gets the signal, we execute thread three, so then we execute thread three, it can grab the mutex, continue, we just change the condition back to false, so then thread three is done, and then at some point, the only thing that can execute is thread two, so it would signal, so it can't execute thread one because it's asleep, a sleep here, so because it's asleep here, it's in the queue, it can't run, so I have no other choice, but to execute thread two, and it wakes up thread one, and then they would check the condition again, it's false, and it would just put itself back in the queue, because it's false, yeah, yeah, so there is a, you can make that condition always false, if the condition's always false, then thread one, if it's waiting for that condition to be true, it'll just sit in the queue forever, if there are no threads currently running, just wake it up, so if you wanted to, you could, every time you change the condition, you could do a broadcast to wake up everything in the queue, or whatever, but generally, you'll just have threads going back and forth, like with the producer example, so any time it updates the variable, it just wakes everything up, or it just wakes up one thread, yeah, so broadcast will, so what Signal does is, wakes up a single thread in the queue, yeah, so it wakes it up, and then it's no longer in the queue, and broadcast wakes up every thread that is in the queue, yeah, yeah, and the queue is just everything that's asleep, so after broadcast empties the queue, everything's awake, all right, so we kind of answered our question, if we go to this, that has a mutex around everything, so all I did here is change the while to an, or yeah, change the while to an if, so right here in thread one, this was my only change, and you might think like, why is there a while there? Well, if I change the condition and it wakes up, if I wake it up only when it's true, shouldn't it always be true? Why the hell do I need an else? Well, or sorry, why do I need an if there instead of a while? Well, we saw that in the last example here, when we woke up thread one, but thread three executed, change it to false, before thread one resumed from the weight and change it to false, and that's the while loop there made it recheck it to make sure the condition was actually true, because well, even though you don't have any data races, you have to make sure that you have the most up to date value, so you have to make sure you recheck the value, so that's why you need a while there, so if I just change this to a if instead of a while, like with the previous example, it could be the case where the condition is false at this line because it wouldn't check it, right? So very important, if you do this, you have to be sure you have a while there and not an if, even though an if will probably work most of the time, won't work all the time. So any questions about that? We basically saw that in our example. All right, let's move back. So condition variables, pretty much serve a similar purpose to SAFORs, SAFORs are a special case of condition variables, so assume your condition was just an integer that you're keeping track of, well, now you have a queue that you manage, you can just go to sleep while the value is zero, and then whenever you post, you would just wake up a thread so you can signal every time you increment it, you can implement one in terms of the other, and you can also do the reverse if you want, but it can get a bit messy. Leave that for the computer scientist because messy, cool, messy means you probably can't read it. So for comp, the rule is basically if you have more complicated ordering between threads, most of the time condition variables are better for that. If it's fairly simple and fits into a center for, use a center for, and there's no real right answer, just try and do whatever provides better clarity. For more of this, this is mostly an intro for this course, so you will have more practice with it in other courses. Yeah, so the center for also has a queue, right? So if you wait on a center for another wait, so if it's zero, it puts itself to sleep, essentially it puts itself on a FIFO queue as well. So essentially it does the same thing, right? It's just a queue you can't see. So the difference is center for is just a value and just has the increment and decrement, all that, and that's it, that's all it can do, right? It just has those simple rules. If it's zero, puts itself to sleep and waits until something increments it so it can wake up and then decrement it, that's all it does. Condition variables, you have your own queue, you can manage it, do something more complicated than just incrementing and decrementing. Yep. So generally, so the question is, is there a way to pick a specific thread in the queue? And generally you wanna make sure everything is fair, so you want it in FIFO order, in which case you use their implementation. So if you really want to make sure that you pick a specific thread in the queue, well then you're doing your own thread management. Which, with pthreads you can put threads to sleep and wake them up if you want, it's just more complicated. So typically you just use whatever tool you actually need for the job, wow. All right. So next we need to talk about locking granularity. So this will be the topic of lab five. So that's the extent of your lock. So remember, you need locks to prevent data races, but if you do something silly, like you just lock the entire program and make it serial, then you don't have any data races, but you essentially made it serial with worse performance because now you added calls to locks and unlocks. So generally you want to divide the locks, maybe use multiple locks, make sure that anything that's independent uses a different lock, smaller sections. So for example, what about if you wanted to paralyze a hash table? Hmm, should I use multiple locks or only one lock? Well, you get to do that in lab five. So I will give you a hash table and then you get to paralyze it and make it go fast. Yep, yep, yep. So lab four or lab five will do performance testing for you. So you're only implementing, you just create mutexes and do lock and unlock calls, so it's about 10 lines of code, and but the drawback is you have to write about it. So yeah, prior to the midterm, but it's shorter. So some things to consider about locks. Oh yeah, and two, if you're wondering why Python performance is really bad, well essentially, at least up until recently, the whole Python interpreter, whatever you called into the interpreter, just had one giant lock that was called the global interpreter lock. So their fix to data races was just to lock the entire thing. So that's why if you've used Python, multi-threaded performance is absolutely atrocious because the whole Python interpreter is under one big lock. So there's been some efforts lately to actually remove that and try and divide the locks into smaller ones so you actually have good performance. So some things to consider about locks is, well, the overhead of the lock, so it's not free to lock and unlock. You also have to allocate memory to them, so if you create a billion locks, probably not good, that's gonna waste a lot of memory. You also want to make sure that with your locks, contention is a thing, so you have to argue about that. So if there are, what contention means is how many threads are using the same lock? How often do they fight over it? So the more contention you have, the worse your performance is gonna be because if you have multiple threads fighting over one lock, only one can execute at a time. So you wanna make sure your contention is fairly low and then the last thing is deadlocks, which we do not want to have. So some locking overheads, like I said, memory allocated with it, they take time to initialize and destroy them if you're creating new ones all the time and also the lock and unlock operations are not free. More locks you have, the greater the cost is going to be. So if you, like I said, if you have a billion locks, probably not good. So the last thing is deadlocks, which you absolutely do not want because that means no thread can actually make any progress, so the more locks you have, the more you have to worry about deadlocks. So for deadlocks, the conditions you have to have is well one, mutual exclusion, which if you're, we'll just argue about mutexes. So in that case, of course we have mutual exclusion if we're using mutexes. The second is hold and wait, so you have to have a mutex locked and try to acquire another. So I have to be holding a lock and I have to try and acquire another. The third is no preemption, which means I can't take a lock away. So after a thread has acquired the lock, I can't just brute force it and tell it to unlock it. I can't, you know, I can't rob it or anything. I can't just be like, hey, unlock that please because I need it. So you can't do that. And the fourth condition is circular wait. So you have to wait for a lock that is held by another process or thread. So for example, say we have two processors or two threads trying to acquire two locks. In the first thread I get locked, in the first thread I lock lock one and then lock lock two and then I unlock or release lock two and then unlock lock one. And then in thread two, I lock lock two and then get, or sorry, I lock lock two and then lock lock one. Well, I can get in a situation with executing these threads concurrently where I cannot make any progress anymore or in other words, deadlock. So if thread one executes first, it could lock the first lock and then we could context switch back over to thread two and then it could lock lock two. And now we're essentially at a stalemate where we can't make progress on either thread. So if thread two continues, it would try and lock lock one but it can't acquire it because thread one has it. And then if I tried to execute thread one, well, it tries to lock lock two which it can't make any progress because thread two has it. So does that make sense? Neither thread in this case can make progress. If all threads can't make any progress, that is what is called a deadlock. All right, so now we need to prevent these. So easiest way to prevent a deadlock is to ensure a set order of the locks. So remember in our conditions, we don't want any circular weights or and we also, yeah, we don't want any circular weights. So this breaks circular weights if we always acquire them in the same order. So if a thread tries to lock lock one and then lock lock two, no matter how many threads I have, I cannot deadlock because I can only acquire the second lock if I already have the first lock. So because of that, it's not possible for me to deadlock because I don't have that circular weight going on. So does that make sense? So no deadlocks because I broke circular weight. Yeah, so if every thread acquires the locks in the same order, I can't have that holding weight thing, right? Because in this case, they acquired them in a different order, so it was possible that you could get lock two and without having lock one. So in that case, I have circular weight, that's bad because I could have a situation where I'm waiting for another one. But if I always acquire them in the same order, the circular weight essentially goes back to the beginning, right? So if I have a set order and I only acquire them in that set order, it's not possible to have holding weight anymore. So that is one way to prevent a deadlock. So you have to be careful here if those are pointers and the locks can actually be switched. So generally, if you can find an order, like you could always go by like the lowest memory ID if you want, you could always, if there's something to identify these, you could go by the lowest ID, as long as you have some way of making some order between the locks. So another way to do it is using Trylock, which we have asked about why you would want that. Well, now here's the reason why you would want that. So this prevents holding weight. So in this case, I could try and lock lock two, and then I can have this while loop. So while I try to acquire the lock, if I go into this while loop, it means I have not acquired the lock successfully. So if I have not acquired the lock successfully, I wasn't able to get lock two. Well, then I'm going to break holding weight. So if I have the first lock and I try and acquire the second lock and I don't get it, I will give up the first lock. So I will unlock it. I could wait, yield, do something at this point, because at this point I don't hold any locks. So another thread could make progress. And then if I come back, well, I can acquire the first lock again. And then I would go back to the beginning of the while loop and then just try again. So then I try and acquire lock two. Hopefully this time I actually acquire it and then I could run this code while I have both locks. So I can get both locks. So this also will not deadlock because I broke holding weight. If I can't get both of the locks, I give up the lock I was holding. So this way I don't have a deadlock. So I could get unlucky where that keeps executing again and again, but I don't have a deadlock. So any questions about that? So those are the two main ways to avoid deadlocks. So we saw some more advanced locking today. So we have another tool to ensure order called condition variables, which we may or may not like. So generally they're clear for more complex conditions while signaling. If you can easily represent with a center four, you should probably use a center four. And then you will see that locking granularity matters, especially for performance. So like how many locks you have and how much code they protect, because essentially anything that is protected is running in serial. And also as a thing to make your life more annoying, as soon as you have more than one mutex, you have to prevent deadlocks. Yep. So lab four just mute, or lab, wait. This one? No, no, yeah. So don't use locks in lab four. You do have a data race, but you can fix it like in the common issues thing by just reading the newest value whenever you come back from a swap context. So you don't need to use mutexes or anything for lab four, but there is a case where you will have a data race. So just be sure because when you do a swap context, that new thread might change essentially your big array pointer. And when you come back, it might be a different value than it was before.  And that's one way to prevent data race because for us nothing can happen in parallel, it's just concurrency. So it's a bit easier. All right, so with that, I guess we're done. So just remember phone for you, we're on this together.


Okay, for top secret, we're going to do breaking news. This is a Python camera, and then we're going to talk about this RTK thing, and then I'm going to show you a preview of the logo. We're thinking of it. Don't worry, we're not changing our logo to X. All right, Lady, what's this? This is me bringing up the Pi Camera S3. This is an ESP32 S3 now based camera board. You can see us in the viewfinder. It's got a wide angle camera, SD card, some ports and semi-QT for expansion and battery stuff. I got to get this working. We set button on, off switch, and we'll viewfinder. So I can, oh, and then on the back, I've got a beeper and some control. Excellent, you know, up, down, left, right buttons. Well, microphone, I haven't hooked up yet, but I thought it'd be kind of fun. And then, you know, just testing out, taking photos and saving them. You can see here, I've got a UI to change the resolution. So if I want to take some bigger high-res images, I can do that. Wow, it's a 1920. So this is the OV5640. So far, so good, coming soon. All right, so this is the board. We're going to put that video up on socials later. Yeah, this was a little bit of a close-up we did. So this is a way early coming soon, but it's a... Yes, originally this was an S2, but for reasons we had to revise it to do the S3, but now we're back on track. So yeah, we always wanted to have a little camera that was programmable with Python. Fully, this might be the only fully open source camera. Yes, so yeah, the SB32 S3 with plenty of flash and RAM, and then this OV5640, nice quality camera, and then TFT display, and you saw some buttons in the piezo, and we also have a battery. I got to get the battery stuff working next. And then we have an RTK board. Yeah, I mean, this is from years ago, like 2020, but I couldn't get RTK modules, and now they're available again. So I've ordered this RTK shield that I'll probably plug on top of the Metro ESP32 S3 to act as the Wi-Fi transport for the signal that comes from the RTK you have to send the signal from the base station to the module and back to be able to calculate your exact location. We also have a logo, forget about this. So I was looking at this, it looks like pinpoint or pin paint, it's supposed to be pinpoint, feather pinpoint, because it's like, it's a pinpoint. So we might go with that, we'll see, but that would be for this series. All the RTK boards, because like, what is our, like no one knows what that is. What is it? Real trap kinematics, a lot of really. So you use it to pinpoint things. And that's top secret suite.


A local hairstylist's fundraiser began with her three daughters that were adopted a little over a year ago.  The girls remember where they came from and wanted to give back. The sweet cases for sweet faces fundraiser will provide foster kids with blankets, hygiene kits, winter hats, Barbies and books. These duffel bags will be given to the children shortly after being placed into a new home. We spoke to that hairstylist who couldn't be identified on camera due to foster care laws. Finding how many children in Beltrami County are put into foster care per year was last year it was almost 1,100 and so that's a lot of kids that don't have belongings of their own. The goal is to raise $1,000 and they have about $300 left to reach that goal. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


As we commemorate Asian American and Pacific Islander Heritage Month, we pay tribute to all those in the API community who have striven and continue to strive for a brighter future for the next generation. Hi. Xin jia kueve. Vanakkam. Namaste. Assalamu alaikum. Apakabar. Salamu alaikum. Welcome to API Heritage Month. It's a great opportunity for other Pennsylvanians to learn more about the Asian cultures. It's a way for us to be proud of who we are. And it's really wonderful to share with all my friends and educate all the other Pennsylvanians about the different Asian heritage cultures. We feel we contribute every day to our liberties, to the freedoms of this country and to this commonwealth. Because the way we work is in partnership with other communities, we're united in our struggle and we're united in our advocacy. Come and celebrate with us, try our food, support our business.


Aerial scouts of the mutant group of the security service of the Ministry of Defense of Ukraine discovered and targeted a rare Terminator tank support combat vehicle belonging to the occupying Russian army, an armored repair and evacuation vehicle, and a trench with Russian soldiers near the Spartak settlement of the Donetsk region, the Terminator combat vehicle, worth $2 million, was destroyed by a kamikaze drone strike while firing at the position of Ukrainian fighters, the armored repair evacuation vehicle tried to leave the area after the kamikaze drone strike, but failed to do so and exploded. The successive strikes of kamikaze drones resulted in the destruction of the occupying soldiers who were positioned in a trench near the settlement.


Hi everyone, good evening. Joe for jaspyscasebreaks.com, closing out the night with 2019-2020 Upper Deck SP Authentic Hockey. It's a 16 box master case. Pick your team number four. We're also giving away a box of 2019-2020 Upper Deck SP Authentic. You got all you have to do, buy at least three teams. Every three teams you buy is one entry. So if you buy three teams, you get one entry, six teams, two entries, nine teams, three entries, so on and so forth. No vet comments, ship. And a lot of fun stuff out of here. So let's get to it. It's going to be an hour and a half break. So we're going to actually do an autograph recap at the end. So if you're looking for that, just fast forward to the end. If you're watching live, you're stuck with me. Pick your team four 2019-2020 Upper Deck SP Authentic Hockey on the fourth Thursday already in June. Big thanks to all of these folks for getting into the action. Rory with that double-ass bond mojo. Rory usually doesn't purchase hockey, ladies and gentlemen, but he was saying that there's just a lot of value in this. So good rookie classes. He loves SP Authentic and the cup. There's the case right there. We're doing both inners. We're going to go four boxes at a time. Half an inner at a time. All right. And I think we got a crew of people watching here. I think Steve Varsh is in here. I know Wade Preston is in here. Rory is here watching live. Will, are you in this? Will Christian's in this? Yep. Who else is here? Anyone else here watching this break live? If you're watching the replay, hello. Thanks for watching the replay. You know, this break would be a lot. I feel like I would be able to save 20 minutes on this break if the packaging was a little bit better. Cards inside the pack? Great. Fantastic. Good job, upper deck. This right here, though, got to look out for the group breakers here a little bit. These aren't the worst packs I've had to deal with, though. These aren't the worst packs I've had to deal with. They're also not my favorite. Wade says, thanks to the team for keeping this at a master case level. Is that preferred? Why? Why is that? I have no idea why. Is that preferable over the inner case level? It is. Why? Educate me. Myselfs in space here. All right. Young guns. Very young gun. David Ayres. All right. So I'm going to breeze through these a little quickly. I think we did a few cases yesterday, so I think you're familiar with these cards by now. So once again, vet commons don't ship. We're going to breeze through these. And obviously, we'll hold on the, obviously, those limited cards will ship. Inserts will ship. And there's Rasmus Sadeen. Sandeen. No idea where he goes. Come on, computer. He's a young gun, Rory. He is a maple leaf, Toronto maple leaf. The David Ayres young guns go, of course, goes to Michael Ang and Carolina. Maple leaves for Troy, Troy Rimmer and the Toronto maple leaves. He easily has to be the youngest, the oldest young gun, right? Another one. There's Trent Frederick, who is a Boston Bruin. He's always been a Bruin. All right. That goes to Steven Birch, Birch on the board, Birch looking for ores. Gotcha. So you like to have the team for the Master of Cades because you think you have a better chance for hunting the future watch and potentially completing the bounty. I got you. Are these your thoughts, too, Will Christian? It's just, I don't know the hockey, ladies and gentlemen, so. So you got to, you got to tell me. I think we probably, I feel like Nick probably, Nick sets up all of these. So I'm sure Nick had the same thoughts as well. Our first autograph is William Carlson for the Vegas Golden Knights. That will be for Rory and the Vegas Golden Knights. Spectrum FX as well. Going to Toronto. That will be for Troy. All right. This one. Yeah. I think in sets like this, which is kind of reminiscent of maybe like a series one or Bowman even, you know, where it's not, not hit heavy, it is probably best to do like bigger cases on this kind of stuff. It's the hit heavy products, which are probably easier for us to split up if necessary. Gotcha. Okay. I like this because the full case is because he can try to chase some of the, some of the sets and whatnot. All right. You can see more hits overall. Fair enough, folks. All right. Good luck, everybody. Any, I know we talked about this yesterday, but has there been any, I know news can be fluid, very fluid every day. Any additional news on host cities, hub cities, for hockey? I was actually doing a tiny bit, very casual research, but I saw that there, and I think someone mentioned this last night too, that there are some difficulties in maybe having a host city be in Canada because of visa stuff and fears over COVID and various travel restrictions between both countries and whatnot. So we'll do both host cities will be here in the States with us. Ooh, nice. So the first 50 cards on the future watch card, they inscribe, the players inscribe their, their debut, which I think is pretty neat. 007 out of 9 at 99 for the Toronto Maple Leafs Troy. Maple Leafs starting strong here. Another autograph, Ryan Kufner to 9.99, Red Wings, Detroit. That's going to be for Rory. Michael Stevens, Young Guns for the Tampa Bay Lightning Troy, that's to 100. That'll be for the Rangers, Drew Dottie for the Kings, and Phillip Myers, Philippe Myers, Phillip Myers, Fred Myers, Future Watch, level one for the Flyers. That's going to go to Chad. This will go to the Kings, Clint Allison with little LA Kings. Is that recent news? I hate saying that the big news is that they'll reseed teams after each round. That's interesting. I feel like that's what that's a holy grail reseeding. Is that a holy grail for like NFL? Have they been talking about that? Re-seeding? Yo, Carlos Stallone in your chat. John Carlos Stallone. Are you in the chat? I haven't seen him. I think he listens, but he doesn't. He's not in the chat too often. Is he? He's in the hit draft and it's breaking right now. Hit draft. John Stallone, if you're listening to hit draft, high end hit draft is on at Jasper's breaks, Instagram live. If you are not present, we will select for you based on monetary value per the item description. Are you starting now? When are you starting? Oh, okay. Okay, okay. So again, if you are in the hit draft and you're listening to me, you're in the wrong place. Go to Instagram live at Jasper's breaks. No brackets. What is the advantage of reseeding? Wait, I guess maybe I don't even know how reseeding works. So if eight plays a one and eight beats one, oh, they'll reseed by, okay, okay. They would just reseed by record. Is that how it happens? They'll reseed by record. George says it'll finally be different matchups from previous playoffs, favorite top teams more. So as teams get knocked out, they'll reseed by their regular season records. Right, right, right. Okay, okay. I'm wrapping my head around it. I'm not too bright ladies and gentlemen. Some things are tough for me. Right, makes regular season. Okay, okay, okay. I get it. Do we like that? Is that controversial or do we like that? Right, yeah. So number one team, the team with the best record is always playing the team with the worst playoff record, the worst of the best teams, the worst of the playoff teams, which favors the top teams, right? Because they're always playing the quote unquote worst team. Now I think someone mentioned maybe it was Will or somebody was saying that these patch autos are one per inner case. So there's Joe Les Esperants, 001 to 100, the first one ever made, Dallas Stars. That'll be for Mark L, two-color patch and on-card autograph. Nice, good looking stuff here. There's Trevor Moore, 506 to 999, Toronto Maple Leafs. That'll be for another one for Troy in Toronto. Will Christian Nott, a fan of the reseeding? Brock Besser. George Dang, a fan. There's Nick Kamano, another star for Mark Ovechkin and Alexander Volkov, Tampa Bay, Troy, Ovechkin, Caps, Mark, Mark L. And we got Igor Shisterkin, Rangers, that'll be for Chad, next one. Now Wade with the reseeding, not like a reseeding hairline but reseeding the teams, playoff teams. He's saying he doesn't think it matters. Whoever's hot, still going to be hot.  They'll keep rolling. Yes, like Jonathan Quick in 2014.  We looked that up. Does everyone know where that came from? I guess we have hockey fans in this chat for this break, so they might know. Leonard, we are booked for the night, I'm afraid. Take a look at the schedule. Unfortunately, we are booked for the night. This break is an hour and a half. It's going to take us actually past when we go on, when we usually sign off. So apologies. Also that noir break, ladies and gentlemen, has also been delayed. Because they literally end up on their heads sometimes. No. That's not where that term came from. There's Miro Heiskenin for the stars. That'll be for Mark. George thinks that the play and best of five term will have a bigger effect on the playoffs and the reseeding. There's Julian Gaultier for Carolina to 999. That's for Michael Aang, Carolina. Five-hold looking between their legs. No, that's not it either. We'll see if there's Connor McDavid, SP Essentials too. I think, now someone's going to have to look this up, but I'm 90% sure that there was a rule change in goalies back in the day. There was rules back in the day, maybe like 1940s maybe or 50s, where there was restricted movements for goalies. They can only do so much in the course of a game. And once the rule change happened, the commissioner, I believe, I think it was the commissioner at the time, said goalies can do this, that, they can do whatever they want to. Now they can stand on their heads if they want it to. There's Kale Fleury. Montreal. Canadians is Rory, and then the Florida Panthers, Troy. Barkov. That developed into standing on your head as a term for outstanding, almost magical goalkeeping. Canadians was Kale Fleury, Spectrum FX card. There's Kale, Kale Gay, Kale Guay, a Los Angeles Kings young gun card going to Clint. The first half of the first intercase is done here. The second half of the first intercase, Wade Googles and confirms that I'm correct. Now tell me, Wade, if you still have that page up, what was the rule before? Like, how were the, I didn't get that far. How were the goalkeepers' movements restricted? Why were they restricted? How were they restricted? What restrictions were there?  If I sided with the hockey team correct, I am by default an LA Kings fan. I mean, if asked, I'd be like, I'm a Kings fan. But I can't really, I don't really say that because, you know, I think it hasn't been since childhood since I owned any Kings clothing, merchandise. I watch games every once in a while, but, you know, I don't really follow it closely enough to really say I'm a fan. Oh, was it Frank Calder, the president of the NHL back then? There you go. Rory, you have a tall order for me? Well, as kind of a shorter guy, tall orders are a little more difficult for me. We've got a sign of the times, John Leclerc, 90s sign of the times. Flyers. That'll go to, who's got Philadelphia? That'll go to Chad Sylvia. And we've got Ilya Makaev, 977 out of 999. Maple, he's another Toronto Maple-y for Troy. We've got Joachim Blitschfeld. And we've got another sign of the times, Timo Meyer. San Jose Sharks, Rory, last spot mojo. There is an eight-way sign of the times, all-time greats. I need to pull that for you. Well, you need the randomizer to work out for you. Unless you bought all eight teams. Were you sharp enough to buy all eight teams? John Taveras for Troy and Toronto. Blitschfeld goes to Rory and the Sharks. And I like these acetate ones too. It's Ilya Makaev again. Young guns acetate. Another Toronto Maple-y for Troy. All right, you have 50% of the teams in that eight-way auto. Okay, I like those odds. Good odds. Oh, back to goalies. Wade is saying that the actual rule change was that goalies could leave their feet before that change. Goalies could not allow their skates to leave the ice. So that means that started the, what should I call it? The leg kicks and whatnot. Right? Right, no butterfly. All right, we got Yaakov Trinen. Predators. That'll be for Will Christian. Is it being handled, Phillip? Or do I have to go over there? Call Nick. Just keep that going there. And Ryan Reb and no, Mosaic, this is the last break of the night. Because we were only maybe halfway through, a little over halfway through the first intercase of this 16 box break. And I've got another probably another hour to go, which will actually take me a little bit over where we're usually at. We usually end the show. So this is the last break of the night. If you're just joining us, folks, this is the last break of the night. People who are waiting for noir basketball, we apologize. We don't have that. We thought we did. We don't. So if you bought into like, especially those number blocks, if you bought into those thinking it was going to break tonight, feel free to shoot us an email. jaskyscasebreaks.gmail.com. We can sort that out for you. Otherwise, you're probably one of the first breaks tomorrow. We'll fast track it, too. It'll be on the fast track. Sorry about that. All right. So the actual quote regarding goalies were, so the quote was, I don't care how they make saves, they can stand on their heads. Rory also mentioning that he says a Conor McDavid autograph would do. So certainly some tall orders from Rory. There's Adam Fox. Box in the box. To $9.99, Rangers. That'll be for Chad. And we got Tobias Jornfot. To $9.99. That will be for Clint, who has the Kings. Young Guns, Adam Johnson Penguins. There's Mark Andre Fleury. You can stand on your head, Mark Andre Fleury. And then Blaise LeZote for the Kings. Blake LeZote. Future Watch. For Clint. And Vegas. That will be Rory. The Golden Knights. Card there. Next box. Oh, Derek. You hit the bird and magic in the hit draft. The hit pack, high end hit pack draft thing. Good. Congrats. Nice. Well, well worth the wait. That's what I'm hearing. That's those Future Packs. Future Watches, that is, are good money. Yeah, a lot of value. A lot of value in this. Nice, good. I'm glad the hit packs delivered. $4.50 a pack they better deliver. Mark Andre Fleury is a character. That was Joaquin Nygaard for the Oilers. It'll ship. It's on the, it'll ship. It'll be sleeves and top loaded pile. Well, unfortunately Derek. Noir is now off the table. We thought we had a case. Turns out we didn't have the case. And I think we were going to try to go and get a case. But there were no cases to get. So we're going to have to push that to sometime tomorrow. There's 82 out of 999. Giovanni Smith for the Red Wings. That's going to go to Rory in Detroit. There's Igor Schersterkin to 999. That is for the Rangers. That'll be for Chad Sylvia. I can't roar. This is like an hour and a half break. Can't linger on all these guys. Connor Clifton. There's Rossmas Dallin, Spectrum FX. But I assure you they will be safe. They will be shipped. They will be sleeved and top loaded before they go out. Connor Clifton will go to the Bruins. Steve Birch with that one. Now unfortunately we won't be squeezing any brakes in, Brian Zeller. After this break we'll be done for the night. KC Bodine. Next box. Good luck boys and girls. So then we're going to dive into the next inner case. After we finish the last box out of this inner case. Steven Baylis doing the order that got me. No I don't. I have nothing to do with the shipping sided things I'm afraid. No shipping questions. I'm useless. Sorry. But you can shoot us the email jaskyscasebrakes.gmail.com and when our team comes in in the morning they'll be able to get you an answer if they have one. I know, sorry Derek. No noir today. We thought we had it and we don't have it. We've been kind of shuttling because of the looters ruining things around here. We've been shuttling a lot of product back and forth from here in a safe location that we call the vault. So Mario Ferraro. Malkin. Nicholas Haig. So I think in that shuttling back and forth we thought we had that extra case which is why Nick posted it. Turns out we didn't. I'm going to get it tomorrow. What's up Jack? What's going on? And there's a Blitzfield to $9.99. An autograph for Rory and the Sharks.  And there's Alex de Brincat for the Blackhawks. I like that little dent right there. I don't know. With upper deck we can replace a card like that. SP Essentials Alex de Brincat autograph. I don't even know. It doesn't look like it's actually... Anyway it's $9.99. Blackhawks that'll be for Wade. John Gibson. Alright next inner. Is it right here? Wade do you want to... Do you want to try to deal with upper deck? I don't know if... I don't know how friendly they are about replacements or if that's significant enough for them to even do it. But if you want I could send you one of these UPC codes that doesn't tear apart in my hands. If you'd like. Alright thanks for understanding Derek. MK what's going on? Regarding the deadline for the break credits only applicable to spots available for straight up purchase in the eligible break. Correct? Yes. Unless otherwise stated in the... the description of the break credit. I think noir basketball pick your teams and the number blocks count. I think the other ones are only straight up. I think only the winners from the salopaks are eligible in the basketball mixer if I'm not mistaken. I don't know the rest is in the... I don't remember the rest. But I'm not sure that deadline's in about 20 minutes so there's like two salopaks and then like a bowman jumbo and something else to sell out. So unfortunately I don't know if we're going to... I mean I guess it could happen but I don't know if it's going to happen in the next one minutes. You'll try it. I'll wrap this pack around your Debrin cat to see. Okay from what I understand they usually do ask for a little UPC code so... There's Caden Primo to $9.99. That's for the Canadian's that'll be for Rory. Jake Bean. $7.59 to $9.99. Autograph future watch card for the Carolina Hurricanes that'll be for Michael Ang. It's Conor McDavid. Spectrum FX. That is for Rory and the Edmonton Oilers. There you go Rory. So anyone that purchases a spot straight up in the basketball mixer should be good to go. Yes. Provided the other breaks that need to fill sell out in the next 20 minutes but yes. So if you bought a straight up spot you are you would be eligible. Are eligible would be eligible when and if all the other requisite breaks fill. Kelvin what's going on? How are you? Young Guns. Kale. For the Kings. That'll be for Clint. Good luck. For halfway through the first half of the second intercase. Doing well. Kelvin thanks for asking. The crew is keeping us busy. I live a little somewhat close to the promenade in Santa Monica so it was a little scary for a night but in the end everything ended up being okay. I guess we're just looking forward to opening back up to the public once again soon someday. No we've been going off the normal times. I think the curfew has just been the curfew has just been I think if they said if you're going to and from work you're okay. Where'd you work in Santa Monica will? Yeah it's pretty crazy. I live on Euclid which is essentially 13th Street. So that's about kind of 10 beach blocks. Where's Tallulahs? I don't even know what that is. Where is that? Sign of the Times. Pierre-Luc de Bois 93 out of 99 for the Columbus Bluejack It's Troy. Oh it's one of the Russet Canyon. That Russet Canyon I do know. I know the Russet Canyon restaurant group. Joel the Esperance 825 to 999 Dallas Stars. Oh it's in the Palisades. The Palisades are fine. It was just that it was basically like ocean and pier. That area is where most of the madness happened. Well the peaceful protests were happening on like ocean near the pier and then the looting was happening just right on 3rd Street 3rd and 4th Street right behind. So I don't know there's a little sort of raised eyebrows over where the police presence should have been. There's John Merino for the penguins that will be for Ron and there's John Gibson for the ducks that will be for Michael Tuckley. But yeah so I think things got out of hand pretty quickly the helicopters like news helicopters and that's for the Islanders Auto to 999 David Ayres Young Guns for Carolina that will be for Michael Aang. So like 3 news helicopters 3 police helicopters above my apartment the rest of the night some small businesses down the way for me were smashed up as sort of people were kind of pushed out of that Santa Monica area and pushed west. So it was wild for sure but next day a lot of the people in the area a lot of residents came out with brooms and paint or painting up graffiti and helping clean up glass and what not from broken windows and stuff so helping put up boards for windows that hadn't been broken so that was kind of the nice thing to see people coming out. Yeah tier 1 tomorrow ladies and gentlemen pre-order now court kings basketball tomorrow too but yeah I think in subsequent days there's just been some scattered looting here and there probably nothing probably nothing terribly out of the ordinary in LA but just covered a lot more intensely because because of what happened in west Hollywood and in Santa Monica I guess with larger groups of people but otherwise I actually really haven't been keeping track of whatever happened today but I think for the most part things have been pretty peaceful I think yeah Melrose Melrose was definitely was definitely messed up a little bit I used to work along there too so I know a lot of like the coffee shops and liquor stores and bakeries that were around there so alright and there's the second patch auto is Nico Hersher I've heard of him 47 out of 50 that will be for New Jersey right he's a devil yes he is a devil that goes to Troy and the New Jersey devils there you go nice I have no idea about stature someone tell me where Joel where does Joel Fariby go I'll look it up he is a flyer thanks Jackie so he's going to go to Chad Sylvia with the Philadelphia Flyers another Connor McDavid up there we have Lies Patterson for the Vancouver Canucks that's going to go to Wade Preston with that Spectrum FX and there's Joey Decor Spectrum FX for Ottawa Senators that's going to be for Troy and the Senators there you go Young Guns Adam Brooks a little bit of packaging on there Maple Leafs Troy has Toronto too I think yeah he does yeah so Kelvin when do you actually get to go back to school almost done with the first half of the second inner you got play of the whistle Rory you know this play to the whistle you know what I want to happen in the Stanley Cup playoff I want what's good for the hobby I think Connor McDavid winning it hashtag good for the hobby any decision any day now says Kelvin yeah it's crazy I don't think we have even discussed like what like it's going to happen to college sports you know I think college football is determined to start on time with or without fans so just bring the athletes back on campus and have them play games possibly in empty stadiums or if worst case scenario you push you push college football basketball to the spring make it a spring I mean that'd be kind of wild too good luck everybody USC Jack saying announced yesterday they'll go with the traditional in-person classes huh interesting yeah I go back and forth on all this it's like John Klingberg I mean at some point it is you know at some point you got to get things open to the public right sign of the times for the stars I'll go to Mark there's Vitaliy Abramov 455 at a 999 for Ottawa that'll be for Troy yeah it's tricky it's tricky Kelvin I mean yeah once you're in are you locked in there forever that's a 999 poker in and there's Andre Vasilevsky Spectrum FX for the Tampa Bay Lightning that'll be for Troy there's Kate and Primo for the Canadians level 2 future watch for Montreal that goes to Rory Young Guns there's Igor again for the Rangers that'll be for Chad right and dorms everything's spread I mean not if these kids were practicing good hygiene instead of everyone sneezing into their hands and wiping their faces and then wiping other faces wiping their hands on handrails alright final four boxes right college students good hygiene this is a little fat chance right yeah you're a swimmer right Kelvin just live in the pool you can be a water pokemon just spend your time in the water yeah I'm pretty sure chlorine kills covid Patrick no Noir did not have until after this break anyway but unfortunately we discovered that we don't have that noir case so I apologize that's going to have to be pushed to tomorrow if you want to refund shoot us an email jaskiescasebrakesatgmail.com and we'll take care of that for you tonight we thought we had we've been shuttling just because of the the issues happening in Los Angeles we've been shuttling high dollar cases back and forth and in doing that we thought we had that last noir case but unfortunately we did not we thought we could pick up a case unfortunately we could not so we apologize about that wow there's a sign at the time Eric Stahl an old school design that's for Minnesota that'll be for Sanford and the wild it's pretty cool and we've got Alexander Volkov who kind of printed his name on there thanks for your understanding Patrick I appreciate that that distributors in Orange County we were going to drive down there and they were like we thought we had one too, we don't so it kind of became a thing so I apologize well I go live at one o'clock Pacific tomorrow I don't know when we're going to get that case but whenever we do it'll be fast tracked to the front of the line whenever we get it in unless it's not sold unless people get refunds and it's not sold out but I'm back at one o'clock Pacific four o'clock Eastern so hopefully we'll have it by then if not we'll have it soon there's Jake Dubrusk Dubrusk Jake, Jake D for Boston, that's going to go to Stephen Birch and there's a McDavid Limited right here as well for Rory and the Oilers Sammy Pannerin New York Rangers Chad Sylvia and a numbered Young Guns card Upper Deck High Gloss Nick Kamano, 10 out of 10 that looks a special that goes to Mark L there you go, that's pretty cool those are rare, big cards as Rory there's Nick Kamano again that looks cool I like that gold foil, looks really sharp on that I don't, I have no idea if he's a good player or not he's saying it's a big card so, there you go SP Essentials Conor McDavid for Rory and another Conor McDavid here and that Leon Drizital will go this hockey break yeah, this hockey break takes an hour and a half I'm at one hour and three minutes right now and probably take me another 20 minutes to do this and then another you know, a few minutes to do the randomizer for the box that we're giving away all it takes about one hour and 30 minutes and there you go, cardblasters, congrats man guys in the chat are saying that's a late 90s design Tyler Brenner, this is a 16 box master case break so it does take a minute or two and we're done for the night after this ladies and gentlemen, we're actually so we usually end I usually end the stream right around now so we are done for that, we'll be back at 1 o'clock Pacific oh, what makes sense then Tyler? sorry, but yeah, we usually end right around now, or my shift usually ends right around now we will go a little bit later tomorrow I think Nick Jaspie will do Nick at Night tomorrow because it's a new release day we've been so busy going back and forth on a lot of things and all this extra work happening we should have a Nick at Night tomorrow right, yeah, yeah, 16 boxes right, takes over an hour yeah, I wasn't lying to you guys in the schedule, it takes a while but you know what as far as as far as an hour and half long break goes I don't know, I feel like there's still there's more eye candy in SP authentic than there is in another, like if I was doing a Bowman baseball hobby hobby edition, I love the Jumbo the hobby editions I feel like I feel every minute of that hour and 30 minutes that it takes this one for whatever reason is not, doesn't feel like that at 999 Brandon Gignac and the New Jersey Devils, that'll be for Troy Master Case Random Team maybe, maybe and we've got a sign of the times 90s autographed Ron Hextal for the Flyers, that's going to be for Chad Chad Silvia Sam Lafferty to 999 we've got Sydney Crosby Spectrum FX and a and another penguin, Teddy Bluger, there you go Ron Kuhn with the penguins Koo there's Blitschfeld Young Guns Sharks, that'll be for Rory Connor McDavid Authentic Winners for Rory and the Oilers and we've got Young Guns Yakov Trinen for Nashville that'll be for Will Christian and the Predators two boxes to go are we starting early for a tier one release, I don't I don't know actually I wasn't planning on it and I think Nick is planning on staying late and it's Jason Jaspie's weekend so I would say no we're starting our normal one o'clock time slot one o'clock Pacific four o'clock Eastern Patrick, definitely check back in with us one o'clock Pacific tomorrow four o'clock Eastern and then we'll we'll have a better idea of where we're at with Noir where we're at with a schedule and what's going to be breaking what are these cards by the way I kind of like that design that they have there with the full photo we got Future Watch, I like these too Future Watch Kale McCarr that is for the Colorado Avalanche Jeremy Merle with that, wait I thought you got the the abs of this one no? I've heard of this guy though nice one Jeremy Merle and the Colorado Avalanche $3.99 nice Future Watch Kale McCarr and we got Mathau Joseph $3.99 out of $9.99 Autograph Future Watch that'll be for Tampa Bay Troy Patrick Kane Spectrum FX and Rem Future Watch level one for Will Christian Prez Patrick Kane Chicago Wade Young Guns Adam Warner Colorado that'll be for Jeremy Merle there's the focus down there too last box coming up we'll do the randomizer for the box winner and then we will do a quick autograph recap do an auto recap and then that's it we'll be done with the break thanks everybody for keeping the chat active during this long break I appreciate that helps make feel the break go a little bit more quickly so thank you and thank you to everyone patiently watching appreciate that I think I saw more SP authentic unless I'm confusing with another case but keep your eyes out for more SP authentic hockey on jaspyscasebreaks.com good luck to everybody what does this pick your team for alright nice this is the last break of our night folks again if you're just joining us thinking that Noir is about to happen I apologize that has been delayed till tomorrow we thought we had a case we did not apologies for that if you don't want to wait till tomorrow we'll be back at 1 o'clock Pacific 4 o'clock easier if you don't want to wait we'll be happy to get a refund going for you late tonight or early tomorrow why are there no personal box on jaspys.com we don't have our full stock here Kevin Tenland there's Jack Eichel for the Sabres because of all the craziness that's been happening we have moved a lot of high value inventory Matt DeLeo with the Sabres to a safe house to the jaspy vault the secret secret vault this is a level 2 by the way for the rangers Chad Sylvia so instead of shuttling all that back and forth every night we're just keeping we're just doing hit packs and some other things on the personal website for now and then we'll we'll ramp back up into normal normal website stuff next week I'm sure things seem to be calming down significantly so I mean turns out everything in this area has actually been quite tame so there's JC Bodine so it's been quite tame but you know better better safe than sorry we thought we were taking the computer down every night too but then after a couple days we're like yeah can always get a new computer can't always get a case of a limited product so yeah so that's why it's just been kind of thin all around this Dirk Graham a sign of the times 80s Blackhawks Wade Preston Wade Preston wanted a monster in the last box so I don't know if this guy is a monster or not but it looks cool I don't know anything about hockey ladies and gentlemen but how about that I'm waiting for Wade to react and Morgan Frost not a monster is this Jack P okay Morgan Frost is this guy a modern home Chad Sylvia with the Flyers oh it's Kirby Doc that you want alright that's right alright not a monster alright well it still looks cool there you go ladies and gentlemen pick your team for in the books thanks everyone Frost was a high pick those is Jack so it's interesting alright so maybe he ends up being somebody alright let's give away a box of SP authentic that's from a different case and it'll be shipped to you sealed whoever the winner is will be shipped to you sealed so you have to buy at least three teams this time three teams gets you one entry six teams gets you two entries so on and so forth so Mark bought three teams that's one entry Rory bought six teams that's two entries Spurch bought three teams that's one entry Troy bought six teams that's two entries Wade bought three teams that's one entry still have a shot at a box Wade alright one out of seven one in seven chance one spot in seven will land the box let's roll it let's randomize it five and three eight times name on top gets it after eight one two three four five six seven and eighth and final time after eight goes to Troy great break for you today Troy you picked the right ones this time appreciate you getting in you're going to get a sealed box of 2019-2020 SP authentic hockey and here is a quick recap this is the way it went nice Kale McCarrey people always seem to want him that 10 out of 10 young guns was cool my favorite autograph right there if you can call it that that was a Jill Fariby Nico Hersher patch auto we had a little almost like a I don't know almost like someone at the factory put their thumb right there almost looks like a fingernail dent doesn't it because it's not a it's not my fingernail they're well trimmed but we'll send the Blackhawks we'll see what upper deck says about that maybe they'll send you something back in return or maybe say sorry actually it's a person at the factory not necessarily upper deck but and that's Trent Frederick and that's Rasmus Sandin and there you go that was the break boys and girls big thanks to once again to everybody here for getting to the action on Pick Your Team 4 I'm Joe for jaspyscasebrakes.com have a great night and we'll see you next time bye bye


Hi my dear friends, welcome back! Yesterday I made, this is just click that, just slide that, yesterday I made this tag from that Frankon paper and today when I woke up I actually knew what I want to do with it so I took my sewing machine and I did so all around, I skipped this circle and this gear, I just started you know from here and went here and then started from here and went here and I actually like those strings on the side and then from strip of paper and also I used zutr machine and I put those holes here and then from strip of paper I used that zutr machine as well then I ripped piece of that you know that long piece so I ripped it to make this beautiful edge and then I placed my paper to make those holes kind of and it's similar distance or you know similar position and I folded over the edge it's not glued yet I just wanted to show you and I've got here again cotton metal glued on serrally box or you know pizza box and then I embossed those numbers and I put this small strip I put those corners if you will notice all those corners are coated a little bit because I don't like those sharp corners there they don't look vintage same I did on these pieces I will explain later so what I'm gonna do I'm gonna create cover for my next journal and hopefully we will get also to the sewing I want to show you so first I'm gonna finish the cover for this journal and then somehow we'll try to put it all together what I have in my head so I'm gonna glue this it's more like decoration here I needed something and then I'm gonna glue this on the top and I'm gonna move on to I'm gonna just slide it behind let there those numbers but slide it behind that circle so I've got probably all finished and what I did here I'm gonna copy on other two pieces so this can be maybe back cover and I've got exactly similar two pieces I did put two pieces from some you know normal box from food one it's gonna tell you measurement one is six and one quarter yeah one is six and one quarter and then I do have smaller one which is five and three quarters yes five and three quarters so one is six and one quarter by I'm gonna take it this way eight and three quarters and second one it's five and three quarters by seven and no eight and one quarter so half inch I do have a half inch smaller top that top piece so I do have one quarter inch frame all around so this side and this side are half inch smaller than on that bigger piece so I've got those two pieces could take those two pieces one I do have here two energy cans which I glued using double sided tape just here in the middle now I'm gonna I'm gonna use first double sided tape and I'm gonna fold those edges and glue it together with that box not always we have to you know use some fancy supplies mostly I'm using for making my covers I'm using boxes from food from what we buy from pizza from serralli from any kind of you know cookies chocolate mostly I'm gonna cut just slight angle to the corner not too big just slight angle and here also slight angle to the corner and here it will be same slight angle to the corner and slight angle to the corner and similar here slight angle like this way angle not that way this way angle so when I will fold it it will be nicely sitting in that in that cover it will be not over the edge of that cheap board this I'm gonna not yet I'm gonna take off this packing paper from my double sided tape and put same here double sided tape if so but good good good sided tape here oh come on not me don't glue it I'm gonna press it to the metal and to all falls I'm gonna take it off packing paper and I'm gonna start to fold over the edge and here it's good to take the time to make sure I'm actually folding it over that cheap board because it's still it's metal and I can be very fast on a wrong you know wrong spot here and then that opposite side and again to make sure I am on the edge of that cheap board put it over and press it with my bone folder and same it will be on those long sides make sure I'm folding it right like this and what I did next I took my scissors and I cut all corners all those top corners I could off because I think it looks more vintage when you don't have sharp corners so I'm using it on all of my uh tux journal covers mostly sometimes not mostly sometimes on pages as well so I'm cutting those sharp corners those top corners off because for me it looks more more vintage so now what I'm gonna do I'm gonna take embossing folder and I'm gonna emboss this metal piece as well like that piece before I'm gonna use again that embossing folder from Tim Holt that 3d this one 3d embossing folder call it mechanics mechanics 662715 so I'm gonna use that embossing folder and embossed all that space and once I have embossed all that piece I start it to sand it with sanding block and because this is kind of long process I'm gonna pause my camera and come back when it's fully sanded from that color so I do have sand all that color I left just here and there that black color because it looks amazing and now with the bigger piece I put here just simple packing paper which came with some box so what I'm gonna do I'm gonna use that paper for my background paper of cover I'm using uhu glue uhu glue stick because it smells so good and I'm gonna wrap it to do paper because I will use some decorative paper inside I don't even mind that it will be not even and I'm gonna make for myself template I'm gonna fold that paper over the edges to make folds so then I know how to cut and with my scissors again small angle to the corner and because I will cut those corners again I don't even mind that there will be not enough paper probably there will be enough paper I mean that I will don't have those folds over that corner because I'm gonna cut it anyway and again with glue stick I'm gonna glue that paper to my part make it nice and flat the last one and I will use my sewing machine and I will sew all all around for this paper close to the edge like I made on that first one like this and distress it with walnut stain but before I will do that I'm gonna cut those corners a little bit just those top corners just like this and now I'm gonna use my sewing machine sew it all around and use distress ink so I have finished uh that one cover now I do have two large two smaller wrapped in can metal and embossed and I do have one piece for top cover and I'm gonna start with the the back cover I think I'm just gonna glue it here and put eyelets into those four corners probably eyelets or brats what I'm gonna use I think I'm gonna use brats no eyelets I like eyelets more so I'm gonna glue it first just gonna use tacky glue tacky glue on my piece and glue it first and then two corners I will put eyelets to secure it properly I should take brush and put that nice amount of that glue with brush not like this it's very fine tip so I don't have too much okay I think I've got quite a lot of glue yeah I do have quite a lot of glue so now I can make a good position of this small piece press it from here hopefully all that glue will spread nicely like this I'm gonna take my hole punch this crocodile and with that 316 I'm gonna punch the holes in the corners of my metal piece all four of them and I will fix there those eyelets so I do have finished that back cover I put also inside after I fixed those eyelets I put inside decorative paper I didn't want to have holes in in those corners through I wanted to have you know just secure those two pieces now I'm gonna move to that front cover before I will glue those two pieces together oh I forgot to distress it I need to glue this on my metal piece and I already put foam double sided tape on this on this tack but I would like to secure it a little bit more than just with double sided tape I'm gonna use also brats to secure it to keep it together I know this foam double sided tape keeps like really strongly I use it on my door door letters letters door numbers so I know it holds really well so I took off all that backing I'm gonna place it the way I would like to see it on my cover and I would like to have there all around some nice frame of that metal to make it looks like this it's going through but it's this one so I'm gonna place it here hopefully I'm straight with that am I or am I not um oh yeah and it it it holds already okay so I'm gonna leave it there turning you the double sided tape that foam double sided tape it's like really strong okay now I'm gonna make holes and put the brats I think I'm gonna use those fasteners those bigger fasteners I've got here because I already colored them using alcohol inks one two maybe three four so I need my poking tool and where is my poking tool so I'm gonna make a holes one here through to all those layers definitely I like that look one here another one no powder yes I will change this one I'm gonna give it try yeah it's possible to take it off so another will be here like this yes that's better and maybe one small and here's exactly this one or one big one big I'm gonna place it right next to this teeny tiny small piece right here hopefully they are all all work together it doesn't look bad I guess it looks like it's supposed to be there so now I'm gonna make exactly same I'm gonna glue this here put the eyelets in the corners and glued that backing paper from the side but first I have to distress distress here those edges I put those eyelets I still don't have the decorative paper here because here I need to cover my coating of that end of that circle if I will know that I will use it for cover I will probably leave it there but I didn't know so what I came up with are those wooden pieces which I can use like decoration and I will probably use them this way and one here to make it like wave on all that cover so I'm gonna use tacky glue and also brats to fix it through all those layers and then I will put their decorative paper from other side and we will start to sewn papers all together so I do have done my front cover it looks like this and like this from inside and I do have my back cover it's pretty simple and I do have four signatures I'm gonna show you a little bit different type of sewing or binding of my journal I'm not sure if I I found out this way but it's it's easy for me I already made tutorial while ago on this type of kind of kind of ish this type of stitching so what you need to do make two holes on each side of your signature make sure that they are on same position no matter how large signature you will have like this one it's bigger than those others but the holes are on the same position two on each side I've got three centimeters gap between which is about one and one quarter of inch yeah one and what is it three sixteen of inch gap between those two holes so I've got two on each side in each of signatures and I'm gonna take the top cover and here here will be my binding so I'm gonna flip it over I'm gonna take my signature this is bottom of my signature so I'm gonna flip it same way like will be you know like it will be in in the journal and here I'm gonna try to make a nice position because that cover it's a little bit bigger than my pages and I want my pages inside of my cover not on the bottom and here big gap but I want to have my pages nicely in the middle sit in the middle of my cover so I'm gonna make a beautiful position which I really like and then where are the holes I need to take a different one I'm gonna take this signature here I can see that much better yeah no I can't I need to take the bigger one take the biggest one I'm sorry take the biggest one so I'm gonna draw it here to make sure I can see here I used sport tape that fabric tape because I glued two envelopes together using that fabric tape so it's not seen properly so take the biggest signature from your journal make nice position of that signature on that cover how you would like to see that in your journal and then make a copy those marks where you've got those holes make marks on your cover like this like this I've got four dots here on my cover I'm just gonna have a look if they are kind of on the same distance same distance like from this edge if they are at the same distance each of one to make sure that it will look nice so this is your front cover this is back cover so place it face the face make sure you've got the right side of binding so if my back cover will be this way here will be signatures and this will be my top cover then I'm just gonna make this so I've got binding the size of binding on the similar way and then make a holes using your hole punch where you've got those marks and put their eyelets to all eight of them on the front cover and on the back cover as well so I do have prepared the holes in my signatures now place them the way you would like to see them in your journal like this and then leave that the back cover down on the table and flip this this way so then you will take always the signature you would like to have you will need some thread and four needles and that's two threads long one so when I'm counting my thread how long I will need it I'm counting about twice folded but twice in the leg of my journal probably it will be probably too long but rather I will have a longer thread than short I don't like to you know to what is it extended in the middle of my sewing so folded two folded very long strings like this take one make sure you have folded half then put each of these ends of that string to one side of your journal cover to those holes I'm gonna untwist it and probably like this put your threads to make sure you've got a similar end here and then take this hold one hole one hole one side of those holes and take that opposite side and go with the thread under here i'm gonna move this one to make sure it's not on our way under here and in that hook in that eye here and pull it very carefully make sure you will make beautiful knot on the top like this and do same take this one pull it under and through to that eye here like this and do same on that opposite side so put that thread through to those holes make sure you've got similar ends then hold one side so you will don't move it take one side under that thread and here to that to that loop here and pull it so you're making like a knot knot on the end and similar on that opposite side under that thread and here to this eye and make it nice and tight so if you need just pull that thread and make it nicely tight it's better if you will use probably wax thread but i would like to have this journal in grungy style that's why i use that yuta so i do have prepared the base and i'm gonna take first signature first i need to try to put all those four ends all those four ends to my needles so each of one will be hooked into the needle i hope it will go well because this is kind of fat thread that yuta thread has many many ends so i do have needle in each of one that was very very long process i'm gonna take that last signature and i'm gonna open it in the middle and i'm gonna take this thread string and because here i do have that you know that sport tape here it will probably take a little bit longer time to go through oh no good and i'm gonna go inside i'm gonna take second one and go through that hole uh-huh here it will take a longer time come on go through and pull it you know if you will have a normal thread not yuta thread it will go much more easily believe me always make sure that you will pull that thread beautiful that you will don't have any leftovers here like you know those twist of that thread where is the middle make same with that bottom of your cover go through to all your holes and with last needle i need to sort out my thread then nicely tight your signature make sure it's not too tight but it's not too loose to make sure it's sitting there pull that thread the way you need it to make sure that the signature will sit on that cover open it and make a knot here believe me it will help it will help to sit your signatures properly do not move too much and keep the shape you want to have in there i'm not sure if i have to do it with this yuta thread because that yuta thread will don't allow my signatures to slide on it it's too fluffy so maybe i don't have to make knot but i made the journal using a wax thread here hear it how it looks like that's sewing when you do have some all signatures and i made thread in each of these signatures in the middle i made a knot not thread not on my wax thread because that wax thread it's slidey and those papers will you know move so it's better if you will make a knot here in the middle of your signature and then go outside with the thread go back to those holes i'm gonna make it like before to make sure i will have some result some good one do not tide it too much and do not make it too loose of course if you want to make like big decorations on your journal pages then you will need a little bit more loose sewing or binding and go outside with that thread like this and with this one here it's going worse because that yuta thread it's really fluffy then take another signature place it on the top and just follow the holes here with this thread go to this hole and continue exactly same and i think i've got my signature upside oh hopefully i've got right holes now i'm not sure this one was upside down so i made good good holes through to my signatures oh mama i will have to go one by one hole by hole to make sure i am on the right spot open it go through here you can secure you know one side straight away so make it sit down nicely pull that thread if you need so make it sit down then open it and make a knot straight away if you want so so one side will be secured and then you can sew on the other side maybe that way it will be much more easy for you like this so now i can go with those others and i need to sew there this one around just slide down and one more okay make sure you are going to right hole here i made a cross you can make also cross here and then make a knot that way you will secure that cross and then again to cross so you will have cross stitching that will be much more decorative so i'm gonna try to go with right one and first i have to put my needle on again so i do have my needles on the right spot i'm gonna make sure my signature is sitting nicely not too tight not too loose and i'm gonna make a knot and go back with my thread and take another signature so this way i will sew all those signatures i do have all my signatures sewn by the way that cross stitching i wanted to show you in some different tutorial and you can also can make a middle cross stitching so i will make those tutorials in some other videos but you already can imagine how which way to go so i'm gonna go outside with my threads again and we will fix the top cover to this sewing and that will be it so i'm gonna take that top cover and i'm gonna start with this top hole so what i'm gonna do i'm gonna go from top to the hole here around the thread and try to tie this to make it sitting beautifully and tied it around and go one one more time from this way around that thread there and here to the loop it's like i'm going from here the inside here and i'm making a loop and you will tie it with this properly to make sure it's not moving too much and it's sitting just accurate and again from the top here and like inside and nicely tied and again from here around that thread from here around the thread thread here i need to catch my needle just bear with me where is my needle and here i'm going to inside of that loop and pull it and again from the top to that hole to this side around the thread and pull make sure you've got nicely tied all that thread pardon me and again with the thread around this thread here between signature and cover i need to catch up my needle so so bear with me where is that creepy needle i've got my needle and here it will be like i'm going to that loop here and again from the top to that hole around the thread and tie like this go around the thread one more time into that loop and tie pardon me and now you can make some decorative you know bows here or you can go back to your first signature pardon me i need to sip a little bit of water so you can go back with that thread into your first signature and use it here maybe like decoration to hang there some tags do not make a too tight knob right now on those ends of your thread you can you know you can mess up your stitching so just make that knot and put that thread that's all and i think i'm gonna use some decorative and so i'm gonna probably leave it a little bit longer oh no i'm gonna keep it short and here it will be same make a knot you don't have to tie it here too much because you already have some your signatures so just nicely and we have sound the journal i hope you saw something from that stitching so this is my tag on cover totally inspired by tina stainhouse i love her so much her style is amazing and her her tutorials are wonderful and she gave me so much inspiration with everything all ideas she has so thank you so so much for all your inspiration tina this is my sharing for today thank you so much for staying with me oh it's a really long time you stayed so hopefully you enjoy it have a wonderful day take care about yourself and see you next time bye