Meat boy is back and today we are not playing with meat. We are going to make chewy chocolate chip granola bars and I was in the supermarket looking for something that was approachable, fairly calorically dense and I thought of these granola bars then. I started looking on the shelf, reading the ingredient list of all of these boxes and you know the ones that were organic that had decent ingredients still had a few things I wouldn't want to consume. So in order to make the recipe healthy, minimally inflammatory and something that I would feel comfortable feeding myself or my family every day I decided to show you guys. And we've done several you know non-carnivore dessert recipes in the past such as chocolate chip cookies, cheesecake that you guys can go back and check out on my channel. In just about any granola bar recipe you'll see oats used as the base and that's what we have here. Interchangeably you'll see some type of nut like walnuts or pecans as well as rice cereal. So what we're doing today is actually a combination. We're going to do rice cereal with some organic macadamia nuts that I dry roasted and salted. So this is going to be the base that we're going to cover with kind of a sticky syrup that we make from sweetener and fat which is going to be coconut sugar, our natures glucose on Frankie's free range foods as well as some coconut oil. Coconut sugar is to me just a less inflammatory version of sugar not as many chemical additives not as much processing has a nice deep like almost brown sugar caramel flavor. The natures glucose is about 75% glucose as opposed to the typical 50% that you see in regular honey maybe even 40-45% so overall it's less fructose less stress on the liver and just a healthier sweetener overall. And the reason we're using refined coconut oil is because it has a neutral flavor it doesn't go bad so we can leave this stuff on the counter for a long period of time. You could also use butter like high quality organic grass-fed butter. For seasoning we're using a vanilla powder as well as a bit of salt and for the chocolate I actually have some chocolate chips which contain some sugar and vanilla in them. You could use regular rock of couch chips but to me they just don't taste right they don't taste as good that would be you know a slightly more natural alternative. First we're going to measure out the dry components and it's going to be two cups of these quick oats. It has to be quick oats because steel cut rolled oats need to be cooked so I mean you have to like cook them yourself then somehow dry them out it would be very very difficult to do. Of course everything we have here is organic to remove as many agrochemical concerns is reasonable. You want two cups of oats for the macadamia nuts or whatever nuts you decide to use about a cup or you could just use rice cereal so we have over two cups I'm actually just going to add about half of this. Now if you did this with just rice cereal it would basically be a rice crispy treat which by all means you can do. If you want you can you know throw this in the food processor to break up the rice cereal a little bit more which is something you should probably do. Everything else excluding the chocolate chips is going to go in a pan about five tablespoons of this coconut oil and we want one cup of sweetener total so whatever you're using whether it's organic sugar, honey, Stevia it's equivalent to one cup of sugar total. So I'm going to do maybe a quarter cup of the coconut sugar and some of you might be wondering Frank why don't you just use only the natures glucose it's because the dryness of the sugar gives it the stickiness so if you don't have like a dry sugar in here at least a little bit the chewy bars aren't really going to stick together that much we're going to add our natures glucose about three quarters of a cup and last for seasoning we have a teaspoon of vanilla powder it's a bit overkill but it'll be good and then half a teaspoon of salt all we have to do is bring this to a boil let it go for a minute or two and then we can mix in the dry stuff honestly this would probably taste a lot better with butter but for some reason almost all the recipes were using coconut oil is this vegan oh no we have honey in it so I guess this is actually unfortunately close to being a vegan recipe if you omit the honey and just use coconut sugar yikes after about five minutes this is going to start bubbling and just want to make sure to stir so at first the oil was separated from the sugar and now it's kind of homogenous together and we'll keep this going bubbling for about a minute that looks about good so now we'll start adding the dry mixture I'll add most of it and just make sure that we have enough in here to add the rest it looks like we can add the rest to it so we'll turn the heat off and let me just taste a little bit to make sure it's sweet enough yeah that's pretty sweet it's not like crazy sweet like candy but definitely sweet enough for a granola bar now we're gonna lay this out onto a greased sheet tray we just want to try to shape this into some type of rectangle so that when we cut it later we have nice edges we have to let this cool off a little bit before adding the chocolate because it will melt last time I made this recipe it was actually just like a chocolate granola bar because there were no chips left I just completely integrated hey this would be a great recipe to sneak some protein powder into get some whey protein in there get some grass-fed butter for vitamins definitely if you're looking to sneak some stuff into someone's diet this is still really hot so I just got some gloves on I'm trying to pat this down without burning myself you know depending on how much effort you want to put into the presentation you know how much time you spend shaping this you really want to screw up the sides that much do you care it's up to you so this has to cool off for five ten minutes and then we can take the chocolate chips and kind of like press them into the top after about ten minutes it's cooled enough where it's warm to the touch still a little pliable so perfect time to add our chocolate chips the recipe calls for about six ounces I'll just put on a couple of ones and then press them in in hindsight maybe don't pack this so tightly just wait till after you put the chips on you almost have to kind of like press each chip in individually so we'll do this for the whole thing we'll try to get as much on top as possible because you know the only chocolate chips are the ones on top see the chocolate's even even melting a little bit so we could have waited a little longer for this to cool off but it should be fine I think if you waited any longer for this to cool off you couldn't even get these chips on here you know it honestly that's not a bad idea instead of spending all this time putting these chips on top just melt a little chocolate and drizzle it on the top that probably make a lot more sense from a time perspective and it would taste the same yeah I don't know this this honestly isn't even this isn't even warm to the touch so if you really wanted to keep the chocolate intact what I would do is pop this in the fridge or even freezer get it cooled off and then just put the chips on afterwards but we'll pop this in the freezer for maybe half an hour or let it set up and then we should be able to cut it and try it looks horrible nice so we've definitely made things that look better but you know I tasted this and it tastes really good so definitely pop this in the freezer for five minutes before you put those chocolate chips on you should be good to go as I try not to eviscerate myself with this knife all right there we go yeah this is definitely definitely really hard but let's take a bite I was tasting the mixture so I kind of know what this tastes like but let's see how it is at you know near room temperature with the chocolate added this is like crack this is really good I mean it's a chewy chocolate chip granola bar that tastes like twice as good as what you get in the supermarket texture is perfect it's like chewy but still has some crunch it's sweet but not too sweet you get a little bit of that macadamia nut that really adds a lot I would definitely throw those in here and yeah I would definitely put you know some whey protein in here try out the grass fed butter make this a little bit healthier and more nutritious those chocolate chips really make us a lot better so if you don't have those organic chocolate chips I would definitely take some organic rucka cow and mix it with some vanilla and sugar and then drizzle that on top of the bars almost turn into a chubby little Italian boy regardless of what you want to eat if you put in a bit of effort to source high quality organic ingredients and get a recipe with the correct ratios you'll have both a delicious and healthy alternative that tastes a whole lot better so let me know if you guys try out how you like this recipe and honestly if you add whey protein to this and butter it would probably taste even better which I find hard to believe considering how amazing this is and for all you vegan fairy boys just omit the honey and you're good to go so thank you guys for joining me today just leave a comment down below drop a like on the video if you can share this on social media share it to your friends have a make it for their kids but I hope you guys enjoy this and I'll see you for the live stream later at 3 p.m. Eastern time on the channel Frank Tufano


Thank you. So this year my typical Wayland talk is not really a Wayland talk, but more a desktop security talk So while porting Quinn to Wayland I came into the situation that I had to look at security because Quinn takes over lots of functionality from X and we finally have the possibility to make that secure and then I started to look at it and try to make it secure and Realize it's not possible because the foundations are broken are not secure at all So with this talk I want to Show a little bit where we have problems for the security of the whole stack what we need to do to improve that I will start a little bit this showing this Typical problems you have on x11 and then show what wayland changes what wayland doesn't change and Then present some ideas how we as a community can improve the Security of the Linux desktop So I'll start with x11 and I'll start with the typical thing Which is known for x11 and that is the key logger. So Getting all key events as part of the protocol Up until a month ago. I thought it's possible to protect against by Using the crap keyboard command, but then I noticed that since x input to one or later You get all raw key press and raw key release events Even if an application crap the keyboard So even if the screen is locked another application can monitor all key events that are native key codes So you still need to translate them you send them through Licks xkb common and then you can do great things with it for example in plasma 5.8 We have modifier only shortcuts like you press the meta key and it will open the The start menu that is based on exactly that I'm listening for all raw key presses and all key release events send it through xkb common to figure out whether I am Modifier is pressed whether another key is pressed in addition and then can decide whether only the modifier key was pressed So that has valid use cases, but it also means that You can easily build a key logger with it now You might think that key lockers just don't matter to you But with the key logger you can do very very evil things if you get all key events Imagine you open console the key logger knows that you just typed in console and open that Then you do SSH to your server it knows that you did SSH and then you type in your passphrase So it has the passphrase it's running as your user and it also has access to your SSH key So it can do the same thing It can listen for when you do see or see do it can listen when you get to your bank account and add your Number and PIN it gets your Facebook password your GPG passphrase your SSE key Passphrase whatever you want it will have everything you do every thought you type into your computer is Available to a key logger now KDE's vision is that we improve the Privacy of the of the user on the computer system So this is really a fundamental aspect of what KDE wants to solve Keyloggers are preventing to have a private system. It's just not possible with an architecture Which allows keyloggers now we kind of with x11 do all the other wonderful things like doing the opposite Injecting key events. This is now in Demonstration I sent to the dolphin and Kate mailing list in the beginning of this year. It's Actually not a vulnerability in dolphin or in Kate It's just making use of what the core x11 protocol allows you to do so what I did is I Had a small application Listening to all windows which gets opened then looking whether it's a whether it's a dolphin Looking whether it's running as route and then starting to inject key events the key in one to open the embedded console Which is f4 and then I couldn't type any command. I wanted as route just because dolphin was running as route And that can be done with pretty much everything you get all the state in x11 and Yes, so what can you as an application developer do to protect again that if you know that you could be abused if you run as route and Someone does something evil with you. Well, the most important thing is to never run graphical applications as route We have been telling that to use us for a long time, but it doesn't help. They still do it They think they have to do it So what I suggest applications to do is to add a check before creating the you GUI application and Check whether you run as route and just quit with an error message shown to the console Maximum print line don't open an X window don't open any window if you're open and window you're owned. It's too late Now obviously there are valid use cases to do things as route But that doesn't mean that your GUI application needs to run as route That that means that if you open a route shell in a console you are equally vulnerable, right? Kind of yes Only if you combine it with other things like if you if a key logger is running then yes but console actually also has other problems, but The fun has fixed will the one Harold reported. Yeah, it's fixing console It's we still have to fix it in in jacquak, but there is a warning saying you will be pwned But at least there's a warning good enough But yeah, it's it's a yeah, what you say it's it's quite true It's a fundamental problem that as soon as you switch to route and other applications Notice that you can do evil stuff with that on x11 Valen will fix that But anyway, what I would suggest is two applications if you want to do something as route use things like polkit use things like chaos to Delegate the actual task to a small helper binary, which is secure, which doesn't need a windowing system That would help a lot It's not actually enough to not use the windowing system because as soon as you fire up a q-core application You also download you also allow the loading of plugins, which is automatic So you also need to unset a huge swathe of environment. I will come to that later on So then on x11 we have more things we can do like we can get a notification whenever a window Changes its visual contents and then redirect that to an xpix map and use that to get the texture from it and then you render To a special window and that replaces all the content of x now That doesn't x11 compositing window manager, but it allows to record everything you do You can replace the compositing manager and you have no chance to really see that you can render the desktop in different ways Remove a window add another window You have no control about what really gets shown. It just replaces for Co-functionality of x11 and if we combine that we can do Interesting things like a phishing attacks that was something I had seen presented at xdc so you basically just get a screenshot of a firefox or another browser and You put another x window on top of it at the exact same position at the address bar And then you start to inject key runs to the real firefox Send that to evilbank.com and you render that you are back at bank.com with a nice green Log symbol so everything will look perfect, but you have no chance to notice that you are actually on Evilbank.com and of course a mainland will fix it Well, no it won't So the protocol is sane and it fixes many aspects, especially the key logging aspect We don't get window informations. We don't know which windows are there. We cannot inject input events We have no way to screenshot. We cannot position windows manually We have the clip but not broadcasted to all applications So that is already a very sane and secure protocol, but it doesn't really help us as we will see later on So first of all, it's not fixed in Quinvalent because we added additional protocols, which currently everybody could use so We allow injecting input events currently only mouse and touch events That was added for KDE connect because we KDE connect have this wonderful remote Feature and I wanted to use that on valent So I came up with a small protocol to be able to inject mouse events so that I could use that again We have information about about windows exposed to plasma. That's something we need for the task manager. It's also Yeah, mostly needed for the task manager also needed by K-Runner a few other things and Especially for plasma we allow Windows to position themselves. We want the panel to be at the position plasma tells us So with that it's pretty much possible to do most of the things I just presented as well We don't get screenshots. So that is currently not possible and you don't get a key logger through the protocol There are other ways for that So we can fix the protocols. We can choose introduce a security layer Their ideas for that for quite some times. I had been thinking a lot about it There's a valent security model. There was a suggestion for an authentication protocol we could just look at the PAD UAD group ID and By that decide who is allowed to do what? That would fix the protocol issue, but it doesn't fix the overall issue. It would move the Trust issue just one level down. So then Quinn trusts plasma But how can plasma trust the plasmoids it loads those content is not signed But even if it's signed, how can we trust that it doesn't do evil stuff? So Yes, we will fix the protocols because it's important to do that But we have to do more just by having a secure valent protocol we don't have a secure system and The root problem in my opinion is that we have lived in a mantra which is if it runs, it's trusted I've heard it like that very often that if an application is already running on your system You screwed you don't have to protect against it anymore because it's Connected to exit can do so many evil things. You don't have to protect against other things if it runs it has to be considered trusted and Yeah, but how did we get there? Why did we not start to protect our application against each other? And I think the main problem here is that x11 has to be too broken From a security perspective Why should for example the accessibility extension through debas protect against the key logger if you have a key logger in x11 built in there was just no need for that and That is a typical thing. So we have always the things like why protect console if you can Against executing commands when you also could inject key events Just through x11. So with x11, it's just not possible to have a secure system and then I also think that we concentrated on the wrong areas we Had the few that we need to protect the applications to get on the system on the first place so Yeah, you're screwed when you when the system when software is on your system So we protect again that getting in but we cannot protect to get it in that's something we see In the web space with how many security issues get constantly fixed in the browsers Also, what we always thought about was we need to prevent malicious applications to become rude So if it's running at the you as a user, it's not that bad because it's not true, but that's not true if you are Just because you're not true it does not mean that you cannot do evil things if I'm an Evil application running as your user it can do very very evil things but not install additional software Which is also not true with flat pack and snappy and things like that But we'll all be possible to install as a user. So yeah, why be rude? It's not what you are aiming for So now how can we get malware into the system and For that I think we as the Linux community don't take Security really serious and I've selected a few quotes here, which I From the last two years So for one thing we had we were of hacked Isis if you downloaded Linux Mint on February 20th. So the the Isis Provided by Linux Mint were exchanged with an hacked version Then we have one gyro forgot to upgrade the SSL certificate such as users get around it by changing the system clock That's how reddit spin it, but it was correct That was if you click the link you got in warning that they forgot to upgrade They are SSL certificate and suggested the users to just set back the system clock to be able to connect to their website again From the webkit department we have we regularly receive bug reports from users with very old versions of webkit Who trust that distributions to handle security for them and might not even realize they are running ancient unsafe versions of webkit That's a huge problem related to that from devion Therefore browsers built upon the webkit cute webkit and khdml engines are included in jessie But not covered by security support. These browsers should not be used against untrusted websites I have two questions to the deviant project. First of all, what is a trusted website? Second, how should a user know that he uses an application with khdml? But not let's not look at Other project that look at us at the cute and kde community So how does cute web engine look like we have currently 5.7 based on chromium 49 with security backpots up to 51 since then we did not have an update So the 571 was not yet released so what about the 48 security issues fixed in chromium 52 and Seriously, I bought them all they're not critical. So we haven't had an emergency release and How do I know that where can I find that you can't because we make no guarantees? I Think you just proof my point But I don't wanted to blame cute web engine here It was just a nice example because I actually looked for it and didn't find the information We also have other engines like cute webkit, which is no finally Perhaps getting an update and we still have khdml I don't want to know how many security issues are in khdml because nobody looks at it but why are we still releasing it and Then I asked myself can we trust our own software our distributed software? We don't get a tag. We don't sign our get tax not all of them Some are some are not our turbos are not signed and our info page on download kde.org Does not use HTTPS So how should I as a user figure out whether I'm using the software I'm supposed to do at runtime? It's not much different our K package system. They don't The the packages are not signed. So we don't have the possibility to verify whether it's correct Also the content of the package gets loaded at runtime without any integrity check so you can overwrite the package content which is Root-owned in your local home directory by just putting very different file for it. So that's a huge problem On our side we go and that also means that we cannot make currently with the bailout protocols plasma secure Because it does not have signed packages That's something we have to introduce in our infrastructure to have a secure desktop and Now I come to The environment variables. So how to exploit the system in the best way so the idea thing is you get a drive by download vulnerability in a browser and There or in any other application exposed to the internet doesn't really matter and then you just write into Glorified file like profile bash or see config auto start pump environment That are all wonderful files to write into and all you need to do is to set up a few environment variables best as LD preload And then you can take over the system Don't forget that now you can do local user models for system the inside the dot config dot the std So you can start basically everything that I didn't even know So our startup process Sources the shell script the environment variables are and then set for all processes and what's really Bad is that it gets sourced before we start our session start up so they get sourced by the login manager they get sourced by palm and Overall it means that our session might be owned before the first plasma script binary is executed So I was naive enough to think I can reorder the startup script for Quinn Wayland To make sure that all these variables are unset and then David Edmondson told me it's pointless Look at that. Yeah so What can you do if? You own the session you could for example install a key logger into Quinn Wayland Example code for that is on git kde.org and my personal clone So I thought well, I don't wait for others to write the key logger against Quinn I do it myself and it was easy. It took me 10 minutes You could and that using old code nowadays it would be even easier You could replace the polkit KDE authentication agent and wait till Polkit request the password You can ptrace applications to get the secrets or you can just listen on debuts. That's also always very good So, yeah, could we fix some mess? Yes, we can but it will break workflows, especially our developer workflows We have the Linux security modules We have a Burma as a linux libs.com and we can use that to protect our applications a little bit by disallowing Wide access disallow network access if it doesn't need it With app armor, we can even disallow Certain debuts calls if your application doesn't need it and that's something I want at least in case greenlock and Quinn to add lipsec.com to just Restrict what's allowed to do that you can be sure that Quinn just cannot write out stuff to files Then we can disallow ptrace which we did so all of the applications listed here. We adjusted to Not being able to be ptraced Many distributions That's a type of it should say many applications many distributions do that by default For example, Ubuntu does it by default But nevertheless, we should do it in Our own applications as well if your security relevant at the ptrace disallow flick We need to change our startup We just need to make sure that all the Scripts are no longer sourced and that we have verified startup process that we know the code which is running and Yes, that will break our workflows Especially if you're everybody who installs to opt and then has the environment variables adjusted to have pass loaded correctly and Yeah, we have a wonderful new technology coming up That's flat pecs and snap and that gives us a new possibility to also partly secure Aspects of the abster you because it allows us to disallow ride to home And we can easily disallow ride to all these evil environment variables files and config files We can with that limit access to debas We can use the file system portal to have the file open dialogue outside of this of the container and There's also a wonderful project by Ubuntu to have one X server pay X application It's nice way to secure X for it breaks X IPC mechanism Which may which for me means that it's also destroying an important aspect So I'm not convinced. That's a good idea, but from a security perspective. It is and We need to bring back the trust into our Software we need to get to where we can say if it runs. It's really trusted Which means that we need to introduce signing of K packages We need to make security relevant interfaces only available for the signed Packages if a package is not signed. It should not be able to be a task manager We should our get our applications to run in a sandbox sandboxes don't protect completely But it makes it more difficult. It makes it it gives another Level of defense. So that's something which we should do Um, we should think about whether we can authenticate our applications to the to the user a typical example is Is it the lock screen or is it just an application which looks like the lock screen and that was something we had been thinking around Also with the VDG How can we make that? How can we have a shared secret between the user and the lock screen? We could have things like the dedicated key combo as we know used to have or something like user account control It's ideas. It all has drawbacks. It all has nice things, but it's in possibility and One thing I had been thinking about was to improve the password asking experience so normal application which needs a password it can be P traced and Or the focus can be stolen from the window because the window manager doesn't know that this window is currently Asking for a password and that the focus should not be stolen from it or that windows taking order changes stuff like that So if we would have a password Asking service then the window manager would know that this is now Asking for a password and we could make sure that while the password is being asked the focus cannot be stolen and we can make sure that this password is entered in a secure way and Yeah, last but not least I want to say that Rayland gives us the possibility to have a secure desktop But we still need to do work and I would say we should do it to give our users a secure desktop and Give them the privacy they need and should have Can you say what you meant with having API like the task manager secure because I can still look into a prog pit, right? That was more like for plasma internally like the task manager has library exposed with all the new informations and That our plus points are not allowed to exit that So it's for manage good Yeah, okay, it's a mirror as a mirror and me and me stated up the download that Katie that work Do you do you have any any ideas of securing that only the Downloads that Katie the org main website, but also providing the providing them the Providing the way for securing also that the mirror sites of the download that Katie Katie that org Sorry, I think I'm the wrong person to ask that I think that would have to go to the sis at once I only noticed that it doesn't have HTTPS. I Was glad to see on your your slide that you say allow use application to run as a sandbox Yeah, are there any project progress in in making that possible because So far all application the one does sandbox have to have if its own set UI ID change route Tool or had to use anonymous namespace which Deepian has disabled for some reason a news kernel Which makes that right now and use application cannot run in in a sandbox. Are there any work to fix that? I think flat pack is the answer to that It might be restrained by the same problem that there's no general mechanism That would be when a problem for the distribution to solve You didn't mention the K wallet problem Like basically anyone can ask a password saying it's any other application Yeah, I didn't mention that because I There are too many things to talk about but it's part of the asking for password in a secure way thingy but yeah, it's It's a huge problem like that be a little bit So you said that you are adding all these protocols that are not in Wayland, but you are adding them in Queen like for specific apps like Plasma or itself or KD connect or K color chooser or whatever Shouldn't these protocols be part of Wayland because then these apps won't work in genome and the other way around So yes and no For the one which I added to KD connect that might make sense For the ones I added for plasma. No, that is plasma specific that doesn't make sense to you to have shared Unfortunately, we have only time for one more question You mentioned the asking for passwords in a secure way our password fundamentally broken should be replaced by something else sorry I mean Many people think that us watch should be replaced. I think I got it. Yes, but I think that's out of our control. I mean websites ask for passwords and All right, thank you everybody, thank you


What's up everybody? It's Jay Zaver Jasby's casebricks.com. Another five spots being given away in the mixer with this one pack break of 1920 Penini Mosaic. This is round on teams number 301. So we have another one out on the website 302 and 303 will fill up the mixer. So the way this works guys, just like any other filler break with a pack. We randomize customer names, teams distribute the hits out of the pack, then at the end of the break we will randomize only the customer names. Let's get a new dice roller. Let's copy the list here and customers in the top five after the randomizer will win spots in the mixer. So there you go. So let's do the break first. We got dice roller three and a four for seven times. Good luck. One, two, three, four, five, six, and seven. Tice out of Phillip. One, two, three, four, five, six, and seven. Charlotte Hornets down at the Chicago Bulls. Tice of the Hornets, Robert with the Mavericks, Jacob with the Jazz, Philip with the Pistons, Josh with the Clippers, Philip with the Raptors, Christopher with the Nuggets, Wade with the Spurs, Robert with the Pacers. Quinn with the 76ers, Brianna with the Sons, Jacob with the Celtics, Greg with the Cavs, Aaron with the Kings, Jacob with the Hawks, Joshua with the Grizzlies, Brianna with the Lakers, Philip with the Rockets, Tang with the Magic, Patrick with the Blazers, Tice of the Nets, Robert with the T-Wills, Jacob with the Pelagins, Tice with the Heat, Aaron with the Bucks, Brianna with the Thunder, Quinn with the Wars, Corey with the Wizards, Khan with the Knicks, and Philip, you have the Chicago Bulls, and let's quickly randomize, or sorry, not randomize, let's quickly alphabetize. Prim rib, guys, no trades here, and we'll see who wins spots in the mixer. You have a good amount too, Aaron.  I've only picked up a few, but I also do have like a ton, like I haven't posted still, and I just picked up another one today. Two miles, ooh, what is this? Kendrick Nunn, four out of 15, that is nice. Tice with the Heat, nice hit. Fire Heat right here. Lebron and a Carmelone, but yeah, I'm waiting on two of them, man. I've already messaged them. It's not even where they at. I see Miles is signing some of these ones, but he's not signing every single one yet. But I'm missing the Dyke cut ticket stub from Contenders at a 26, and then I'm missing the Cody Martin, the RPA from Optic, Donner's Optic football, the case hit. Those are the ones I've been waiting since like April and May. All right, so there you go. Well, not a bad pack, especially with this right here. All right, coolio. Let's see who wins spots in the mixture now. Good luck. Roll it, and we got a two and a one for three times. Top five get in, one, two, three. Boom. Three times, top five get in, guys, good luck. Jacob, Robert, Tice, Corey, and Jacob. Look at that, congratulations. After three times, two and a one. Top five are now in the mixer. Another way to win 302, and then the last one 303 for the mixer, guys, to unlock at jasbyscasebricks.com.


Well, today Ember here is going to help me check out the chip computer. We're going to look at games, video games running, and maybe we're going to be looking at Nintendo emulators. So let's go see if we can get Mario Brothers 3 running. How about that? Yeah. Okay. First up, we're going to try out an emulator that I normally use called FCEUX. We're going to run Mario Brothers 3 with the default settings. So here we go. So it starts up in a window and the animation seems good. But there's no sound. Also, if I get out my keyboard here and Alt-Enter, it's kind of stretched. It doesn't quite go full screen. It's not perfect. There's still no sound. Now, there's a lot of settings we can change on this, but let's try another emulator first and see how well that one works out of the box. Okay. We're going to try an emulator called MednaFan, which I'm probably pronouncing that wrong. It is not only a Nintendo emulator, it's also a Super Nintendo emulator, Game Boy, and maybe Game Boy Advanced, I feel like maybe. I haven't used this one much, but let's see how it runs with its default settings after you install it. So by default, it's in a window and it's so large it's going off the screen and the animation is very, very slow. So now we can tweak the configurations for both of these emulators and see if we can get this running full screens where it fills the whole screen and we have sound and the animation isn't jerky. So what I'm going to do now is I'm going to use the second one, the second emulator, and see if we can get it running properly. Okay. Both Ember and George are excited to play some Super Mario Bros. 3. I made a few changes to the config file for our emulator and it was maybe six or seven lines. I just had to change some settings. Let's go ahead and give it a run. Oh, we got it full screen. Animation seems to be good. Let's go ahead and get out our keyboard here and we have sound and let's see. Here we go. So we've definitely got this running fairly well. It's full screen. We've got audio and there's no lag or jerkingness in the game. Now instead of going over the details in this video on how to get this config file set up, I made it very simple. Check out the links in the description. There you can find a link to the config file I've created. It's up on GitHub. You just download it and replace your config file with it and you should be ready to go. There's also notes there in case you want to modify your config file on yourself and make the changes rather than using my config file for some reason. You have other tweaks that we've made in your config file maybe for other emulators. But definitely you can get Nintendo games running great on a $9 chip using Mac or whatever this emulator is called. Again, it's not the emulator that I normally use. Getting camera frame here. Say goodbye to everybody, Ember. We're going to be playing some Super Mario Bros, right? Good. Have a great day. I also like to take a moment to ask you if you like my videos and found them useful. Anything about supporting my videos over at Patreon.com. That's Patreon.com forward slash Mellix 1000. There should be a link in the description of the video along with the links to the notes and the config file I was talking about. Also check out my website filmsbychrist.com. That's Chris the K. There you can search through all my videos from both my channels and as always I hope that you have a great day. Be sure to share, subscribe, like and comment. Thanks.


The Abya State Governor, Dr. Alex Ote, has underscored his administration's unwavering commitment to eradicating all forms of crime and criminality in the state. Governor Ote made this known while declaring open a one-day sensitization campaign against cultism and drug addiction in Nigeria, organized by the Abya State Orientation Agency. The governor who condemned the alarming trend of crime among youths under the grip of illicit substances emphasized that no level of substance abuse could justify criminal actions. He noted that his administration is single-minded about rooting out crime and criminality to ensure that Abya remains safe for citizens and visit also like. Hello, hope you enjoyed the news. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


The speed of light, a cloud of dust, and the high, high old silver! The lone ranger! The Indian companion total, the daring and resourceful mask-wider of the plains, led the fight for law and order in the early western United States. Nowhere in the pages of history can one find a greater champion of justice. Return with us now to those thrilling days of yesteryear. From out of the past come the thundering hoofbeats of the great horse Silver! The lone ranger rides again! Come on, Silver! Let's go, we follow you, Silver! Here's news for all you mothers listening. The sparkle of lovely silverware sure sets off a table, doesn't it? And now you can own a complete set of exquisite queen best patterned silverware for practically a song. All you need are the silverware coupons that come with packages of nourishing Cheerios, plus the small cost to cover mailing and handling. Imagine such an easy way to get gorgeous silverware with a charming floral wreath design. You're offered many extras too, ice teaspoons, dessert servers, even seafood forks. And this is a long-lasting silverware, extra heavily-plated, so fine in quality and appearance, it's perfectly at home in the most expensive table settings. So save those valuable silverware coupons in packages of Cheerios. Start making the most of them now.  That's Cheerios, the ready-to-eat Oats cereal that helps give you the strength and energy you need. Then weed nephew of the lone ranger arrived at Pikeville by stage to spend his summer vacation with a masked man and his Indian companion. Thought who met Dan at the stage stop. Then they rode to a nearby grove where the lone ranger was waiting. Hold on, hold on! Hold, hold it, hold it! Dan, I can't tell you how glad I am to see you. You can't be any happier than I am, sir. Ha, ha, ha.  I'm almost tall as you now. He has gone a great deal, Tanu. Dan, I look forward to the day when your vacation would permit you to come back to us for the summer. So have I, sir. What's in that package? Something I've kept for a long time, Dan. Old Peter, that silver mine took care of it for me. How did I went for it that long ago? They opened the package. All right. I don't know what it is, Stato. Ha, ha. Maybe you opened the package. I find that quick. Good idea. Oh, a silver-studded gun belt. Oh, golly, my boy. A silver-studded gun belt and a pro-handled gun. Ha, ha, ha. Now, Dan's voice changing, Kimusabi. Yes, Stato. The gun and belt, they belong to my brother, your father, Dan.  I'm not giving it to you yet. Oh, I understand, sir. Remember, you carry a gun only for protection. You must promise never to shoot the kill. I promise, sir. I want to put it on. How do I look, Tato? Oh, like real man. It looked pretty good. Ha, ha. If you wear masks, you look almost like Lone Ranger. You're not as tall as Lone Ranger. But maybe people think you're Lone Ranger and they'll not see you together. Someday, Dan, too, may wear a mask to help the law in the West Tunnel. Kimusabi, you have extra masks and saddle bags. Let me get it. See how Dan looks. Here are the mask, Dan. Now, you put them on. All right.  There is a great similarity at that. I didn't realize it. All right, take off the mask now, Dan, and we'll go back to our camp in the hills. Dan removed the extra mask and put it into his pocket. Then the two men and the youth melted and left to grow. Easy, easy, easy. Anyway, come here. Come on, come on. Get off of there. It was about noontime when the Lone Ranger, Dan and Tato reached their camp in the hills outside of Pikeville. After having lunch, the mask man said, Dan, as an outlaw gang led by a man named Juan Marco, a spaniel operating in this territory. I heard the stage driver mention Marco, sir. Said he'd been held up and robbed a month ago by the Marco gang. We hear it, stageholder. Juan Marco is clever. Tato and I attempted to capture him once before in New Mexico. They gave us a slip. That's right. We searched the foothills for Marco's hideout, Dan. You ride the town, get some supplies. We don't have enough of the three of us. All right, sir. When you get back to camp, get some rest. You need it after your trip. I don't know. I'll be back by sundown. In a small, respectable-looking farmhouse belonging to one of his friends, Juan Marco spoke to four rough-looking men. So far, amigos, we have managed to evade the law. But from now on, we must be most careful. Why, Juan? You've been smart enough to keep us away from the law up till now? See, that is so, Max. But slickest tell me that two certain homeries are snooping around here. A masked man in the Indian... That's right, Max. I saw him on the valley trail the other day while I was riding along the ridge. The masked man is known as the Lone Ranger.  They have helped to put many outlaw gangs behind the bars. That's right. Look. Maybe I'm new in this territory. But in Colorado, where I come from, we don't admit being afraid of anybody. Let's say we are just being cautious, amigo. I cased the Pikeville bank and found out it's loaded. I thought we planned to grab all that cash soon. My opinion is that we should lay low until the masked man and his Indian friend leave here, Max. Well, I don't agree with you. I say let's go out and search for them. Let's round up that masked man and make sure he can't interfere with our plans. I'm willing to take a chance and go after him. Why don't the rest of you prove you have as much nerve as I have? Maybe Max is right, Juan. I'd be willing to try. We shall see what the rest are willing to do. How about it, seniors? Do you want to take the bull by the horn so as to speak and go after the masked man and Indian? I know. I'll go. All right. Have a badge. I took him a sheriff once after he was shot by the gang I was with. Here it is. And what do you expect to do with that, senior? Wear it. Now I'm a sheriff. But I do not see how that is to help. I'll try the friendly approach, Juan. If the masked man was seen riding the valley trail, I'd say he'll pass along there again coming back to his camp which must be nearby. I'll watch for him. Then ride up to him and ask his help to round up a killer out there I've been training. We're still listening. Look, I'll tell him I've heard all about him. He'll agree to help me, of course. Then I'll bring him here saying I think the killer is hiding out here. But what about the Indian? Yeah, I forgot him. Well, if he's along, I'll ask him to help too. There's five of us. They won't be expecting me to put a gun on them from behind while you men face them as they come in here. It might work at best. I'll stare right away and watch the valley trail in the ridge. Slick, you follow me the distance and watch to see if anything happens. If I do meet the masked man, you hurry back here and warn the others. Or Max, I hope your plan succeeds. But I... Don't worry, Juan. Sooner or later we'll have those hombres right here facing our guns. Dan Reid waited a while before leaving camp for town. Then he muttered his white horse, Vickie, and started along the valley trail at a leisurely pace. Come on, Vickie. After he had gone some distance, he felt in his pocket to make certain he had the supply list. His hand came in contact with a mask Tato had given him to try on at camp. Oh, I forgot to return this mask.  For a moment, Dan held the mask in place. Then something the Lone Ranger had said ran through his mind. Someday, Dan, too, may wear a mask to help the law in the west, Tato. Gosh, I wonder what that would be like. I'll put on this mask now and try imitating the Lone Ranger. Nobody will see me. There, Victor. Now we'll go after our plans. Come on, Victor. For a few moments, Dan thrilled in pretending he was the Lone Ranger. And he urged Victor onward at a rapid pace. Hi-ho, Victor! We'll continue our Lone Ranger adventure in just a moment. Diving Doris is 13. And she is the Diving Queen. She can do a flip because she knows. She's got gold power from Cheerios. Yes, she's got gold power. There she goes. Cheerios, they got gold. So nourishing because they're made from oats with minerals, vitamins, and proteins that your body needs. Yes, indeed. A bowl of Cheerios and milk really starts your day off right. Does all sorts of good things for your body. Helps you have strong bones and muscles, good red blood, and healthy nerves. So every morning, take on a bowl of Cheerios and milk for real gold power. You like that wonderful toasted oat flavor, too. Downright delicious. Come to think of it, Cheerios is one of the tastiest muscle-building foods you can eat. Try Cheerios and you'll hear... He's feeling hard Cheerios. All to continue. A short time later, Dan's attention was attracted by a horseman racing down the slope to intercept him. Momentarily, forgetting the mask he was wearing, the youth pulled Victor to a halt. Oh, Victor, hold my hold. Maybe I'd better get off. Hey, Mr. I want to help you. He seems friendly enough. You're right. You know it's my sheriff's badge. I'm from Colorado. I've heard about you and seen that mask in the White Star. Mask? Oh, for that one. No, no need to explain. Like I said, I've heard about you plenty. I want your help. Help? Listen, Sheriff, about the mask... I know you're the lone ranger, so say no more about it. I trail an outlaw down this slope. I've heard about you plenty. I want your help. Help? I trail an outlaw down this way. I think he's holed up in the nearby farmhouse. Sheriff, I'm not the man you want. You see, I'm wearing this mask. It's sort of... Ration freeze. All right. But I think you're making a... Marco and the others must be local to be afraid of an hombre like you. Now take that gun. Man alive, I wish they could see this. You know, somehow, Mr. You got everybody fooled. But you must know your match when you meet him. I'm taking you to see Marco in a game. I'll laugh in their faces, and then I'll put a bullet in your back. I get moving. Come on, Victor. You know me. Come on. Rick reported to Marco that he had seen Max capture the masked man. When Dan and Max arrived at the farmhouse, they stopped at the back door. Move it, Victor. Walk around the house. We'll go in the front door. Remember, no tricks. Now move. Open the door. Don't forget the gun at your back. Here he is, man. He acted so meek when I met him, I decided to ditch the friendly act and get tough. One, this hombre sure had you and plenty of others fooled. Keep him covered, man. You have this armed masked man alone, eh, Senor Max? I sure did. Easiest could be. Where is his horse? The white stadion is behind the house. This is more strange. I do not like it. What's strange about it? Once this hombre faced a gang, single-handed and got the best of them. I know. I stood right beside him, just as I stand now. Eh? Wait. Caramba. There is something wrong here. Eh, what do you mean? Eh, Juan, what's the movie? When I stood beside the lone ranger before, Senor, he was taller than I and broader than the shoulders. You must have imagined it. He's a good two inches shorter than you want and not so solid. I'm not the lone ranger. I tried to tell you about this man. He was a boy, Senor Max. What is this? He cannot be the lone ranger. I'll never forget his voice. I'll remove that mask. Eh, look. The face of a youth. Five years ago, I first saw the masked hombre. This one would have been a mere boy then. I thought he was masked and riding a white stadion. I was just trying to imitate the lone ranger when I met you. I started to tell you, but you made me keep quiet. Then, do you mean to say this isn't the hombre I was supposed to bring here? That's exactly it, Senor Max.  See, he has no belt of steel, but bullet either.  I'm a fool, am I? I'll fix this maverick for pulling this trick on me. I'll not take that gun or no gun. I'll kill you for that. Wait, Max, wait. Let him alone.  At least the young fellow has courage. What is your name, amigo? Dan Raine. So you admire this masked man known as the lone ranger, eh? You wish to imitate him, no? Yes, I admire him. I had the mask. Never mind. Never mind.  We better get rid of him and make other plans. No, wait. I have a great idea. What is it? Yeah, tell us about it, Juan. We'll go around the pike-gill bank tonight and take this fellow Dan with us. He'll wear the mask and ride the white stallion. We'll make sure he's seen. After tonight, the lone ranger will no longer be respected. He will be thought of as an outlaw. Time is, fellow, till we're ready to go. Late that afternoon, a heavy rainstorm erased any tracks Dan's course made so that when the lone ranger and Toto returned to the camp just before sundown, and Dan wasn't there, they were unable to crave him. They both took town to inquire, but learning Dan hadn't bought supplies, they decided to go back and search the trail. A white man arose and the mask man and Indian could see some distance along the trail. They found no sign of Dan nor his horse. Finally, the lone ranger spoke. I don't know, let's tell that gully all the time the trail search it. That man might be lying there, heard a wounded man. That's a good idea, Kimusami.  The man rode slowly along the bottom of the gully. They heard the sound of hooves approaching out on the trail. That was like several horsemen moving toward town. Then soon passed here. We wait. This will be a shock for a lot of people to find out the mask man was riding without a horse. If he is in your place, these young fellow will be up like him so that people will be sure the lone ranger is with us. After we rob, they bang it right fast to town. They then planned to rob bank and town. Have someone posed as lone ranger. Toto, Dan may be riding with him. Yes, remember, he pulled on one of my masks. He must have had it with him. Oh, so one of the horses went in as they passed. You think you're right, Kimusami. We'll take a short cut to tell him to contact the sheriff.  Marko and his men stopped among the trees on the edge of town who perfected their plans. Then they circled so as to come up behind the Pikeville bank. They dismounted in a nearby hole. Senor Dan, I have taken the bullets from you. Now I give back your gun unloaded. The lone ranger would not ride with an empty holster. Here, thanks. It'll be covered every minute, Dan. Then get shot if you don't play along. See, that is right. Have your guns ready, Senor. Now we'll go force the back window then unlock the back door from the inside. You, Slick, will hold a gun on this mask all the way till we come out. Stand with him just outside the back doorway. Now let's go. This window will be easy to force. Catch his rusted. Notice him when I keep the bank. I'm gonna work on it. I need to act inside. I'll go through and unlock the door. Watch the young fellow closely, Slick. Don't worry. Follow me, Senor Dan. Griebe stood waking while Slick held a gun at his back. He had an impulse to shout for help, but knew it would be useless. He saw the white go on inside. Then, through the open door, he saw several men rise up behind the teller's long cotter. Hey! We've got to get to the right. We've got to get to the right. Holy mackerel, we've got to get away from here. Run for the whole floor. We'll stay here! Then suddenly grabbed Slick's gun arm and was surprised by Dan's bice-like grip. Let go of my arm! No, thank you. Slick's goggles were used as gun on Dan. Then drawing his empty gun brought the body and down heavily on Slick's head. That'll stop you. Dan, you all right? Yes, sir. Take off that mask and try this man. Then go away with the horses. Yes, sir. I'm going in to help the sheriff and these men. Inside, the cook was taken by surprise. Two were wounded, but Max and Marco found protection alongside the big safe. And your max spotted the land. They will try to get through the back door. Stop those guns! Hey, look. There's one fella. His gun is empty. I'll plug him. Hold it! Oh, come on, man. We've been trapped. Time to give up. I know you're really the little ranger. I dropped my gun. They have the bottle, Sheriff. Keep them covered. One of them. Three of them wounded. There's another one outside the door. He's tired. Good. That man is Juan Marco, leader of the gang. Marco, eh? He's caused a lot of trouble around here. Kimusabi, you'll find Dan. Yes, he's all right, Tutto. He's waiting with the horses. He knocked up all the cooks. That's good. Then growing up fast. Juan, the young fella with the mask. I thought he was the one who came in. So now you believe what I said, eh, General Max? You're not so tough as you thought. Neither are you, Marco. Once the masked man got in your trail, you didn't have a chance. Juan, that masked youngster got us into this mess. He hadn't fooled me in the thick and he was the real masked man you talked about. Take a quick look at the masked man. Then you'll see that... Oh, he and the Indian have already left, eh? Yeah. They don't waste time after a job is finished. I don't know what your pal's talking about, but as far as I'm concerned, nobody but a dimwit could ever mistake anybody for the Lone Ranger. We'll return in just a moment for a word about our next exciting Lone Ranger adventure. Dan reads, Fight for Life. Because champions are made not born. Yes, sir. Get on your way. Get on your way. Get on your way with sweetie. It's good to know you can make something out of yourself, and you can because champions are made not born.  When Jack was just 11 years, his tennis didn't win him cheers, but practice built his power game and he got on his way to fame with Wheaties, the food that champs acclaim. Today Jack tops the tennis clan for 22 years a Wheaties man. Jack Cramer going steady on Wheaties since he was 11 years old. Mighty good for you. There's a whole kernel of wheat in every Wheaties' flake. Okay, Jack, serve that ball. He's on his way. On his way. He's on his way. On his way. Get on your way with Wheaties. Because champions are made not born. Yes, sir. Get on your way. Get on your way. Get on your way with Wheaties. Breakfast of champions. Dan Reed had disappeared and the Lone Ranger and Tahoe searched for a gang's hideout in the nearby hills where they suspected he might have been taken by outlaws. What storms interfered with the search and Dan was forced to fight for his life against great odds. This is a story of suspense and action you'll not want to miss. Be sure to listen. The Lone Ranger, a copyrighted feature of the Lone Ranger Incorporated, is created by George W. Cranville, produced by Cranville Campbell Muir Incorporated, directed by Charles D. Livingston and edited it by Fran Stryker. The part of the Lone Ranger is played by Brace Beamer, your announcer Fred Boyd. The Lone Ranger is brought to you by General Mills every Monday, Wednesday and Friday at this same time. Be sure to listen.


McLeod, McIver, Rogers, Neeson and Gleason are just some examples of surnames that are connected to the Vikings. Research from the Centre for Nordic Studies, the University of the Highlands and the Islands, and the TV channel History looked at the Viking legacy on surnames a few years ago. One of the main findings of the study is that people that have son at the end of their names, such as Henderson or Hobson, are potentially connected to the Vikings. Dr. Alexandra Sandmark, from the University of the Highlands and the Islands, explained that during the Viking Age, people did not have family names as we know them today, and that children were named after their father and occasionally their mother. So, for example, the son of Iver would be given his own first name, but then also Iver's son, as his surname, a daughter would be Iver's daughter. In Scotland and Ireland, Mick or Mack is simply the prefix surname, meaning son of, so Mackiva literally means son of Iver. Equally, McLeod means son of Loud, with Loud being an old Norse word meaning ugly, unfortunately, but this was a pretty common personal name in both Iceland and Norway during the Medieval period. The clamor cloud of Lewis claims its descent from Loud, leo'd however you want to pronounce it, who, according to their tradition at least, was one of the sons of Olaf the Black, a 13th century king of the Isles, a kind of Norse Gaelic kingdom that encompassed many of the Scottish islands for a large period. Please let me know your surname in the comments below, in any interesting connections. Popular Irish celebrities who have potentially Viking-influenced surnames include Paul Hewson, also known as Bonnell, the U2 frontman. Others include Brendan Rogers, the Leicester City manager, former Celtic manager, Liam Neeson and Brendan Gleeson, the two popular actors, also have Viking-connected surnames. Brendan Gleeson himself, actor of love, actually looks somewhat like what I imagine a Viking would have looked like. The popularity of the Vikings was also revealed in this study, of the 2,000 people surveyed, over 56% of people wanted to be connected in some way to the Vikings, wanted to have Viking ancestry to some degree. Here is a list of surnames that are connected in some way to Old Norse. It is quite an extensive list, so I'll put a link in the description below as well. Some of the names on this list include Asquith, Gael and Willoughby. This is an interesting map as well. This shows it and is kind of like a simple breakdown of the percentage of Viking ancestry in different parts of Britain and Ireland. Unsurprisingly, the likes of Shetland and Orkney have the highest amount, well over 20%, 25% or so, and then it filters down from there. Parts of Ireland have the lowest amounts, according to this map at least. In general, however, Shetland and Orkney are definitely considered to have the highest percentage of Viking ancestry, and then parts of the Isles of Scotland have a reasonable large amount as well, which makes sense considering that Northsdale Kingdoms ruled that region for centuries, so it makes sense looking at this map, the general reflection of Viking legacy and ancestry, considering the history of these territories. The reason why there is such an influence of the Vikings on Britain and Ireland, on the surnames of Britain and Ireland, is obviously due to Viking raids. But why did Vikings raid other lands? To find out, click here. Thanks for watching. If you would like to support this work through Patreon, buy me a coffee dot com, or through PayPal, all the links are in the description below. Thanks again for watching, and I'll see you next time.


But 3PAR, and you talked about it earlier, brings a cloud dimension. So how much of the 3PAR acquisition was sort of cloud related and future growth versus trying to fill out the portfolio? Well here's what's interesting about 3PAR, and I'm going to say the same thing about our store once technology. We have two new technologies that cover multiple market segments with one product. And no one else in storage can say that. So if you look at 3PAR technology, and if you look at the traditional storage pyramid, right, of low-end, mid-tier, high-end storage, 3PAR covers mid-tier storage, covers high-end storage. And as you know, most companies have separate architectures and separate products for mid-tier and high-end, most developers of that technology. With 3PAR, customers can start small and grow large. Again, very unique, no one else can do that. In addition to that, it covers the cloud. It has all that software out there that people want in clouds, multi-tenancy for security, the ability to have mixed workloads and still meet SLA performance. All those features 3PAR has natively. So what's cool about it, again, is one product, multiple use cases out there. The second thing, StoreOnce is a data duplication software that we introduced. Which came out of HP Labs. HP Labs, back to native innovation that we're speaking about. And with that, you know, DDoop is one of the fastest growing spaces in storage. People do client-side DDoop, they do inline DDoop, they do primary storage DDoop. In today's world, prior to StoreOnce, you had to buy three separate products to do those jobs. The StoreOnce architecture is one architecture that does all three. So we're seeing huge customer uptake of that because again, one product that meets multiple demands, simplifies their life, simplifies their environment and gives them more innovation faster. So that's...


Hey guys, welcome back to the fourth video in this series on CAD routines from scratch. In the last video, if you recall, we had a simple 2D render of our geometry. That's nice and all, but it would be nice if we could rotate this structure with the mouse so we can see it from different angles. That would kind of be helpful, at least for me. So that's the plan on this video. To do that, it's not actually that hard, it takes a little bit of thinking, but pretty simple in the end. If you recall from last time, we had a view plane here, which was defined by U1 and U2, which are both perpendicular to U3, which is the vector from the target of our view to the center of the view plane. And I want to have a few things happen. First, I want if we can click the mouse and drag it vertically, I want to rotate the view plane around, as you would expect, the vector U1, which is the horizontal axis. Obviously for U2, if we would rotate, if we would click the mouse and move it horizontally, I want to spin it around U2. And again, if we can scroll with the scroll wheel on the mouse, I want to kind of zoom in and out artificially, obviously it doesn't make any sense in terms of we're doing a parallel projection here, doesn't really make much sense to move the view plane in and out.  And we have a variable to do that from the last video. So that's the plan, implement these three things, to rotate the model around and zoom in and out, and we'll do that in this video. And to do that, it's pretty simple, we'll just be using the Rodriguez rotation formula, which is basically a simple way to relate a rotated vector per its original self around another vector a certain angle theta. So we'll get into how that works in a few minutes. Before we actually program the math, I want to just kind of show how we'll do this in the code and we'll go back to this in a few minutes. So let's open up the code for the last time. First thing, actually hold on before I do this, I want to say I also created this shell script here, make. Basically that's just going to make it easier for us to compile this later on. So that's available on GitHub, you can just use this shell script to make it a little bit easier than copying down these parameters. But in our actual code, a few things from the last video, let's comment out the right STL parts, we don't need that for this video. And then the look at vector, let's change that to 0.5, 0.5, 0.5. So we'll look at the actual center of our model as opposed to something at 0 for y, and this is just going to look better when we actually render this, I think. So now what we're actually going to do is we're just going to add some lines of code here in the render loop, this while loop here in our draw function, to handle mouse events. And that's pretty much what we're going to do, a little bit of code above and below this just to handle it, but that's the plan, we'll have some kind of mouse event handling here, and that will be pretty much the entirety of this video. So before I even do that, we have to do a couple of things, if you look here on this Rodriguez rotation formula, you'll see that everything has to be a unit vector. Obviously what that means is it has to have a unit length, and so if you recall from our last video, we had to normalize some of our vectors here, the view frame actually should be actually normalized to each one of them with these lines of code here. What I want to do is because we have to do it so often in the future, I think we should just make this an actual function by itself so we can avoid having all this code every time we want to normalize a vector. So that should be the first thing we do here, we'll just say void normal line of the vector, s in a float, the vector length 30 per sense. Now to normalize a vector, obviously you just have to divide by magnitude for each component, so we'll say void magnitude equals, we'll take the square root sum of the squareness, so we'll take the first component, vex zero, square, you can obviously use the power function for that, but I like to just multiply everything out. It's probably faster, I don't know if I don't even know, something to test. So that's the three components, all squared, square root.  That's that, return, and obviously this is a kind of like a pointer so we don't have to use an actual return, we can just address from the first index everything. That's pretty nice, now we'll go back down to our draw function and we'll just replace all these lines of code with the new code, so we'll say normalize vector v1, copy that three times for the u2 and u3, and we'll delete all this, and also we'll delete these lines of printf, we don't need those, which will waste space. Nice, that should just work, we'll see. Now, here's the fun part, actually doing the mouse event handling, so we will need some variables outside the loop. First among those I think we'll just talk about the things required to take mouse input, so you have to define at least an x11 x-event, so we'll find an x-event, basically an event is like you know a mouse click or you know a motion or a button press or something, that's an x-event. So we'll define one of those and then which kind of events we're looking at, well for that we have to say x select event, or great no select input right, select input. Yeah, that's probably good. And then you pass in what kind of events you're looking at handling, so from the display window we're looking at a few things, if I go back to our gimp thing we're looking at mouse drags and a scroll wheel. So let me explain how that works, let me just first tell what we need for events, so we'll need a button press mask, we'll also need a button release mask, and we will need a button motion mask, which button motion we're going to carry about, button one, so let me explain this, so basically whenever we have a button pressed on the mouse, so the left mouse button, the right mouse button, or the scroll wheel, it'll give us one of these events, whenever we release one it'll give us this event, whenever we move the cursor and button one is pushed we'll have a motion event, so long story short we'll be able to detect everything I said, we'll be able to detect the mouse being clicked with the combination of this one and this one, and then the mouse being moved after, I should say while it's clicked with this one. So that's pretty nice, and then also I should say button one is the left mouse button, I think button three is the right mouse button, and then button four and five I think are the scroll wheel four and backwards, I think that might vary for each different computer, but I think for mine that's how it is, and button one motion mask only applies to the left mouse button, but these two masks apply to every single button on the mouse, so that's pretty nice. Now in the while loop is where you actually have to handle the events, and to do that, actually pretty easy, you just say x in the next event from the display, I think only works per each display, and you store that value in the event that we just created, and then you can kind of just check about what's going on in the event, I mean you just kind of access different properties, and I won't get into the actual finer details of this, you can look up a manual and look at all the particular elements of each of these events, but I'll just focus on what we need for this particular objective, and so we can make either a switch or a series of if statements, we'll just do an if statement here, so we'll say let's say for example you want to detect if the left mouse button is depressed, you'd say if event.xbutton.button equals button one, so that basically means if we have a button event for which the button in the x button is button one, so this means a left mouse click, we will have some kind of result, so we'll say fprintf, something to do with that now, I'll just show you running, just to prove to you this is how it works, you see whenever I click I just click twice, we have two events, obviously the first one is me clicking down, the second one is me releasing, so we have two somethings for every mouse click as you would expect, let's go back down, let's talk about this, so how are we going to do this, well I guess we have a couple different events to handle, but probably the easiest event to handle would be if it's a scroll event, so let's just do that one first actually, let's comment all this junk out, and let's say if event.xbutton button equals equal to button four, and event xbutton type equals button press, we'll do something, so what does this mean, well this basically means if we have a button four which is either zooming in or zooming out, I have to think about that, and it's being pressed, so I should say whenever you scroll the scroll wheel each time you scroll it, it does two events, it does push release, push release, press release, for each time it rolls one indentation in the mouse, it's both events, so we'll say every time it does one of the events we will scale something, so for that let's just say we want a scaling factor to be multiplied by some quantity, let's just say 0.9f, so we want the scaling of our model to decrease by 10%, and then let's say if we have the same thing but for a button five we have a divide button, so it goes up by 11%, and let's see if this works, but before we do that we have to actually define what scaling is, so we'll say float scaling equals, or should we do 0.1, or just I guess just 1.0, yeah that makes sense to me, and then when we pass in the scaling value into our shaders we will just pass it, so let's honestly this probably will work, but let's just see what happens, look at that, I'm scrolling in now with my scroll wheel and we're making the model bigger or smaller, I think I might want to have it initially be 0.5, but it works out of the way, that's pretty cool, so let's let's do that, let's open up the function, let's go down to scaling, the speaker sorry that's 0.5, that sounds better than me, yeah and that works, so we've implemented this third checkbox here on our objective today, we've made the scroll wheel zoom, that was pretty simple, now these ones are obviously much more difficult, oops, so yeah we'll do that right now, so how will that work, well let's define a couple more things up on top here, so up here with the scaling let's also define a bool, which is whether or not we're clicking or not, let's say a bool left click, or left clicking, just because that does area don't have to, but now we'll define a couple of hints, so basically how this is going to work is we're going to basically have a linear relationship between how many pixels we are from the center of each axis, so if they say you're here with your mouse, there's some number of pixels between wherever you clicked and wherever you moved your mouse, both in the x direction and the y direction, and we'll use that number of pixels moved with the mouse to determine how much you rotate around, u2 or u1, or both, so we'll have to define a value for where you originally clicked and then we'll be able to track where your mouse currently is with one of those events, so we can calculate those dy and dx, so let's make some values for that, we'll say int x start and y start, now we'll need a bunch of floats, so we'll need some floats for the actual angles themselves, so we'll say theta u1, theta u2, that will store how many angles you want to rotate around, u1 and u2, now let's create some more floats for the actual vectors themselves, so I think we will need rotated versions, so we'll need three components in the u1, new vector, u2, new, u3, new, we'll need, I think we'll need some intermediate ones because we have to rotate twice, once around u1, once around u2, so we'll create intermediate ones, we'll say pending, this should be fine, that's probably all we need, if not we'll add some more later and now we have to add in everything within, so first thing we'll do first before I forget is we'll change these values here to new, we don't want to use the same old u1, u2, and u3 for our renders, we want to actually change that, so we will do that, so I guess our first task will be in this if statement here, we'll say if the event is x button, button 1, and it's a button press, so it says below, we'll say event x button type equals, but hold on, I messed this up, this has got to be a double equals, surprised that it even worked, actually it makes sense that it would work, so anyway type equals button press, this will basically, if I, whenever we click the left mouse button, so we want to do is you want to say left clicking equals true, or equals 1 I guess, maybe more sensible, and then we'll set the values for x start and y start, so x start is just going to be event x button dot x, and as you would expect y start is stored in the event x button dot y, so now we have the initial point here, this point here, the left mouse button being clicked, now we will say if it's released, so if equals button 1, and the type is button release, we want to set this to 0, and we have to define some, we have to basically set things now at this point, now we've, ideally we've highlighted everything here, we're just, you know, sending in the values for next time, so I guess we'll just say u1 equals, or I guess we'll just say free-shrine, u1 equals u1 new, 0, same thing for all the components, basically this means if we ever release the mouse button, we'll be able to continue using u1, u2, and u3 for the current view frame, so whenever we let go of the mouse button, u1, u2, and u3 will still correlate to these three vectors here, we can preserve that identity, and yeah, that's pretty much it, we're going to need this, I don't think we can get rid of these three lines here, two lines there, now here's the ultimate question, how can we create these vectors, u1 new, u2 new, and u3 new, that's what we have to use this front tree guys formula, so we'll create another if here, we'll say if, left clicking, and we have a motion event, we'll say event x motion type equals motion notify, that's the event type for motion events, here's where we'll do all the actual math, a lot of math to be done in here, so what first, well first we want to compute the angles, so going back to our little drawing here, we want to compute angles around u2 and u1, so we'll say theta u1 equals something, and what will it equal, well it will be some subtraction of where we are now from the x star, how much we've moved in the x direction, we will divide that by the height of the screen, so we'll say float h, or h is what we call the height of the the rendering window, and then we'll have to correlate that with some amount of degrees of rotation, so for me, I think I think we'll do 15 degrees, so 15.0 f and we'll just divide it by pi, so we can use tiny cosine, so how can you give this difference function, well in some ways we have before, we'll just say event dot, it means x motion dot x minus x star, this will give us theta 1 and then theta 2, all we have to do is change a few things, we'll change that y value, x value to y, this x value to y, and this h to a w, this will allow us to calculate the opthetas around the two axes that we need to calculate it around, that's pretty nice, now here comes the actual math, so let's open up this trajectory, let's take a look, so it's pretty simple, so here v is the initial vector, v-rot is the rotate diversion of that vector, and k is the vector you rotate around, so for us what we have to do is, say you want to rotate first around u2, what we have to do is rotate both u3 and u1 this many degrees, or this many radians around u2, so just to plug in this equation, I'll do it really quick and I'll get back to you, okay so I put in these functions here to rotate u3 around u2 by theta 2, as well as u1 around u2 by theta 2, I pretty much just copied this function here directly, I did define a value here called mag, which is the dot product of k and v, and for that we have to come up here and define mag outside the loop, and I realized I made a mistake over here, where is it? yeah here when I evaluate theta 1 and theta theta 2, I should be, theta u1 should be the y-distance and theta u2 should be the x-distance, so that's a mistake on my part, and then I've normalized everything using the same function as before, so u1, u3, and u2 we didn't change, u2 stays the same, right, u2 doesn't change when we spin around u2, now this should work, one more thing we have to do though is we have to actually define u1, u2, and u3 new out of the loop, because right now it's going to call u1, u1 new, u2 new, u3 new into the function, we can't have that, but we define this, so we'll say u1 new, zero equals u1, zero, and we'll copy that a couple times, I'll be right back, so it looks like this, so u1 new equals u1, u2 new equals u2, u3 new equals u3, setting it in the first place, so when we call it for the first time, it actually renders, so let's see if this works, now this should rotate around the u2 axis, if we move the mouse from left to right while clicking, and there you go, it does, obviously the vertical motion doesn't work yet, we'll get to that in a second, but we do have complete ability to spin our model around, that's pretty nice, let's go on to the second part, we're just rotating around u1, so if we do that, let's do a couple things, first let's get rid of this, we don't need to make these intermediate values here, but what we do need though is we have to set things as an intermediate result, so we want to define u1, I guess u2 and u3 as the pending types of the values, so we'll say, actually let's copy this, just change some of the variable names around, I'll do that and I'll get back to you, so it looks a little bit like this, so we have u1-pend equals u1-new, u3-pend equals u3-new, then u2-pend is just u2, we haven't changed u2 yet, but we'll do that in this, this time around, and actually it should be the same as before, they need the same functions, everything's exactly the same, but instead of it being around u2, it'll be around u1, so we'll say rotate u, I suppose u3 around u1 by theta u1, and then we'll go to rotating u2 around u1, doesn't matter really, but finally we'll pick this order, and actually all we have to do is we have to switch out 2 for 1, right, so up here we're doing u3 around u2, now we're doing u3 around u1, so 2 goes to 1, so I've got a 1, I've got a 1, I've got a 1, these ones all have become 1s, those one can stay 3, this becomes a 1, 1, 1, this becomes a 1, 1, 1, this becomes a 1, 1, 1, 1, 1, 1, all work, u1, u1, u1, that makes sense to me, however we have to change these values, instead of just being u1, u2, and u3, we have to make them actually say pen, so change them all to say pen, and I'll do that, and I'll be right back, okay, I've done that, so I've changed all the values to the pending version for this first set of equations, now I'll do the same thing for the second set of equations, so in this case we're just replacing, actually we're just swapping them around, so u1, u2 will just change places, I believe, yeah that makes sense to me, so this will say u1, but this will say u2, u2, so I'll finish this, and also I'll go back and I'll change the multiple pending versions, and I'll be right back, okay, I've done that, now we have to normalize once again, but instead of u1 and u3, it's actually going to be u2 and u3, and honestly this should just, I don't know, we'll see, this should just work with us, so let's make, let's run, I hope this works, yeah that works, so as you can see, now we can rotate our render with the mouse, and we can still zoom in and out, so scroll wheel in, let's zoom in, scroll wheel out, let's zoom out, and we can rotate the model, so that's pretty cool, now you can actually see how well we're able to project this onto the screen, it looks pretty nice to me, so the next video I'm not sure what we're going to do yet, I'll think of something cool, probably something about the geometry here, maybe like the face normals or something, or picking points on the on the screen, we'll see, I'll have a new video out in a few days on this, so anyway thanks for watching.


The show, it's me, JP, and it's time for JP's product pick of the week. You have arrived just on time. As usual, thank you everyone for showing up. I know we have some people over in our Discord as well as YouTube chat. Hello everyone, and thank you for stopping by. I'm not quite sure what's going on with some of the other streaming. It doesn't look like I'm not so sure if it's gone to Twitch or not. It seems like our restream just never started, and I don't know why I'm going to leave it be. But it does appear we are streaming here on YouTube, so that's great. Stop on by if you're wondering where, and speaking of which, if you're wondering where you can watch the show, not only is it on YouTube, but it's also right inside of the product page. So if you head on over to that, right there, that QR code or this URL, you will head into the product. Now, this is sort of an unusual one because there are multiple product pages where you can get the discount, and I think watched the video this week, which is a bit of an unusual circumstance, but it's because this is a multi-flavor, multi-color sort of thing. Before I say any more, though, what I'm going to do is have Lady Aida tell us all about this week's product pick, so please take it away, Lady Aida. Next up, and this is actually also the star of the show, we've revised our seven segment backpacks, they're the same size, the same pinouts, the same everything, except I kind of redid the back, I improved the design a little bit, and I made them a STEMI QT compatible, so if you want, you can use the old ones, that's fine, you want to use the new one. On the back are two STEMI QT connectors, and you can change them. Do you want me to show the product, yeah? Yeah, let's go to the overhead and I'll show it because it's a little more clear that way. Yeah, I want to show these photos. That's fine. The board, and then it's like it's stackied on with red, yellow, green, blue, so this is it with the matrix solder on, usually comes bare and you solder on whatever color you like, there you go, and you get the clock display with decimals and colon. It's still got the HT16K33, which is a really great low cost chip, I actually brought in the pads a little bit to make it easier to solder, there's a power LED which you can cut the trace if you don't want it, and then there's two vertical STEMI QT connectors, and so here we've got a demo of a QT pie board with the STEMI QT cable plugged into the back and it's just like running the demo and there's like, you know, we just plug and play it, so I do eventually want to get these pre-soldered like with the light box in them, for now they're still a kit, but I'm getting closer now that at least this says a little bit more space, it's easier to solder, and you can plug and play up to eight of them on one I squared C bus, because the address can be selected on the back, there's three jumpers to select up to eight different addresses, so the backpack, you know, and loves one of our early products, people really like this and it makes it really easy to add seven segment displays, and now you can plug and play them with STEMI QT. Yeah, that's it right there, let me get mine out of this little, look at that, right there, pull this one out, and I will tell you that this, right here, this is our product pick of the week, it is the 0.5 inch seven segment STEMI QT backpack for an LED display, this has four digits, and there are seven segment digits that also happen to have the little decimal points for each digit as well as the little colon separator, and this comes as a kit, so that's the board you get right there, it has that HT16K33 multiplexer there that deals with all of the pins of all these many many LEDs that are built into there, and then you get to talk to it right over STEMI QT, so it's I squared C and we still have the sort of normal I squared C breakout pins there if you want to put this on a breadboard or connect it some other way, but now we've got these great little STEMI QT connectors on here, so let's let's head over to the product page for a second, that is it right there, and I mentioned that this is an unusual one in that we have this discount and this video in a bunch of different pages, so if you go to one of them such as this product 880, this is for the green one, but that actually is a sort of a kit because it comes with both pieces, you get the LED and the the driver board, so if you head over to, let's go ahead and refresh this, it should be half price now, so that's the green one, you can head over to red, yellow, I think that's yellow, yeah, blue and white and they're all half off, they're slightly different prices for these, so you'll see some different prices for them, but it's now half off of whatever that price was, looks like some of these are selling out, but you can you can pick them up in whichever color you find there, let's see is the green available, oh my gosh these are going quick aren't they, oh is that not going to let me refresh, let's see let me do a forced refresh, all right looks like have they sold out already, I think we had 70 of them, so you may have bought them up quick, if you get one by the way and want a different color this is not soldered together, this is a kit like we said, so you can go and pick up just the bare seven segment in different colors and choose which ones you're going to use, you'll have to solder one of them on unless you come up with some clever socket sort of situation, the product page if you check it out here has a link to the learn guide, and that'll show you how you can use this and other matrix displays, but this one in particular, seven segment backpack in Arduino as well as circuit python, and you'll see you can do the i squared c wiring on the top there or plugged in over stem of qt, which is really convenient if you want to use this with something like a qt pi, which has that little stem of qt breakout on it, and then if you look at the coding for this, one of the things I really like about these displays is it's quite easy to write code for it with the drivers or rather with the library, you can do things like just scroll a whole word or a sentence or a series of letters, you can target individual characters, you can target individual segments, and so let me show you a little demo here that I have going, bring in my board there, switch to that display, let's write here and get that out of the way, so here you can see I have one, this is the red, and then I've put a little bit of a diffusing film, a filter or a gel over it, which just makes it look really nice, you then you don't get sort of that gray and white, it's really clear which ones are being lit, which is what you see in things like alarm clocks and other products, so here this is actually scrolling the IP address that this little stem or rather this little qt pi with its little antenna there are picking up on my router, and if I can get that glare and thumb print off of my plastic there, that looks better, so watch this, what I'm going to do is I'm going to reset, I'm going to go through a little demo mode here, so I'm resetting the board, and when it restarts it's going to go through sort of a little attract loop, so I flash all the lights on, off, run a little animation a few times, say IP address, and then I'll blink a little bit while I'm waiting for that to come up, and this is actually a routine, this blink routine is built right into the library as well, so now once it grabs that address it kind of scoots that other, so the character's off there and just starts running my address on here, so if you take a look at the code for this, let's switch over here to coding view, what's going on, I'm importing some wi-fi stuff so that that's what I display, but then the key thing is from Adafruit HT 16k 33 dot segments import SEG 7 by 4, so this is seven segment displays, four of them for the four digits, and we have a few different versions of those you can bring in depending on what type of matrix you have, and then I'm bringing this in over I squared C with the address 70, but you can change this little jumper, if you look here on the bottom, we've got some little jumpers there that you can solder, and then that'll allow you to get up to eight of these on one I squared C bus, so that's 32 characters that you could have, you don't have to put them all on end, you could stack them, you can do your time machine for your DeLorean display like that, I think there's a great guide that Phil Burgess did a few years ago, so you could look at that as a sort of possible reworking, then I'm setting the display brightness, kind of dim here, this thing goes pretty darn bright, I fill the display, so display dot fill that just lights every led, I wait a second and then I turn them all off with fill at zero, this is my little animation thing, so if we rerun this you'll see I've got some individual segments that I'm looping through, some I couldn't loop as neatly as others because they have different names, oh that goes by so fast that it's a little stuttery I think, let me try that again, it might just be my view of my, is it smooth or is it too fast, oh yeah smooth, okay it looks good, I get fooled by my broadcast software, so then I'm going in and setting the word IP and that one I'm using some raw digits with this little bit mask that just says G is the dot, H is the, I think the middle line, G and going, or HG going backwards through to A, you can you can light up any of those segments, address I could almost type that but we don't have an R in our library, so I used ADD and then a little lowercase R, I just set two segments, then I blink, set a blink rate of three which I think is the fastest blink rate, turn the colon on so that's its own little thing and I'm printing these dashes, so that's when you see it get to that after it says IP address, it will then sort of blink this little set of characters here, watch that, IP address and then blink, blink and since I set that in blink mode, I don't have to deal with any timing stuff so my code is free to go forward and try to connect to Wi-Fi which is what happens next, it grabs my Wi-Fi SSID and password, sets the connection here, prints out what it's doing to the serial port down here at the bottom and reset that back to it, you should see some output there when it when it does connect, it'll say connecting to Wi-Fi and now it's connected, prints out the IP address there and then it starts scrolling it, neat thing you'll see here is for that scrolling, all I'm using is this one line, display dot marquee so that's our scroll, sort of automatic scroll, the IP address which I set up here to be whatever the Wi-Fi radio IP address plus some blank characters so that it would kind of scoot all the way off the screen before it loops back around, I'm setting a rate for that so 33.33 rather and then true is that it's going to loop continuously, so you'll see I don't actually have a while true loop this is actually where my program is ended but that library allows that to keep scrolling over and over, so that is a look at how simple it is to code this inside a circuit python and you can, like I said, sorry I know that we sold out rather quickly on those, you can put in a little notify me and you'll find out when they're back in stock, it'll be full price at that point but they're actually right around nine ten dollars for them under the normal normal pricing so you can you can find out when those are available and I think that's going to do it so let me know over in the discord or youtube if anyone has questions, ah can it do hex okay yeah let's take a little closer look the guide is really good on this one so if we take a look at the learn guide for this you'll see here are the different ways that you can communicate with it so you can print straight up text I'm gonna zoom this in a little bit if it'll let me oh yeah now it went to like mobile size that should be good so printing text you just put it in quotes and it'll print out text if it doesn't have a letter like you saw I didn't have an R it just puts a blank in there you can print out numbers you can print out hex values you can set individual characters so here you can see I think it's right to left zero one two and three so we tell tell each of them what to print and then we get down to that sort of lowest level of individual segments and there you can see that decimal point is an H and that's the first digit in that bit mask there so zero B one zero zero zero zero zero would just print the dot and then it works its way through the through those segments and there's a few different ways that you can tell it what raw segments you want to light up and then there's this fill that I showed there's manual scrolling so you can tell it to move a certain number of spaces here's displaying the colon and then lastly I used this automatic scrolling marquee and then rather than me hard coding it my value there is just based on whatever IP address I picked up when I when my device connected there see that there this is it without the filter by the way it's not not bad but boy these look nice when you put a little gel over this happens to be a purple gel just because I have some purple gel around here but I think generally a sympathetic color to what you're trying to show through will work well uh so I think that's gonna do it thanks everyone for stopping by uh that is the product pick of the day it is the four digit seven segment backpack with stem aqt thank you everybody for stopping by for JP's product pick of the week I'm JP and I will see you next time bye bye