Hi everyone, Joe for jaspyscasebreaks.com coming at you with 2023 hit parade baseball edition. It's a jaspy exclusive Yeah, we worked with hit parade on this six box Random team break number five from jaspyscasebreaks.com each box has a hit trade at your own risk Some of these have been pulled already and we only have five more cases left ladies and gentlemen So check it out jaspyscasebreaks.com, but for this one big thanks to this group for making it happen I appreciate it whether you bought full spots or whether you got your spots in the filler either way. I appreciate it. Thank you All 30 teams are in let's roll it. Let's randomize it three and a three six the hard way one two three four five and six Brian down to Brian three and a three six the hard way for the teams two three four five and Six All right, Brian with the pirate Scott with the Mets Danny with the Cubs Brian with the Diamondbacks Rangers Phillies and Marlins Nicole with the rays Harry with the Cardinals Gabe with the A's Brian with the Giants Petra with the Red Sox Jason with the Reds David with the Angels Tristan with the twins Danny with the Tigers Tristan with the Astros Ivan with the Royals Brian with the Orioles Rockies and Braves Mickey with the Yankees David with the Padres Tristan You got my Dodgers Andy with the Mariners Juan with the Guardians Brian with the Nats and the Brew Crew Andy with the Jays and Brian with the shy socks All right, so let's alphabetize by team. We're in a pause video. But remember trade at your own risk be right back All right. Welcome back ladies and gentlemen. No deals are done Although there was a little bit of trade chatter here on Wednesday the 10th big Thanks everyone here for making it happen is the case A Jaspie exclusive thanks to hip-rate. All right. Good luck everybody Yeah, Gary Payton To go and go with the Roman numeral not junior There's a reason for that from Gary Payton the first I guess. Oh nice Manny Machado majestic Relic and autograph two out of five From Bowman inception baseball 2016 Bowman inception baseball Orioles edition Brian out of fives and I'm gonna get the train whistle All aboard the Big Hit Express Nice start. I think he is the second version Jilo What about the third? Do you think it should be junior junior? All right next up is Is Ronald Acuna junior from Bowman's best baseball? Nice And it's gonna that's gonna go to Brian T B snip and the Bravo's Nice. We got a graded card this time PSA PSA 10 and it's wow Shohei Otani from 2022 tops cosmic blue moon refractor 33 out of 99 and a PSA 10 for the halos. That's gonna be for David Harry looking for that poohol's we already pulled that poohol's car. That's on the cell sheet. I'm almost certain But there could be others So me standing We got a dual auto here boys and girls And they're both red socks David Ortiz big poppy Two-color patch and autograph and then we got a Raphael Devers jersey and I look like a bit of infield dirt right there So for the disc this coloration that is game use memorabilia nice dual relic and dual auto from 2020 definitive collection baseball Boston that's for Petra and the Red Sox. All right another one another graded card Looks like we got a PSA nine This is I think this is a cell sheet hit You can see that Ginter card right there right on the top camera Yeah, it is It's a Bryce Harper Codebreaker Bryce Harper on mini-card autograph one of one From 2015 tops Alan and Ginter PSA nine That's who Danny was trying to trade for But Brian ended up standing Pat That's from 2015 Is that his rookie or is around there somewhere right I Think you would have a rookie card logo, but maybe not maybe it's I'm a year off Anyway, still nice PSA nine one-of-one Bryce Harper autograph national edition B snip All aboard the big hit express Nice and we still got one more to go ladies and gentlemen And we've got another case in the store Jaspies case breaks.com go and check it out Planning on some full spots I think 12 full spots and a couple fillers so plan for that Chip away at it Let's get another one done. All right final one is a gold frame autograph and It is a one-of-one Jonathan India autograph She smelled like turpentine and looked like India ink.  I took a sip. That's from 2022 and that's where Jason K We're on Cincinnati And all aboard the big hit express There you go gang, I'm Joe for Jaspies case breaks calm. Thanks for watching. Thanks for breaking with us I will see you next time for the next hip parade at Jaspie collab a break We got basketball edition as well. We got hockey edition. There's only four cases of hockey and then we got The baseball right here so we can run that back tonight Jaspies case breaks calm. I'm Joe. Thanks for watching. I'll see you next time


Thank you. Hi, my name is Dimitri. I'm working with the foundation for about three years and For a long time a serum testing was performed by one person Kristoff Jenj He initially invited me to the Ethereum foundation and then I continued his work So today I will describe you for you how the testing process goes in the serum and What we achieved for the last year science Shanghai So what we have is a yellow paper, which is a protocol Yellow paper describes the serum protocol what it doesn't make it easier to understand Actually, this picture represents yellow paper really well Nobody able to understand this unless we thought it may be and We have lots of implementation of this protocol written on different languages different clients and The testing problem is to make sure that every of their client is in consensus with each other and they Interpret they implemented this yellow paper rules In a way that there are no consensus issue between themselves, so to do that we have our testing sued Each test file is a Jason Instructions and coded in Jason file and We could select three main times of the test so first one is a VM test is basically Number of instruction for EVM by machine It's the most simple test in the whole test here. So if if there is any developers here you could If and if you're implementing EVM you could start with VM test is the most simple ones The next is a state test. It's a bit more complex and VM test. It has Accounts transactions and state changes state hashes and so it's a bit more complex and the most Sophisticated test is a blockchain. It has actual mining difficulty and other algorithms implemented Well and for a long time we required all the clients to implement Custom test tool so they had to read this Jason files and implement this and compare the results It was not so So good So we use a C++ client to run Test source which is my job is to keep those sources from test sources updated with the most recent issues discovered and What we are trying to achieve is to create lots of lots of different test source files describing all of the possible situation which we could Get in a EVM code execution and then C++ client execute those Instructions and it creates a final test final test is being processed by other clients and They compare their results to the C++ clients And that's how we see if everyone agrees with C++ client, which is a like a golden starter If there is an issue we open a dispute and discuss whether we have to make a change in the C++ client or other clients So we had a couple of problems The first problem is to create an ultimate test suit which covers all of the code or all of the possible situations Which we could run and possibly find all of the bugs and consensus issues The second problem is that Clients they should execute our tests and because before we are required to make their clients this custom tool I Had to manually ask every client developer.  Have you updated the test repository? Is it updated and one time I discovered that go client wasn't Running the recent test for about half of one year and there was a there was a hard fork already And they still not get notification up with the tests Not to mention that I don't know the status of other clients Okay So how we solve those issues To get the best code coverage first we have test cases list which could be found on Google documents This is a manual test cases if you came up with an idea for test case you could manually add this to this Also, I want to mention if you think you know how to make a consensus issue There's a reward for bug bounty from the foundation if you discover a consensus issue You could get money Okay, and So to cover even more cases you can you can possibly come up with every situation, but I think it's impossible. So we did some Tools that basically run a random code random even bite code on not really random like fast testing is Smart random code and this code hope we hope that it will find some consensus ratio and it did another approach will be to use a fancy tool that you'll analyze a source of a client and then run different bite code executions and Maybe some fancy algorithms and we'll produce a Very very good tests Okay to solve the next issue with the clients being updated last year I mentioned that we have a Hive tool in development and Now it's life and working now we no longer require every client to implement their custom test tool they just need to provide a client and an RPC interface and Then any client could be integrated in a hive tool and this hive to perform a test execution Automatically and we have results you could see on a hive stats page There is also also this execution on every client also clients have a continuous integration builds in a github each commits Executes this continuous integration test in a github which synced with our test repo is theorem tests and I still personally do Ask people on a skype or the channels versus a perform the most recent test executions And as our field of work which was performed by Casey He did standardization of Evian logs and by doing this we could now compare that not only we have the same hash after the test execution But the way we get to that hash is exactly the same on every client And for the past year we added some debugging for the test it still which I'm a developer of and This is basically a whole new field of work with those traces for them and better debugging Okay, and another update for the for this year will be my personal fork coverage by fork I mean Is there who has certain hard fork points like home stand and other proposals which We actually don't have a consensus about naming those folks. I called it like EAP 158 and others called some kind superiors dragons and Those points means that from this particular block The protocol has changed and we have to test that all the changes and all of the clients Implemented correctly But we have a test cases and there I Had many a lead to copy all of the test cases for each hard fork and Then I came up with an idea of a general test format So now I describe one single test case and then C++ convert this test and execute it on every fork and produces a couple of Output final tests which actually a Result of this particular test cases on every fork that that is what I call general tests and for the past year I realized State tests which is now general every state test being executed on every fork and in future All of the test cases that we have will be executed We I just have to run one comment and all the test cases will be Generated on the recent forks Same with blockchain tests and next will be the transaction test Also, thanks to Yoichi he did the awesome Documentation about how he learned because he has joined us this year He created a documentation of his steps when he Was learning the process of test generator Generating the test and then he created this documentation if you interested in Running the test execution yourself or if you're a developer and you need to know how this works There's now a updated documentation You could take the picture of the links and You could see that now our testing team is not a single person We have like lots of people joining and most of them joined us this year So special thanks to all of them working together on tests. Okay We still have time for questions Okay Yeah, not all of the tests are running on a hive unfortunately So general state tests are being converted in a blockchain test. This is another update So I just run a common and all of the general status being converted blockchain tests Which then will be run on hive. Okay. Thanks to me tree You


2nd week of this course. In this week, we will learn about cleaner production process, we will learn about the sustainability tools, few sustainability tools in each category of these tools. So, I will tell you in brief what are the different kind of tools that is available in the sustainability domain, few of them are for management, few of them are for assessment and few of them are for reporting. So, we will try to cover at least one tool from each kind of this sustainability tools. But before getting into the sustainability tools, let us understand what is cleaner production process. So, in this session, we will try to see, try to explore what is cleaner production, what are the different ways of the cleaner production options. Now, before again getting into this cleaner production, the basic question what the businesses they face or the agenda, what the businesses they have is that, how do they incorporate the principle of sustainability into everyday business activity. So, since last week, we are trying to justify that why they consider this as important and why should they do this. Now, since we are talking about tools, since we are we have started talking about the intervention in their business because of the sustainability, we will see or the agenda for the businesses is that, how do they incorporate the principle of sustainability into everyday business activity. So, here this is a this is given by Baruch Tendvan and through their article on corporate responsibility and UNEP experience, here they have listed down what are the steps to display this environmental responsibility. So, the first thing is when it comes to step, when it comes to that what is the first action point or what the first agenda, what the company they should do to display or to do the environmental responsibility. First thing is that they need to redefine their vision, policy and strategy and how do they redefine, they have to include their triple bottom line of the sustainable development in their vision, in their policy and their strategy. So, first thing is that they have to redefine companies vision, policies and strategy. Then the second point is that or the second step is to develop the sustainability targets and indicators and this targets would be in the domain of economic sustainability, environmental sustainability and social sustainability and once they decide the targets, they will next work on the indicators that how to achieve whatever the targets they have given for all these three domain. Then establish a sustainable production and consumption program with clear performance objective, what they want to do for sustainable consumption, what they want to do for the sustainable production. And because of this since they are talking about also sustainable consumption beyond the sustainable production, this is typically a long term and in the long run when the responsibility becomes the environmental responsibility for the company becomes mandatory beyond the boundary of their firms, the sustainable consumption program will help them to achieve the compliance in the long term. Then since you are talking about boundary of the firms, this is also another step to work with the supplier to improve the environmental performance. So, extending responsibility up to product chain, down the supply chain, how do you source the raw material typically through the supplier. So, beyond the boundary or when they receive the raw materials inputs for their production process, they can still display the environmental responsibility when they are sourcing it and at that point of time they can work with the supplier to improve the environmental performance. So, when we talk about the supply chain, we will see that how company they have extended their responsibility into the different loop of the supply chain that includes also the supplier of the raw materials. Then going further they need to adopt the voluntary charters, course of conducts, course of practice both in the sectoral level and also in the global level. And by doing this it will be confirmed that they have acceptable behavior and performance in the sustainability, whatever the agenda or sustainability responsibility. And whatever they are doing, whether they are redefining their policy redefining strategy, whether they are developing the indicator, developing the targets, whether they are working for all loop of the supply chain or developing a code of conduct at the end how they are actually doing the environmental responsibility that can be done through major track and communicate the progress. So, this measure the measurement, tracking and communicating progress how it needs to be done in incorporating sustainable principle into the business practices includes the reporting of the performance against the global operating standards and also ensure the transparency and unbiased dialogue with the stakeholders. Now these are the key tools typically the businesses they use for different activities or the different intervention for the sustainability. And these tools are divided into three types, one, one category of tools which comes under assessment and audit tools. And what this category of tools they do, typically they do the impact assessment, they do the technology assessment and also they do the life cycle assessment which measures the environmental impact across the value chain of the product. Then the management tool where typically the environmental management system which is also the standard in term of ISO and also the design for environment where the environment consideration is incorporated during design of the product, those comes under the management tools. And the last tools that this reporting and the communication tools typically this deals with the corporate environmental reporting and the sustainability reporting and in each kind of the tools you will find few of them are mandatory and few of them are the voluntary in the different economic context. Now this tools we will discuss little later, but before that we will understand what is the cleaner production strategy. So, this is beautifully summarized in UN, you will find that in one of the report of the UN that what are the different environmental strategy that is taken by the forms. So, you will find either you put them into passive, you put them into reactive and or depends again the even if you are doing a recycling that also comes under the reactive. So, what is the example of a passive one? You dilute and disperse. Then few of the company they do the end of pipe approach which is again reactive because why they go for end of pipe approach because they realize that this is where the somehow the so called waste or the so called impact is going outside the forms. And also there are some on-site recycling happen which is also coming under the reactive. So, most of the company you will find at least if you go back to the history their environmental strategy is passive or reactive. But what cleaner production process says that you have to or the businesses have to show a proactive environmental strategy. And whenever there is a proactive environmental strategy that leads to the cleaner production process or the production process become cleaner. Now, what are the proactive environmental strategy? Few of them are listed here that is prevention of waste generation by doing a good housekeeping, by doing input substitution, better process control, equipment or the technology modification, on-site recovery and reuse, production of useful by-product and product modification. So, cleaner production the context to cleaner production is that there has to be proactive environmental strategy then only the whatever the waste generation or whatever the impact is created beyond the beyond the forms or whatever the to the environment that become that can be controlled. Now, what is cleaner production? Here in fact, if you want to highlight possibly two things needed to be highlight in case of cleaner production. One there is continuous application it is not one time and second it is a integrated preventive environmental strategy. So, continuous application of integrated preventive environmental strategy to the processes, to the product and to the services. And why do it is needed or why do we do that? Because by doing this there is a increase in the eco-efficiency and reduce the risk to human and the environment. So, we learn more about eco-efficiency when you talk about strategy, but for the time being the understanding of eco-efficiency is that when we are able to deliver the goods and services, better quality goods and services with less of impact to the environment typically that this is known as a eco-efficiency strategy. So, cleaner production is the continuous application of integrative preventive strategy to process, to product, to services because at the end we want to increase the eco-efficiency and also risk to the human and environment. Now, how do we do this? At least few of them or few of the strategy is in the production process should the way the action or the way the intervention should happen because of cleaner production is that conserving the raw material and the energy. So, the way we use materials and energy in the production process, how do we conserve or how do we use less of them? Eliminating toxic raw materials whatever toxic whatever hazardous we need to take it out and reducing the quantity of toxicity in all emission waste at source rather than looking at the end of pipe, how to reduce the quantity of toxicity of emission of all emission and waste at the source. Now, how this is being done in product? We reduce the negative impact along the entire life cycle of the product from the design of the product to the end of life disposal. So, in case of product cleaner production aims to reduce the negative impact across the product life cycle and services mostly looking at the after the product is being produced into with respect to distribution to the reaching to the consumer, incorporating the environmental concern into designing and delivering services. The typical example is that how do we package our goods when we send it to the consumer and typically whether environmental concern is whether we can address the environmental concern over there or not because production process and product mostly talking about what would be the and how do we incorporate the environmental concern in the process, product starting from the design to the disposal and also the services associated with the product. Now, this is what is the cleaner production. So, cleaner production is a as we discussed in the last slide preventive integrative continuous strategy for modifying product, process and services to enhance the efficiency which improves the environmental performance reduced cost at the end of it what the businesses they get is that competitive advantage.  So, this talks about only till 2000 because this is the time when we got into the cleaner production process there is lot more improvement, lot more development after that. So, 1960 that point of time there is a emergence of or the awareness or the need of that we should think of sustainable product or there is a need of the sustainable product. 1967 is the businesses they started getting into end of 5 it is more into cleaning zone of it. 1980 pollution prevention it is more cleaner and between 19 or let us say 2000 we got into the era of sustainable production and consumption. So, if you look at it is not that one fine day or it is because of one particular event there is a cleaner production somehow this cleaner thing is being addressed from 1960 when we are till the time we are talking about cleaner production process as the integrative preventive strategy moving from awareness to cleaning to cleaner and finally to the clean one. Now, these are the types of cleaner production options. The first is housekeeping, improvement to the work practices, proper maintenance and typically if you look get into this cleaner production option there is a significant benefit, but the cost associated with this options is low. Then the second cleaner production option is process optimization where we reduce the resource consumption by optimizing the existing processes and what is the cost involved over here? The cost involved over here is that typically low to medium cost. Why it is medium cost? Because we need to optimize the process so that we use less of the resources. Then the third type of cleaner production option is raw materials substitution. So, where we replace the hazardous material with more environmental friendly material and this requires change to process requirement process equipment. So, we need to change the process equipment and by doing this we can get into the cleaner production options and typically the cost associated with this is medium to high. Then the next type of cleaner production option is new technology and by adopting new technology this is known that we can reduce the resource consumption because we are using a advanced technology. We can minimize the waste generation through the improved operating efficiency, but this option is highly capital intensive and also it may require more of cost, but the payback period is typically short in this case of the cleaner production options. Then the next cleaner production option is new product design. Typically this cannot happen over time over a day or overnight. It is a long term strategy, it requires the new production equipment and also the marketing effort. And here also if you look at it may be capital intensive, but the payback what we get from such product if the market does this if the product does well in the market it ultimately the whatever the payback we get it ultimately very rewarding. Now, when we compare between cleaner production and end up pipe approach there is end up pipe approach also at some point of time by the businesses in order to address this concern, but cleaner production is more integrative. Let us see what is the difference between the cleaner production and the pollution control and waste management. So, the first difference is that cleaner production gives a continuous improvement where as pollution control and waste management is just one time solution to the individual problem. And cleaner production through the strategy of incorporating environmental concern in product process it progressed toward a closed loop. It means whatever is being taken out of the loop that is through the production process in this case in case of cleaner production options we try to bring back all this whatever the waste product bringing back into the loop again production loop by recycling and reusing. But typically in case of pollution control and waste management options we find that there is always waste for the disposal there is some amount of the waste that is coming out of the disposal. And you will find in the end up pipe even if you do end up pipe treatment some of the disposal is still which need to be disposed. In case of pollution control and waste management the solution is developed by the expert and mostly by the individual expert or by the technology expert. But in case of cleaner production there is a community involvement or there is a involvement of the stakeholders in case of the cleaner production. In case of cleaner production the elimination happened at the source. So, whatever the toxicity associated with raw material with the energy or of the emission or the waste whatever is there it is being tried to eliminate at the source. But typically when it comes to pollution control and waste management the treatment happened with respect to a specific using a specific equipment or with respect to a specific method. Then in case of cleaner production we adopt new technology practice and attitude like the typical example is that if there is stop management attitude is not towards the cleaner production it is difficult to adopt the cleaner productions options. And if you look at in case of pollution control and waste management it is mostly about the improvement that is being done with the existing technology not with the all the technology or the practice or the attitude. So, this is more like making the effort or making the intervention with respect to one of the specific technology one of the specific equipment or doing a technical improvement of the existing technology. One of the basic differences what is not being listed over here is that typically you will find that there is a active participation in case of the cleaner production. However, when it comes to pollution control waste management or end of pipe approach you will not find the entire process or the entire each intervention there is a active participation you will find it is only with respect to equipment or only with respect to technology there is a not exactly passive but not so active improvement or there is no so active involvement in this case. Now, what are the barrier for this cleaner production options? So, this is being categorized by two types one are one is internal barrier and second one is the external barrier. The first barrier which comes under internal is that there is lack of awareness information and know how. So, you will find that in most of the cases possibly the company possibly the business they are having no awareness or even if they are having awareness it is low and what actually it is going to give by doing this the benefit associated with this why should they do this and the information to do this and also the know how the processes the technology needed for this that is not available. So, typically that comes under the internal barrier. Second one is also I was discussing in the previous slide this that about the we need to change the attitude also it is not about only changing the technology or implementing the technology is bringing the cleaner production options. It also needs the change with the attitude and in most of the cases one of the barrier that comes is that there is a inertia of employee and management. So, with respect to any change there is a inertia with respect to employee and management and that is why they find that this is one of the barrier when it comes to the cleaner production option. The third factor or third barrier is there is lack of priority because typically when it comes to business possibly they see that what is the certain profit what is the benefit associated with this and in case of cleaner production options as we discussed in case of different option also in few cases possibly the payback period is only payback period is short, but in few cases the payback period is long and when the payback period is long that is not coming to the priority list of the businesses or priority list of the company and the bigger barrier which comes from the internal sources that this cleaner production options as we discussed few of them are having a low cost implication, few of them are having a medium cost implication and few of them are capital intensive. So, in this case there is also a need of cost there is also a need of finance from internally which sometimes not available or most of the time not available in the regular basis to the company which creates as a barrier. When it comes to external barrier of the cleaner production options mostly this is with respect to two things. One why do the company go for cleaner production options? One if they find that there are technology there are finances available to adopt the cleaner production options. Second there is a regulation which is driving them to go for the cleaner production options. So, the in case of external barrier these two points typically comes. One there is lack of technology and finance or the availability of technology is finance that decides whether they should go for a cleaner production option or that poses as a barrier to the cleaner production option. And second there is a lack of stringent and the efficient regulation. If there is no stringent or efficient regulation then businesses always even if they see that there is a benefit associated with this they try to push it for further and say that possible this is not now at a later point of time they are going to get the cleaner production option they are trying to adopt a cleaner production options. But if there is a stringent and efficient regulation and if it is not now maybe in next two years three years possibly they feel that yes this is the time they need to do it and they go for it. So, when it comes to external barrier the lack of availability of technology and finance and lack of stringent and efficient regulation that creates the barrier. Now, what are the motivators and drivers? So, there is a internal again internal cluster we have external cluster. So, the motivator when it comes to motivators and drivers the first one which comes internally is that there is a improvement in the productivity. The there is a standards what they need to follow that is EMS environmental management standard there is a need of the continuous improvement. Then also the environmental leadership of the if they are doing it then the environmental leadership becomes the part of the business part of their company and in the market space they can show that they are the leader because they are the one who have adopted the cleaner production. Then the also because of this cleaner production there is a benefit which is associated with the performance and the communication. So, internally the drivers and motivators for cleaner production option is that it improves the productivity it provides a environmental leadership in the market there is a this is a implication with respect to the corporate performance and also how do they communicate about their performance in the market. And also by doing this they can have a continuous improvement and also they can get a certification of the EMS that is environmental management standard. When it comes to external drivers the major points possibly what we are discussing from the beginning is that the driver is changing regulation if the regulation is moving towards adopting cleaner production or the stringent regulation that is what the drivers are the motivators for cleaner production option. The development in the innovation and technology motivates the company to take the cleaner production options. If the loans, sub clones are available in the market or the finances available in the market what the company or the business they can afford to that creates as a driver then there is a economic incentive because you get some subsidies because you are going for a cleaner production options you get the incentive in the other form tangible and intangible from the regulator from the government that becomes the driver for the company to the adopt the cleaner production option. And finally, if the stakeholder creating a pressure or the stakeholders is helping out in adopting the cleaner production options that goes as a driver for the company to adopt the cleaner production option. So, this is how the changes happening both if you look at this graph shows that how cleaner production and sustainable development over a period of time how the journey have been. So, if you look at there are two agenda over here one is government agenda second one is the business agenda. So, over a period of time when the business agenda was just about environment and health auditing now they have moved into the getting into environmental management standard and when it is coming to the government agenda they are moving to the environmental space through their economic instrument through their co-regulatory agreement and through the command and control approach they are trying to control the business that how this they how the so called sustainable development can be achieved through all this intervention. And what are the what are the options or what are the intervention those are being done from the business side there is compliance there is cleaner production there is eco efficiency and there is responsible entrepreneurship. So, in if you look at over a period of time the agenda is getting added and with each agenda we are inching towards we are inching more towards the sustainable development. So, in this session what we have tried to understand is what are the environmental responsibility of businesses and how they incorporate into their day to day businesses mostly through these three tools that is tools associated with impact tools associated with management tools associated with report reporting. And then we have learned what is cleaner production process how it is different from the end of pipe approach and what are the different options available for the firms with respect to cleaner production process options. Thank you.


Yeah. So this talk is about cargo deny, which is a tool that we have made to help us manage our dependencies. So we're going to talk a little about the situation and why we made this tool, and what the idea of it is, and then go through what it currently offers and possible future support. A little bit about me. I've been in game development for about 13 years. Bennett's smaller companies, larger companies, and now very small companies. Right now I'm at Embark. We're a game development studio, and we're running an engine and platform in Rust, as well as other stuff, not in Rust. So yeah, so here's the situation about why we created the tool, and it is totally our fault. So give a context of where most of us are coming from. We've been in game dev for quite a while, and generally game development is in large monorapository style code bases, and it's basically very few external dependencies, and all the external dependencies that you do have are rendered typically into the code base, where they rot. Basically, as a consequence of vendoring there's extremely little interaction with game development in general and open-source software. So even though some software is used, like a typical example would be Zlib or other compression libraries. Like they get pulled down, they get vendored, and basically that's it. There's no more interaction, there's no bug reports, there's no PRs, there's no, hey, could you add this feature? That's important to us. Usually it's added internally, never shared with anyone else. And this would be what I would call classical game dev. Not everyone operates this way, but this is the modus operandi. And so if you turn to the Rust ecosystem, the Rust ecosystem is basically complete and the other opposite of this, right? Pretty much everything is shared and public, and if it's not public at the beginning, it eventually becomes public, or at least people can talk openly about what they're working on, even if it's not actual public code. And obviously everyone knows it's quite large. I think this screenshot was taken two days ago or something. And yeah, there's a huge, but being a huge package, well, not compared to MPM, but a large package repository with a lot of crates, there's a huge number of axes that have different levels of quality and commitment from maintainers. And yeah, there's just a huge amount of options available across the ecosystem. So going back to game development, like when we started the company, like obviously most game development is done in C++. So going to Rust was a big kind of thing that we wanted to do. And obviously one of the motivating factors for this was using this amazing crate ecosystem. So we use quite a lot of external dependencies on our main primary project right now, about 400 plus. And we tend to keep all of them up to date. We kind of tend to live ahead. We update sometimes several times a day, sometimes, but typically on a weekly cadence. And we actually have never rendered any dependencies. We always fork, use a patch to get repository until our PR is merged, and then return back to the original project. And so we're kind of working quite differently from how we used to work. So yeah, so the problem that comes with this, the created ecosystem is moving quite quickly. We're updating quite frequently. And you can't just look at the cargo lock file or cargo tree or license hound or all of the kind of stuff all the time is just extremely tedious. And while cargo gives some tools, it doesn't actually give you a complete picture of the crates because it doesn't really have that capability because people have different use cases and different requirements. And it's kind of up to you. And basically, we have this cadence now of updating quite frequently. And the Rust ecosystem is obviously moving quite fast and moving faster in terms of new crates. And some crates get updated multiple times a day. And we basically want to keep this cadence for now. Maybe we'll change it in the future. But for now we want to be updating quickly and fastly, getting new features, fixing bugs, all that kind of stuff. So that's where cargo deny comes in. So basically our kind of high concept of the tool is that it's a linter for your crate graph. So the idea is to kind of treat your crate graph as a code and basically do what Clippy does, which is look for things that you've configured for and warn you or error and basically make sure that as your crate graph changes, your expectations are met every time. And so what we're checking for currently are licenses, bands, or basically saying I don't want particular crate or crates in my dependency graph, duplicate versions of crates, security advisories, and sources of your crates. Licenses, so yeah, we just had a little bit of information about licenses. So kind of, again, going over this crates usually specify their license terms and the cargo metadata. And this is kind of pretty typical one, MIT or Apache 2.  But you have to manually inspect that because cargo doesn't care about it. And so basically the question we wanna ask is are all the crates that we're using, using licenses that we find acceptable and then making sure that that holds true over time. So if we add new crates, it has licenses that we find acceptable and then it's also possible for crates to change licenses when they make a version change, sometimes even in patch versions. And so basically this is a short snippet of a configuration that you could have. So basically say you can configure what happens with unlicensed crates, crates that have copy left, and then a set of licenses that you explicitly allow as well as kind of exceptions for cases where you maybe don't wanna blank it or allow a particular license across all the crates possible, but on a particular crate. And then you can have other things like FSF-free or OSI-approved as well. Basically what it does is evaluates the SPDX expression that's gathered from the crate. And so in this case, because we explicitly allow both MIT and Apache 2, it evaluates to true because both sides of the expression are true. And this works for basically all SPDX expressions including ones that actually aren't representable in cargo because they're parsing in cargo for the license field is actually not correct. And so as we saw earlier, there are some caveats to this. Right now there's only kind of two sources of input, which is the license field itself as well as any license files that are in the crate route. And so we basically scan the license files to determine the license that it's in the file.  But in practice, that's not really accurate because especially for C dependencies, people tend to include C code into the rest crate, link it in with everything else and then kind of completely ignore that the C dependency has a completely different license than the rest of the crate. And yeah, so we have another tool called cargo about which is about kind of doing a similar thing to the notice thing that we heard about earlier. But the basic idea is that it does do full source code scanning of everything and then finds all licenses and make sure as they comply with what the crate says and then otherwise it'll force you to specify the licenses that you found and what the expression is for the crate as a whole. But yeah, cargo denies job is to do that very, very quickly so this takes a millisecond or so. So yeah, there are crates that we don't want. And this is totally fine. Not all crates match the requirements that you have for your project and there's a lot of crates that have different philosophies about how they update or what features they provide versus other crates that kind of operate in the same niche. And so sometimes we find them and we say, yeah, we don't want this and we wanna keep it out for all time. So a particular example that was kind of the motivating reason for creating this tool in the first place was OpenSSL. We despise OpenSSL and unfortunately, basically any time you do TLS and the Rust ecosystem, it's almost always the case that OpenSSL is the default implementation for that, even if they provide a feature to use, for example, RustSSL or something. And kind of the reason that we find this annoying is it does have system dependencies. So if you have different systems, they have different versions of OpenSSL and then particularly for Windows, we have some Windows users who aren't necessarily programmers and it's another dependency that they have to install and keep up to date and it's just tedious. So we have, yeah, this is a very simple example. The reason it's doing the name is you can also have, specify particular versions that you deny instead of just the all versions of the crate. And we do like a quick change here. So that's request and we just turn off on default features by deleting the default features faults and by default request uses OpenSSL and we see that there's an error now. And then basically every time cargo deny finds anything wrong and it puts a warning error that pertains to a particular crate, it's optionally will produce the inverse dependency graph, basically how the crate gets pulled into your crate graph. So the next check would be duplicates, which is a kind of interesting case in Rust. So if you're not aware, dependency resolution is hard and it's actually an MP hard problem. And so some package managers will say you can only have one version of a particular dependency in your project and if you have conflicting versions, you have to figure out how to manually go down to one version. Cargo however does not, it introduces a trade off. So here's a really simple case. So we have a year's crate that depends on both theirs, some other crate as well as log and then the theirs crate also depends on log, but fortunately they both resolve to the same version and so everything's fine, right? You just have one version of log and everything is great. The much more common case in the Rust ecosystem is that you depend on one version of log, you have another dependency has a different version of log and so in this case, like in the classical dependency resolution, this is unsatisfiable and like you have to choose one or the other and you have to somehow get them to both work. But cargo just says why not both and this is great. By saying we can have multiple versions of the same dependency, you can automatically kind of resolve dependencies quite easily and also fast. This is kind of one of the great kind of introductions to Rust like when you're coming especially from like C++ or something and you're adding dependencies and getting functionality and everything just works and it's kind of magical. And it also allows most importantly for the ecosystem as a whole to evolve at differing paces, right? So one crate can decide I wanna use this bleeding edge version of some crate and then the rest of the ecosystem is saying, okay, well actually that one's kind of risky. Maybe I'll wait until it's kind of stabilized or something but they can both use that and you can use all the crates that use any of the versions and it's totally fine. The cons of course are not great. So if you have more versions of more crates, then you download more to compile and then if you compile more, you link more and if you link more, you have larger outputs and that's both the actual final binaries that you ship as well as your local target directories which can get quite large. And then the fun, you expected type X and got type X. Thanks, cargo. No, Rust.  So basically say, okay, we're gonna deny multiple versions and then we're gonna skip a few and then this is kind of what it looks like. So if we had two versions of base 64, I'll basically give you the inclusion graph for both all of the versions, they have more than two, the two is the typical case and then kind of highlight where they're coming in but also has a different graph output as well optionally and the idea is that the blue lines show the path to the lowest version which is typically the one that you wanna get rid of and then the red path is the path to the one with the fewest number of edges which is typically going to be the one that's the easiest to remove. Obviously this is a contrived case, this is kind of much more typically what the graph will look like. I think this was like X Wayland and Winnet or something but yeah, there's like multiple duplicate versions there that all go to this one and yeah, it can be a mess but the idea is that yeah, it gives you the notice like hey, something is here and then once you find duplicates, then yeah, we have to decide what we wanna do with them. Sometimes you don't care and that's totally fine so then you just skip it and then often you wanna maybe open a PR to bump a version that needs bumping or change your version to point to the same version that it depends he's using to just get rid of the duplicate. There's basically whatever you wanna do, there's a lot of options. To reiterate the point, we don't think duplicates are bad because like I said, it does have a lot of positives. It can, it lets you just do your work without getting in the way but the duplicate detection is there so that you can notice it and actually make a decision about how you wanna deal with it. Next we have advisories. So the advisories are built on top of RASC so if anyone's used Cargo Audit, this is the same core crate that Cargo Audit uses to download, deserialize and inspect your crates with advisories and this is cool because it allows for kind of centralized knowledge base of advisories for all different kinds of things that people can contribute to and kind of help each other with. And then it's not just for vulnerabilities. There's also notices for unmaintained crates so crates that the author is either completely unresponsive or explicitly said like I'm not working on this anymore or for crates that serve to purpose but for example, maybe Navi and the standard library itself have been supplanted by a superior crate. It also can detect yanked versions. This isn't really a problem practice that I've noticed but it's there if you want it. As well as like obviously the possibility of more kind of advisories in the future. So yeah, so you can basically say how you wanna deal with vulnerabilities, how you wanna deal with unmaintained crates, how you wanna deal with yanked crates and then the ability to ignore specific advisories that maybe you don't care about. In this case, the spin is unmaintained but lazy static uses it and everything uses lazy static so it's kind of up to lazy static to remove it at some point. And this kind of, the output it gives you kind of gives you the information that's stored in the database for each advisory. And that'll give you links to alternatives in the case of unmaintained crates or what versions you should update to to get rid of the security vulnerability. And the last thing that we have is the source check. So CoreGuide has multiple sources that it can use as for crates. So there's the local source from a file path, crates.io registries, but then most importantly, Git. So this is the blog post kind of motivated the addition of this check and it's basically talking about MPM lock files but there is some relation to cargo lock files. So we have a typical kind of PR from my boss, updated dependencies and as is typical with Git Hub it'll just hide the diff, looks fine. But if you look in the lock file you would see that actually the version changed but also the source changed, right? So instead of going to crates.io now it's going to get.com definitely not mining bitcoins. So basically the configuration for this is just whether you allow or deny unknown registries and unknown Git sources and basically if you deny unknown Git sources or registries you kind of opt in to them instead of the typical case of just opting to get anything from anywhere. And that's kind of the output of it. Yeah, just as a bonus source that wasn't explicitly allowed and then points to the actual thing. So future, we probably want to add more checks. So one example, maybe the unused dependencies so there is UDEPs but that does actually hook in to Rust C itself. We think it could be faster to just check for unused dependencies just by doing magnetics and so forth. We're also thinking about doing maybe PROC macro, build RS kind of stuff as well because while PROC macros and build RS are great they're also huge security holes and we kind of want to be at least aware when we added dependency on something that uses procedural macro or build RS file for example just so that we can kind of say should we be adding this? And yeah, if anyone else has any ideas of other things that could be added to it would be cool. And then also there's this issue for cargo but the basic idea is that cargo could expose some way to hook into the dependency resolution of cargo itself and this would be really cool because instead of, right now cargo deny just looks at the resolved dependencies after cargo is done with it. If you had this you could add dependency resolution time stop something from getting into your graph in the first place and this would be particularly useful for things like security vulnerabilities. Like I don't want to add a dependency and then have my CI fail. I just want to not have it in there in the first place. And we do have a GitHub action that you can use and here's a few of the users most of them are crates but there's Tonic the DRPC library. And here's links to all the stuff. So the tool itself, spdx expression parser and evaluator creates is like a simple thing that basically takes cargo metadata and marries it to pet graph. There's conflict expert which evaluates configuration expressions and there's cargo audit and rust sec and then cargo about our kind of license attribution tool as well. So yeah. That's it. Did we have time for about one question? Yeah. One question. No one. Okay. Any others? What does cargo about do? So cargo about uses the more like it deep scans the every single file in create source to detect any licenses and then basically make sure that they match the declared licenses and if they don't basically gives a error and then you can configure to say like, okay, actually there's an additional license in this location but basically just takes them all together puts all the attributions and for each crate together and then you can take that information and pass it to a handlebar template and then the handlebar template can be whatever you want. We use like a HTML one and the idea is create something like the Firefox attribution page so that you can list every single crate that's being used, every single license that's used and then the license tax for each of the crates.


Welcome to the show. It's me, John Park, and you are just in time. Actually, I'm a little late, sorry. Everything crashed, right? As I was getting ready to go live. But here we are now. Thank you. Thanks for coming. This is JP's product pick of the week. It happens at this time every Tuesday. And one of the things I like to mention about this show is that it is our live stream that takes place inside of the product page. So if you want, head on over to this URL right here. You can go to that QR code. You can type in that URL, 4161, that's the product ID. And if you head there, you're going to get a 50% off deal on today's product pick of the week.  So head there, product 4161. And I'm going to proceed to do the show from inside the product page. You can see it elsewhere as well, of course. And I want to thank everyone for stopping by over in the chat. Hello, people in the YouTube chat. Hello, Saltima. Hello, everyone over in the Discord chat. See Grover. Oh, there's Ken Santima there. Yenny Skoo. Seven. Gary Z. Skrrrrrr. I like your name, Skrrrr. That's cool name. All right.  So just in keeping with that weird theme, let's have Lady Aida tell us all about it. Lady Aida, what is going on here? So we've got the VCNL 4040, which is a really nice proximity and lock sensor. We've been doing Stemma for quite a bit. In fact, we've had Stemma connectors on our boards for a while. I actually want to show some old boards from like 2017 to see what I originally came up with, which was, you know, use this JST connector and had alligator clips. And actually we even made a board with this dial because I thought actually we would be doing more wearables and alligator clip stuff. It turned out not really. It was more useful to have a small connector. So after seeing Spark Fund has been making quick stuff for a couple of years, I was like, that's a really good idea. So when we were doing this next batch of I-Squirt C devices, we added these connectors, the JST SH4 pin connectors, which are quick compatible. And they're actually also Stemma compatible. They're actually compatible with the larger cables, the same pin order. You just need the larger to smaller cable adapter, which we'll have in the store shortly. But what's nice about this is that it's chainable. And with I-Squirt C, as long as cables aren't too long, you can chain, you know, a couple of them together. And I have level shifting on the ones that need three-volt. So you can use these with a five-volt device or three-volt device, whatever you like. And here's an example of, for example, the BCNL. Oh, it's kind of cool. You can see the infrared pulsing out here. And then this is an OLED version of our .91 inch display. You can see it's a prototype because it says name. But then as I cover it, you know, I've got a little example sketch here that just prints out the proximity and light. It makes like demos and plug and play really easy. All right, yeah. So that's the product. And what I'm going to do is I'm going to go and grab mine from the mystery cabinet. And then we'll talk about it in a little more depth. And I have a kind of fun demo I want to show you. So let me go grab my own. Stand by. All right, yeah. So this is our product pick of the week. It's my product pick of the week, in fact. My product pick of the week today this week is, are you ready for it? It's the VCNL4040. It's a proximity and luxe sensor in STEMIQT format. And I've got a couple of different ways I'm going to demo it for you here. And I also wanted to show you the product page for it. So there's a little better look at it right there over my shoulder. And you can see it's a breakout board with the pair of STEMIQT connectors on it. So you can go over I squared C to any of your single board computers or to your microcontrollers. And we can chain together multiple of these. This has the little package right in the middle, the VCNL4040 sensor. And it's a sensor package that has both the emitter as well as the receiver for proximity and for visible light, for luxe. And what I'd like to do, let's head back over to this product page for a moment. And you can see here, first of all, like I mentioned, if you go to the product page, which is PID 4161, that is going to give you a 50% off. So you can get this for $2.98, which is quite a bargain. And if we scroll down in here, we'll see, hey, look, there's our video. It's playing right there. That's this video. So if you want, you can watch it from inside of the product page. This is a proximity sensor from Vishay. And if we scroll down to the bottom of the product page, we can get to the technical details and the learn guide. So if we head over to the learn guide, that will show you everything you need to know about the sensor. It talks about the distances that it can measure, 0 to 200 millimeters. And that's going to play into how I'm going to use it in a demo today. You might have seen a teaser of that online. But this is great for really, really near stuff and fine detail checking distances that are really close. If we take a look, you'll see in the guide, it talks about the pinout, as well as using this in Arduino, or Python and CircuitPython. I've coded this one today in CircuitPython. And then if you head to the downloads page, you can get straight to that data sheet. And let me see. I always like to look, as you know, applications. What other things? This is for handheld devices, notebooks, tablets, PCs, consumer devices, industrial application. So not a lot of, you can use your imagination. What do you want to use it for? I do think we've had some similar sensors before on the show. I do think sometimes these are used for things like proximity of head to tell if a smartphone is up against your face because you're talking on it, so that it can dim the screen and save you some battery life. But what I want to do is actually jump into the demo inside of CircuitPython. So I'm going to jump over to my down shooter here. And you can see this is, in fact, you'll see there's a little bit of a purple glow there. That's the infrared emitter. And right now it is sensing my proximity. What I'll do is I'll show you inside of Moo here. Let me switch some cameras around. So inside of Moo, it is checking proximity, I think every 10th of a second or something like that.  If I hold this really steady, I'm going to hold it with two hands. You can see it's giving us. I don't think these are in any particular units here because the number is going up, not down. This isn't millimeters or anything like that. But as that sensor value goes up and gets closer, you'll see there's a moment there where I have a threshold and it prints out the word blink. So you can see it there in the serial output. And then it's also just fun to watch the changes over in our serial or rather in our plotter. And the reason that I've got this with a threshold is that for a demo, Lady Aida said, hey, what about mounting this sensor inside of a pair of glasses and see if it can detect your blink? So you can wink and have that do something. So what I've got set up, I'm going to show you the full setup here. I've got my sensor. It happens to look upside down the way I have it oriented. I have it on the arm of these glasses, some of my reading glasses. And then I have a Feather RP2040 set up here. I'll give you full screen in fact of that now. And I've got on the other side of that Feather RP2040, a lovely little matrix LED display, it's a little feather wing. And I'm using that feather wing to kind of clamp the glasses to hold this in place. I've also got some capped on tape there to prevent any sweat or anything like that, any skin from bridging a contact. And then I just have the sensor board there attached with some wire. You can see it there. So that's just plugged in over STEM-AQT to this RP2040. So this Feather RP2040 has the STEM-AQT connector built right onto it, so it makes it very easy. As Lady Aida was saying, for wearable stuff, the alligator clips idea, that's pretty bulky. So this is really nice and small. And this powers the board and gets data and clock. And so what I'll do is, if you look here, let me go to a full screen. If you look here at the display, when I get my finger a little closer, I've got my little smiley face winking there. That's just my way of telling that it's been triggered. And you can see, if I put these on and I'll show my plotter there again, this is actually a little close to where I have it plugged in. So let's grab that Moo plotter. So you show me. OK, so you can see right now I have it spaced so that it's just on the edge. So we'll go that a little.  Something else you'll notice in there is that I'm printing out the statement note on, note off. And the reason for this is I'm actually going to plug this into a synthesizer and use it as a USB MIDI controller to play a note on this synthesizer, actually trigger an arpeggio that's randomized. So it sounds kind of interesting. So let me, I don't actually have a down shooter of that. So I'll just go to full screen here and bear with me because we might have to play around with the sound levels. The sound you were just hearing, that awful sound, that's actually the wind blowing a little vent hood on the top of my shop. So all right, so I've got that plugged in and I'm going to mix in that sound. You tell me, I'm going to check the chat. Tell me, can you hear that? Because sometimes I've got this mixed directly into the mixing board. It might be blowing my voice out of the water. I'm not sure how loud that is. And I just have a little monitor in the back for me to hear it. So I'll keep an eye on the chat. You let me, I know that sometimes a little bit of a delay. Let me know if you can hear that well and you can still hear me. And so what I'm going to do is I've got, I can probably show you this little synth later, but what I'll do is I'm going to just use my blink control and you can see my little guy there. I'm going to use that to trigger the synth. Music is low. Okay, let's see how much I can crank that. How about now? We can hear it. Okay, it's very low, but you can hear it. I just cranked it up as much as that is going to come on that mixer. I don't have a volume control on this little hardware synth. So hope you can hear that. And then I'm just going to adjust one of the other settings by hand. So how's that for a weird performance? So thank you for putting up with that. Let me move a little bit of the synth gear here just so you can see for the curious what I'm triggering to readjust some camera and focus here. There we go. And let me give you the down shooter. A little me there. So what I've got is this is a, this is the RK006 from RetroKits. And this is converting my USB MIDI coming out of the feather into standard MIDI. There's other ways you can do it, this was a quick easy way and there's kind of nothing this little box can't handle. And then I have that running into this cute little corg wavetable synthesizer, the DTS-1, which has this little strip on here. That's how you can trigger it if you don't want to use MIDI, but I'd rather trigger it with winking. And then this has a bunch of things like changing effects and filters, the type of arpeggio or no arpeggio and so on. So that's what I was adjusting was just a couple of these knobs. Oh, that wasn't the filter, let me give the filter. Much more fun. So anyway, oh, now I'm triggering it by accident as I talk. So I've got that dialed in fairly closely. You can see that it's a, it takes a little bit of calibration to get that set the way you want it to. But once you have that set, this little sensor does a pretty great job of tracking whether you've kind of added that little fleshy mass of, I think that's what it's measuring is actually the sort of little bit of a bulge of my eyelid coming down. And Eric B. Wertz in the chat says, do you have something in your eye or are you just happy to see me? I really just winking at the audience today. You know how that goes. Of course, you can imagine there are some really interesting uses for this type of sensing in things like assistive technology for alternatives to mouse clicks and things like that. We have a good community of assistive technology people who are using Adafruit products to build things. I'd be curious if people like Bill Binko have any experience with using this type of a sensor. I know I've seen some people do like eyelash sensors before where there's some contacts being made with like conductive thread or something like that. But I feel like this is a little bit easier to set up. You can just kind of take it off and put it on because you're not applying anything to your lashes or your skin. So let's see. I think that covers what I wanted to cover. I'll show you the code real quick for that, which is right here. Is that, did I show you Adam? Which one is that? That is Adam. Sorry, I'm losing my window. There it is, hey window. So a lot of this is the USB set up, but then I've got an import of the VCNL 4040 library that's created on the I squared C bus. We instantiate it. It's just being called sensor here on I squared C. There's where I set my little threshold for blink. This is my little matrix display that I was showing these little animations on. And then really all of this is about the display and MIDI until we get to the main loop of the program. And in here we're doing a, this is what I'm printing. So this is what we were seeing in the plotter, just had a couple of parentheses in there. So that would show up in the plotter. The sensor dot proximity, that's all you have to do is ask for sensor dot proximity and the VCNL 4040 returns that value. And then I calibrated that so that when we blink, if that sensor proximity is greater than the threshold that I created, which is that 34 happened to be where it went conclusively to, hey, I'm winking now. I wish I'd called it wink everywhere. I was calling it blink before, and now I switch to wink as wink is more fun. When that gets exceeded, when that value gets exceeded, then I was printing out for my own sanity, hey, yeah, blink happened, and then changing the matrix to turn that eyeball off and on in the LED in the matrix display. And then so I wouldn't get double hits without turning them off. You always kind of need to turn off a MIDI note after you've turned it on or it'll just play forever. I have a little state that I flipped called as note played. If it is, then if it was not yet played, then we play it. So note on at a note, MIDI note value 40, and at a velocity of 120. And then actually to turn it off, it's when that note value gets below the 34, I am sending the same note value at a velocity of zero, and that's effectively note off. So I think that's it. So I'm curious if anyone has any questions or thoughts or suggestions on how to use this incredibly cool sensor. I'll bring this page back up again so you can see. There it is. The VCNL 4040 is only $2.98 right now, normally $5.95, maximum of 10 per customer right now during the show. So this discount only applies right now during the show if you're thinking of placing an order. Chuck one or two of these in your cart and maybe some stem of cables. And I think we have the RP2040, this super cool featherboard that I'm using here. I believe that's in stock. And just like all things based on RP2040, the price is super low. So this is one of the cheapest, if not the cheapest feathers that we make. And yet it's one of the most capable. And I also like that it's got USB-C on it and it has the Stem of QT connector built right on. So it's very easy to plug and play with this board. All right, well, I will, just for the fun of it, put this guy back on. We'll see if it's, all right, let me turn that down as I finish up the show here. And let me get some cameras out of my way. I'll unplug some things there. Oh no, now I'm never gonna send it a note off. There we go, I fixed that. All right, so that is my product pick of the week this week. It is the VCNL4040. It is a proximity and light sensor, Luxe sensor, on Stem of QT format. And I'm gonna go ahead and place that on my Stem of QT board of awesomeness. The name changes every time. Thanks so much for stopping by. That's been another JP's product pick of the week and I'll see you next week. Bye bye.