Hi everyone, Sean with jaspyscasebrakes.com here doing a 2017-18 and 2019-20 Panini Revolution Chinese New Year four box mixer number one where each spot gets you two random teams. So we've got two draft classes in here, 17-18 and 19-20. Very exciting. We've got 15 spots here from Guy with the first spot down to Kevin Huang with the last spot. So to get everybody with two random teams, we're going to double up this list. So now you've got Kevin with that last spot there, up to Kevin with the last spot there as well. So you can see we doubled up that list, Guy right under Kevin there and Guy up on the top as well. Here are the teams from the Atlanta Hawks down to the Washington Wizards and we're going to get a new dice roll here to see how many times we're going to randomize each list. Tyler, I have to go through orders after this and then we'll figure out the break with the schedule. So five and one, six times, one, two, three, four, five and six and final time from Kevin down to Matthew Shraw. And now six times on the teams, one, two, three, four, five and six and final time from the Clippers down to the Sacramento Kings. Now there will be a trade window everybody, so pay attention to what teams you have and for those that are involved in the chat, I'm going to make this a little bit more legible for you. Pay attention because remember it's 17-18 draft class and 19-20 draft class. So you've got Tatum, Mitchell, Audubio, Markinin, Fox in 17-18. You've got Zion, John Morant, Kobe White, Rui Hachimura, Tyler Harrow and many, many others in the 19. So Kevin Wang with the Clippers, Matthew Shraw with the Heat, Guy Kanashiro with the Lakers, Colin Smith with the Thunder, Matthew Shraw with the Pacers and the Celtics, Bill Dervosian with the Rockets and the Spurs, Charles Seekman with the Bucks, James Coo with the Hornets, Sebastian Ocampo with the Nuggets, Matthew Shraw with the Cavaliers, Nicholas Stone with the Wizards, Matthew Shraw with the Pistons, Sebastian Ocampo with the Trailblazers, Colin Smith with the Jazz, Kevin Wang with the Raptors, Matthew Shraw with the 76ers, Charles Seekman with the Knicks, Stephen Kendrick with the Bulls, David Baker with the New Orleans Pelicans, Zion Opportunities there. Nicholas Stone with the Suns, Kevin Wang with the Magic, Kevin Wang with the Timberwolves, David Baker with the Mavericks, Stephen Kendrick with the Nets, Matthew Shraw with the Grizzlies, John Morant, Opportunities, Guy Kanashiro with the Hawks, James Coo with the Warriors and Matthew Shraw with the Kings. So I will open this up to trade opportunities. While you guys are thinking about trades and potential opportunities, I'm going to show, here are the two boxes. Left, 17, 18, right, 19, 20. So we're going to open these up and put them in stacks of two, since there's eight boxes per case. And we're going to roll a dice separately for each one of them to figure out which two boxes we're going to use. And it's in stacks of, you can see there's four quadrants, so we'll just keep them as they are and do the top box, bottom box. So just like it looked in the box, we're going to go one, two, three, four. So to figure out which boxes we're going to do, this is going to be one, two, three, and four. We're going to roll that dice again. And if we hit it one through four, those are the two boxes that we're going to do. If we hit a five or six, we're going to re-roll until we hit a one through four. The first one to come up is going to be the boxes that we do. So good luck, everyone. And it's a one. So we're going to go with boxes one right there. I'm going to number these so that we know. So those will stay together for the next break. We're going to set those aside. And these are the ones we're doing for this one. But I'll set those up here for a second. Now we're going to do the same thing on this 1920 case. Dice, don't go anywhere. We're going to need you again. We're going to go over here. Now we're going to do the same randomization on here. And I don't see any chat in regards to trades. So if that's the case, once we're done with this, we'll just print out the sheet and rip. I guess the people involved in the chat that are in the break are happy with the teams they got. So that's the first step. Same thing again. You can see four stacks. So same thing. One, two, three, four. Dice roll to determine which ones. And it went behind. So let's see what we end up with. A six. So that's a re-roll. You've got to keep it on the table. And it's right here. It's a one also. So one is the number. Two. So these are going to be numbered for the next time. So it was meant to be. So we'll start with 17.18. Save the 19.20 per second. Good luck, everyone. We print out this list, since there was no trade talk. Production quality. That's what it's all about. So we've seen it for the last two nights in our pre-game footage that we see Joe Batten out there talking with Joe Adele talking about defensive plays and defensive positioning. And you know that these are conversations now are going to happen with Mike Trout and the other outbuilders as well. OK. So no trades. So we're going with random.org. So Boston Celtics, Matthew Chirah. Obviously, you've got Jason Tatum opportunities there. Chicago Bulls, Kobe White, Stephen Kendrick. Denver Nuggets, Bull Bull, Sebastian Ocampo. Grizzlies, John Morant, Matthew Chirah. Miami Heat, Bam Adebayo, Matthew Chirah. Pelicans, David Baker. Zion, New York Knicks. RJ Barrett, Charles Seekman. Sacramento Kings, Matthew Chirah. Jiren Fox. Good luck, everyone. Hey, Gabe. How are you? Happy Wednesday night. So if I remember correctly, there are chances for autographs in this, but very, very, very low. And I believe that the autographs are only numbered to the player's jersey number. But you're looking for, there's a Chinese New Year's Parallel, I believe, in each pack. And then there's typically an emerald parallel that's numbered to 88. And then another version that's numbered to eight. Mike, after this, I'm going to go through orders and see what's sold out next. And then we'll be able to put luminaries in anything else that may have sold out onto a brick schedule.  So let's find out. But if it's sold out online, there's no fillers or anything like that, then it's going to go tonight. It might go after this once the orders are updated. All the crazy stuff we've had, it's not going to hold one of the booklets, so there's still that. First box, 1718. Good luck, everyone. So next time I say, it's going to be in a 75-bit range. Steph Curry, DeMarcus Cousins, Harrison Barnes, Dirk Novitsky, this is the New Year's parallel. You can see the little cracked eyes look to it. Caleb Swanigan rookie, Dwayne Wade, Robin Lopez, Yannis Bass, Kyle Kuzma, rookie New Year, Jaquie, DeMar DeRozan, Tyson Chandler, Tony Parker, Isaiah Thomas, Bama DeBio, bass rookie. That's going to the Miami Heat, and Matthew Chirot. That Kyle Kuzma, New Year's rookie, that's going to Los Angeles Lakers and Guy Canashiro, and that Yannis Bass, that's going to be going to the Milwaukee Bucks and Charles Seekman, Yo-Kick, Gobert Rose, Blake Griffin, Chinese New Year, and Josh Jackson, bass rookie. Beale Howard Hood, Justin Patton, rookie New Year, Minnesota Timberwolves, Kevin Wang, Juwan Evans, Gary Harris, Willie Collie Stein, Durant, Tobias Harris, New Year's, Jason Tatum, bass rookie, Boston Celtics, Matthew Chirot, congratulations. Middleton, Porter Jr., Westbrook, Brooke Lopez, New Year's, Ante Zizic, Hayward, Gasol, Dragitch, Tony Bradley, rookie New Year, Lonzo Ball, bass rookie, Los Angeles Lakers, Guy Canashiro, Adams and Baysmore, Kawhi, Damien Lillard, New Year, Jordan Bell, Oladipo, Brogdon and Aldridge, Chris Paul, New Year, Markel Foltz, bass rookie, Philadelphia 76ers, Matthew Chirot, DJ Wilson, rookie New Year, Kemba Walker, New Year, and Donovan Mitchell, bass rookie. Utah Jazz, Colin Smith. So we got most of the rookie names we were looking for in that one. Wanzo, Mitchell, Tatum, Foltz, I think one of the big ones we didn't consider, two of the big ones, Fox and Markinon. So let's see what's in the second half of 1718. Let's take a look and make sure there wasn't any of the numbered parallels. I didn't see any color change on there. If for some reason there was one that I had missed, even if I missed on the second pass through, when we go to sort and ship, obviously we'll pull those aside. Penis will even top load those as well. And in these breaks, all cards do ship, guys. So all that base does ship in this. So if you see it, it's your team, you're getting it. And no numbered in that first half. But we did get a lot of the rookies, so that's good. Let's see what's in the second box. Good luck, everyone. Oilers end up beating the Blackhawks, anybody know? LeBron James. Cleaving Cavaliers, Matthew Sharaw, that's going to you. The Hawks one? Whoa. How did Kubalik do? So, welcome to your afternoon or evening. How did the Celtics play tonight? I was watching the Lakers game earlier. They got smoked. Sterling Brown, rookie New Year. Frank Jackson. Marcine Gortot, New Year. Justin Jackson, base rookie. LeBron James, New Year, very nice. Parallel there for the Cleveland Cavaliers. And Matthew Sharaw, nice looking card. Celtics one by 30, whoa. Hey, Giles. Lori Markinin, rookie New Year. Chicago Bulls, Stephen Kendrick, congrats. These parallels are very, very short-purned. Kyrie Irving, New Year. Paul George, New Year. D'Angelo Russell, Cinderius Thordwell, rookie New Year. C.J. McCollum, New Year. Drew Holliday, New Year. Lori Markinin, base rookie. Going to the Bulls, Stephen Kendrick, congrats. Franklin Okina, rookie New Year. And Jonathan Isaac, base rookie at the end there. So not as many of the rookie names we were looking for is the first box, but I wonder if they didn't do the colored parallels in 17-18. I feel like in 1920 it was like one per box. Like I said, once again, all cards do ship though. You get it all. Cool, next up, 1920. So different rookie class, different teams highlighting it. That's why these multi-year classes or breaks definitely pay off because it adds up to more teams that can hit big. Same thing, New Year parallel in every pack. Like I said, there's a green and a red version. So fine 12 Chinese New Year parallels per box on average. So one per pack, typically. And right on top, John Morant, New Year's. Memphis Grizzlies, congratulations. Matthew Chirac, very nice card there. Not only is it a job, but it's the New Year's parallel too. So it's the name you want and it's the card you want. I'll see if we can find Zion, Kobe, RJ, Rui, who else? Bol Bol, there you go. Hotest name on the market right now. Denver Nuggets, that's another Chinese New Year parallel. Sebastian Ocampo. Nick thinks he could be a longer version of Kevin Durant. And when has Nick ever been wrong? So far, I haven't seen him be wrong ever. See, there you go, Sebastian. I haven't even gone through the packs. I'm just right on top. They're sitting there waiting for you. Month ago, you'd have been like, Bol Bol today. Hell yeah, Bol Bol. Derrick Rose, New Year. Matisse Dible, base rookie. Oladipo, Lowry, Brown. Griffin, New Year. Derrick Rose, Murray, Heald, Harden. Basley, Griffin, Collins, Hayward. Embiid, Brogdon, Embiid, Bledsoe, Towns. Malcolm Brogdon, New Year. Quenderry Weatherspoon. Gary Harris, Al Horford, Clay Thompson. Isaiah Roby, rookie, New Year. Andre Drummond, Trey Young. Dramon Green, Thomas Bryant. Al Horford, New Year. Casey Ackpala, Carl Anthony, or sorry, Chris Middleton. Deiren Fox, Julius Randall, and Gary Harris, New Year. Last stack, Paul George, Chris Paul, Zach Levine, C.J. McCollum, P.J. Washington Jr., Wendell Carter Jr., Kauai, Jason Tatum, Trey Young, second year, Chinese New Year. Kairi, Simmons, Harrell, Drummond, Bone, Isaac, Rosier, and Durant. So I guess those parallels aren't one per box. I feel like last time I had opened these, I was hitting them one per box. But that just makes them even more special, guys. Last box, good luck. Still looking for Zion, Kobe, Barrett, Rui, Cam, Harrow. Another reason these cards are sought after. They are only available in China, exclusive releases. So we have to go through the dark web and dark channels to get it to us. Right on top right there, Yanisantzicumpo, Chinese New Year. And I think this is an emerald parallel. So I think this is numbered. It is. 47 out of 88. Going to the Milwaukee Bucks in Charles Seekman. Congrats, Charles. You can see the background on that, not just the team color, but the lines there are all green. Kevin, thoughts on eBay mystery packs? I mean, I've never done it. Can't really say anything, you know? So I can't give you any first world experience about that. If you like mystery packs, stick around with the Jaspies. We do mystery packs, and you can hold us accountable because we have an online presence. We're here seven days a week. I'm sure the people in the chat, whether it be here on YouTube or over on Instagram on our personal breaks, jaspies.com, can speak towards the quality of what is put into our hit packs. Feel like you're safer that way. Maybe there are cheaper options out there in regards to those, but I'm sure there's a reason they might be cheaper as far as the lower the chances of getting what you want. Overall, not the quality you're looking for. And no recourse, no guarantees on anything on that stuff. You know, I'm sure there's some people out there that are reputable with that stuff. And their chase cards are actually placed in their packs and stuff. But unless you buy them all, how do you know? OK, guys. Second box of 1920. Good luck. Cam Johnson, Shea, Brandon Ingram, Galinari, White Side. This is Jaren Jackson Jr. But you can't really tell because they did an error on this, where you can see his entire body image is actually covered in that cracked ice look. Pretty cool looking card, actually. But you can barely see him a little bit right there at the right angle. Isaiah Roby, Tim Hardaway Jr., Donovan Mitchell, LeBron James, base. Jeff Teague, Anthony Davis, Bradley Beale, Brooke Lopez, Miles Bridges, Nicholas Claxton, Bull Bull, base rookie. Michael Porter Jr., Laurie Markinin, Pascal Siakam, Lamarcus Aldridge. Well, well, they're available. It was an error on every one of the Jaren Jackson juniors on the New Year. That Bull Bull, that's going to Sebastian and the Devere Nuggets, LeBron James, base, going to Los Angeles Lakers and Guy Canashiro. Yeah. But they did it not only on the Chinese New Year, but they did it on the base card, too. So this is another Jaren Jackson Jr. I think he's the only one they did it on. So you can see the pattern goes over him. But if you turn it at the right angle, there's his image. So he disappears, and then he's there. Those are both going to Memphis Grizzlies, Matthew Sharoff. Yonatan Satecampo, base. Milwaukee Brewer, or sorry, Milwaukee Bucks, Charles Seekman, Jay Crowder, Ricky Rubio, Deandre Jordan, Justin Robinson, Marcus Aldridge, Teague, Walker, Saku Demboya, rookie New Year, Detroit Pistons, that's going to Matthew Sharoff, Joe Kick, Deandre Jordan, Capella, Drew Holliday, Nicola Joe Kick, again, Taylor Horton Tucker, Booker, Ball Knox, Booker, Millsap, Porzingis, Gobert, Aten, Cody Martin, rookie New Year, Terence Mann, Kevin Love, Mike Connelly, Steph Curry, Gordon, Warren, Westbrook, Adams, Kristoff Porzingis, New Year's, Keldon Johnson, Jonas Voluntunus, Lonnie Walker, and Keras Lever. That's the break, guys. So no Zion in that half or that quarter of the 1920 boxes. But we can do this break three more times. And that was 2017-18, 2019-20, Panini Revolution, Chinese New Years, four box mixer, number one, two random teams each. We have the second, third, and fourth quarter of these two cases that we just opened available. So we can do this three more times. Jaspeyscraysprakes.com. We'll see you guys next time.


It's a known fact that Internet has grown tremendously over the last few years. In this module, we shall appreciate how Internet has grown, which are the contributing factors and of those which are the most dominating ones. The expansion of Internet can be qualified in terms of either the total number of hosts, the number of ISPs, which can also be understood as the number of networks, the number of applications which the users have started using over the Internet, and lastly, the resultant effect that shows itself as the total volume of traffic. Let's look at the change in the overall growth of Internet with respect to the type of users. It was mainly human-to-human interaction that was the primary focus of Internet, as we know in the form of email and other softwares. But as time passed, we have seen that human-to-machine communication started taking place. Somewhere around 2007, the trend has started gaining an exponential increase, and it also has an interesting aspect to it that the Internet of Things, the IoT, sometimes called machine-to-machine communication, involves communication between machines-to-machine per se. It means it does not necessarily involve humans in the loop. So it is quite likely that by 2019-2020, we'll be expecting that the most dominating contribution would be coming from the devices, especially the IOTs. There's another perspective of looking at how the Internet has grown in terms of the traffic usage. It is very important to understand that the traffic usage is contributed mainly from the number of applications and the types of applications. There you can see that of the dominant applications and softwares in 2009 and 2010, the real-time entertainment contributed the major part. But in 2010, there is a significant increase in peer-to-peer file sharing such as torrents. What it means is that in coming times, the peer-to-peer architecture of the Internet seems to be dominating the network applications part.


My name is Matt Parsons. I am from Cleveland, Ohio in the United States and this summer I will be an E for C fellow working on sustainable development goal number four for quality education. I want to apply my engineering skills for social good because there are many complex global challenges that will require multiple disciplines and skill sets to arrive at meaningful, sustainable, and culturally acceptable solutions. As an E for C fellow, I will be working with Ohio State University to document humanitarian engineering labs in North America and to create recommendations for the new humanitarian innovation lab at Ohio State University. I am most excited about this fellowship because I'm looking forward for opportunities to connect with people from different cultures and countries of my own and improve my understanding of the world and how to work and interact with people to solve meaningful global challenges.


Hmm. What's the highest you can climb as a product manager? Director product, VP of product, or COO? You can choose. Product manager has become one of the hottest jobs recently. But what's the career path of a product manager? How to get promoted after you become a product manager to become a VP or director product? What are the difference roles and responsibilities between individual contributor and director product? And what are the differences between the big companies like Google and Amazon and also the smaller companies like startup? Today, I'm going to solve all your confusions and help you to decide if product management is the right career path for you. This is Dr. Nancy Lee, a director product from drnancy.com. I help people transition from worker B to a product manager and business leader. To learn the most effective way to land a product manager job, you should check out this video and subscribe and hit the bell button so that you'll be notified every time I publish a new video every Wednesday. If you like the content I provide today, please make sure you hit the like button so that I have motivation to make more content like this. Recently, my student got offers from 8 p.m. to senior p.m. all the way up to senior director product manager position. So therefore, I had the first hand behind the scene secret and tell you using the real-life example, what are the differences and different career paths of product management? First of all, the entry level position of being a product manager is called 8 p.m. associate product manager and some companies call it product analyst and some companies direct to give you a product manager title even if you are the very entry level. And when you are entry level product manager, you are mainly responsible for doing market research and helping product managers to make decisions and sometimes will also interview customers. But you are not going to be responsible for product, but you might be responsible for a specific product feature. And something I want to remind you is that the title of entry level product manager is very different depends on the type of companies you join. For example, Amazon will give you a product manager title immediately once you join the company, even if you have zero product management experience. In their level is called level five product manager. However, level five product manager in Amazon is the equivalent of 8 p.m. in Google and also the RPM in Facebook. Once you become the entry level product manager, you need to think about how could you get promoted. If you stuck in your position for two years or sometimes over three years, it's still not getting promoted to the advanced level. You need to think about what's going wrong in your promotion strategy. You should check out this video about how to get promoted to advance in the product management space. The next level of product management is getting promoted to be a senior product manager. Once you become a senior product manager, your roles and responsibilities will become bigger. For example, we will start to lead a team of engineers and designers to build your own product and on top of that will be responsible for the entire product success. However, in different companies, they give you different title. For example, in Amazon, you get a title as a senior product manager. However, in Google, we are called PM123, as we can see in this table. In Facebook, they don't even give you a senior product manager title. All they give you is product manager, but your levels will vary significantly. In Facebook, the same product manager title can have the level from level four all the way to level seven. In general, Facebook and Google gives you a relatively lower title. However, when you interview in those companies, you know that you should expect to have a downgrade of your title, but increase of your salary. So you can check out the details of different levels of salary in different fan companies. By this video right here, I give you a very detailed description based on years of experience. And in general, Amazon gives you a higher title. For example, the principal product manager in Amazon is equivalent of a senior product manager in Google. So it's really varied. So therefore I recommend you looking into the salary band compared with specific title. When you are a senior product manager, your roles and responsibilities start to grow significantly. You will be fully responsible for a single product and you start to do customer interviews, lead a team of senior engineers and try to build a product on top of that and also associate your idea and sell your vision to the stakeholders. So I have a question for you. Let me know what's your career aspiration? Do you want to be an individual contributor in a big fan company or you want to continue to be promoted into a director or VP of product position or you just want to try out some startup for fun? So comment down below and let me know your career aspiration as well. The next level of product management is a group product manager title. Once you become a group product manager, you will start to manage a team of product managers and you start to mentor entry level product managers and it's likely you will be responsible for a portfolio or product and sometimes it may not be a full portfolio, sometimes it could be a very complicated product platform that individual contributors, those product managers will be responsible for one individual feature but they're all connected into a platform and you as a group product manager, you manage the entire platform plus the people managing the individual components of it. And as a group product manager, you will start to learn all the people skills, start to manage not just product but more people, coaching people, help them to grow and spend more time to do stakeholder management and to be honest, more politics as well. Now all the companies give you a group product manager title and for example, in Google, the group product manager is the equivalent of a director or product in Amazon. So in Amazon, there's no group product manager title. However, in Facebook, they still call you a product manager but you can be paid the same level as a director product in Amazon. So really think hard about your salary, where you apply for these positions. The next level of product management is the director product or all the way up to the VP of product. Once you reach the exact level, your decision-making power and roles responsibilities will expand significantly. First of all, your decision-making power will be like five times bigger, sometimes it can be 10 times bigger. On top of that, you will start to manage multiple teams of product managers and you will be managing a full portfolio of product. On top of that, you'll also spend more time dealing with stakeholders, manage up and more politics behind the scenes to be honest. And you will be a little bit further away from customers because individual contributors, product managers will directly interview customers for you. You will be there to see the strategic vision and see something like more further out, two years, sometimes five years down the road. And on top of that, once you become a director product or VP of product, your entire scope of roles and responsibilities can also branch into different functions. For example, you can start to manage per marketing team and start to manage like pre-sale or customer success on top of prime management. As you grow senior, you might start to manage more operation type roles. So therefore, the next next level after director VP of product is the CEO or Chief Operating Officer. So therefore, I think the product management role in general can lead to many different branch of different kind of diverse of career paths after you advance into a director product position. Now let's talk about startups. To be honest, startup has no specific career paths, but in general startup has like product management level, which is entry level, all the way to director or VP. And in general, startups give you a higher title. Their title are inflated. For example, direct product in a startup to be an individual contributor, which is the equivalent of a senior product manager in bigger companies. However, those startups' career paths can really go to very different directions. And you can accelerate your career by working a startup for like four years or sometimes two years and three years, which is the equivalent working for like big company for five years, six years, because you do more things, you get exposure to many different functionalities in a startup. So therefore, I always recommend my students to check how startups as one of the alternative paths to get into product management as well. To me, I think it's much more fun and could be a raffle ticket. You never know, you might hit the next TikTok. Speaking of TikTok, one of my students got an offer from TikTok as a product manager and there's only about 10 plus product managers of TikTok in the US as well. So I'm very proud to tell you guys we're part of the TikTok family. I'm going to do a TikTok dance later on. So if you want to know more insider tips about product management career paths and how to become a product manager, feel free to subscribe to my newsletter. And I will also give you some exclusive referrals in those top companies in my career newsletter. And I also remind all of you guys to check out other videos right here and subscribe to my YouTube channel. Make sure to like this. All of you guys say that my content is like golden nugget. You said, based on the quality of my content, my YouTube channel should be 10 times bigger than where I am right now. In that case, I need your help to spread the word. So please let people know, comment, like and share my content. I'm looking forward to see you next time. All right, good luck with your PM journey. Bye.


Environment Canada is warning of potentially dangerous conditions. Extreme heat soared up to all timelines. Dozens of people dead in northwestern Canada. Western Canada is being baked under the heat dome. It was the deadliest weather event in Canadian history. 619 people lost their lives. Trudeau says he cares. The science is clear. We must do more and faster. But he isn't acting like it. Trudeau's climate delay is making floods, fires and storms worse and more frequent, putting us all at risk. On June 29, communities across Canada will mark the anniversary of the deadly heat dome and connect the dots between climate delay and climate disaster. Together, we can push Parliament to pass the just transition legislation we need. Join us. Visit climatedelay.ca to find an event near you.


Hi everybody Sean with jazzy's case breaks calm here doing 2019 2020 panini immaculate basketball one box break Pick your team number five where we're giving away the pelicans. This is the last box from this case hoping for something really good in here because I think I think we're it's coming so For the pelicans all you have to do is have at least two teams if you had two teams you get one entry if you have Four teams you have two entries for six teams three entries so on and so forth Everything else straightforward pick your team All-card ship obviously it's a mac that's great stuff. So here's our list of customers from Reed Pierce in the Hawks down to Jeremy Chiakalis in the Washington Wizards last spot mojo in there Sean with the Grizzlies and the Dallas Mavericks So let's open up a new tab copy and paste that list of customers and alphabetize So Chris with the one-spot good luck doesn't get you an entry for the pelicans, but David here will get three Gary gets himself one Jeremy one Nicholas one Reed Robert to Sean you get to one of them. We're gonna include the last spot mojo spot Summon to And TJ so from David down to TJ 14 on the randomizer Copy that in here. So TJ back up to David and dice roll Six and a two eight times name on top after eight eighth and final time Congrats zoom in Got yourself the pelicans now. Let's see what the box has in store paste your name here print And rip so you can see like I said, this is the last box. It's marked here It was originally numbered number two. I think and our final list You see last box mojo designated with the asterisk and zoom in with the rooftop and the pelicans Good luck to everybody Let's see something ridiculous first up Trey young 27 out of 99 going to Atlanta Hawks Reed Pierce second-year tray Ice tray like some people call Chris Paul jumbo relic the standard 28 out of 49 No longer a thunder but thunder now or Oklahoma City Thunder zoom in Kim. That's what we're trying to do Travis. It's coming the patch on this Rookie patch six out of 35 team logo one of the M's in the Memphis logo. I Think this is the second M based on the V with the Opening I'm guessing that would be closer to where the center of the neckline would be Nice jumbo relic there Memphis Grizzlies last spot mojo Sean Maddock First auto is Mario Hazomja 21 out of 75 For the Portland Trailblazers and David Sullivan nice little shadow box signature here Joe Dumars Detroit Pistons acetate little See the shadow box effect right there 68 out of 99 Detroit Pistons Robert Runkel One of the bad boys of the NBA back in the day Rookie patch auto acetate New Orleans pelicans a little bit of two color there 53 out of 99 Jackson Hayes New Orleans pelicans zoom in Kim He won the pelicans for getting two teams in the break Not specifically the pelican we're looking for but it's definitely a good one. So there you go zoom in Then with a van Gundy. Let's see what he can do There you go guys. That's the last box That was 2019 2020 Panini and Mac that basketball one box break pick your team number five on Jasper's case breaks calm. I'm Sean If we have more one box breaks Check the site Jasper's case breaks calm. We'll load them after this Full case breaks still on the store Sean Jasper's case breaks calm. Thanks for hanging out and I'll see you next time


Hi, today I want to look into the panel code to explain you what it is doing. So first of all, let me say that we have three main repositories to keep in mind. The first one is Plasma Framework, the second one is Plasma Workspace and the third one is Plasma Desktop. So what's the difference? They all come together and form the Plasma Desktop as we know it, but that's not the only function for two of those. The first one, Plasma Framework, is more generally about giving libraries and the themes that Plasma can use not only on the desktop, but as an example also in Plasma Mobile. So we have in the source directory the desktop theme, which is the one we all know, Breeze, which is again not used only on the Plasma Desktop. But we also have as an example decorative imports with Plasma components, which are components that you can reuse both in Plasma, maybe in apps, and in general in the shells that use Plasma. Then we have Plasma Workspace, which again is not just about Plasma Desktop, but this time we have more complete components. As an example, we have the applets with many of the applets that we use going from kickoff to the clock. But again, kickoff and the clock and the system tree, they are all applets that can also make sense on different kind of devices, not just the desktop. Whereas the last repository, which is Plasma Desktop, is the one that is only about Plasma Desktop and is the actual shell we are using. So we have again an applets directory, as soon as I find, here it is, with all the applets that only make sense on Plasma Desktop. As an example, the shell desktop, applets, or the margin separator and so on. So said that, there's another thing we need to keep into our mind, which is the difference between containment and views. So if we look at the Plasma Desktop, we have two main components, let's say the actual desktop or the background rather, with the image and possibly icons. I don't have any icons, but you can have icons on your background. And then there's the panel. These are the views of the Plasma Desktop, the panel and the desktop. We could potentially have more. As an example, we could have a sidebar and we would have a sidebar view. And in this case, we only have these two. So these views are into our Plasma Desktop folder, into Desktop package, contents and then views. We have the panel and the desktop. But it doesn't end here. The panel and desktop views are only the containers. And in the panel case, they draw the panel background. But that's about it. They don't actually have the content nor they manage it. For actually managing the content, we have the containers, containers, sorry. So we have, let's say, about three important containers to keep in mind. The first one is the panel one, which actually manages the applets inside of it. And then for the desktop view, we have just the background image containment and the files containment where you can also have files as your background. And you can switch between them using layout folder view and desktop. So what we are interested in is the panel. So we can also see that if we get back to the Plasma Desktop directory, because this is all about Plasma Desktop and just Plasma Desktop, we can go into the Containments directory. We have the panel, the folder and the desktop. And then what we are interested in is the panel. And then we have the contents and the UI part of it with two QML files and a JS one. This is the second part of panel code that we are interested in. Finally, there's a third part, which is actually in Plasma workspace. So not just about the Plasma Desktop panel, but could also be reused in other shawls, which is inside of shawl. And then you search for panel. We have the panel view and the panel view, the panel config view, but this is less interesting and the panel shadows, again, less interesting. We are mainly interested in the panel view code. So we have the views with the panel view, then the panel view code, which is in C++ and finally the containment, which is in QML and JavaScript. So let's look into them. First one, which I want to talk about is the QML code for the view. It's actually pretty short for code standards, just 250 lines. And let's see what this says. So first of all, this QML file has a property that is the containment. This one is the actual panel containment, which is pretty important to have. Then we have the panel mask, less interesting stuff. And then we have, as a QT object, this private swapper. And we'll see later what this does. So we have boolean property to see if this is a vertical panel and this is directly taken from the containment information. We check if we have the containment and if we do, we check what form of factor it has. And then we have the spacing at minimum size because if you look into the panel when you edit it, you see that it has a margin. And if you scale down the panel, so you can see that that margin shrinks because it would not make sense to use always the same margin when the panel is big and when it is very small. Because otherwise, when the panel is small, you have super small icons when you could have just bigger ones using a smaller panel. Sorry, margin. So what we do is to calculate this value, spacing at minimum size, which basically says this is the least amount of top padding. Actually, it is, let's say, the maximum amount of margin that you can put. If you have too much margin and the margin is bigger than this value, then the margin will be shrink down because otherwise the icons would not fit. And all this is used is just down here. So we calculate the top, bottom, left and right paddings, margin. And we do this by taking the actual margin from the SVG where the margin is defined from the plasma theme. And then we use minimum to take the minimum between those two. So this one acts like a top number which you cannot go past. And the fixed margins are taken from the SVG, which is this one. And this component, plasma core dot frame SVG item, sorry, is actually from plasma framework. You have this plasma core, not here, but somewhere. I don't remember all of the stuff. But it's around here, somewhere. OK, it is in the declarative imports directory. The core directory is plasma core. And this frame SVG item is this frame SVG item. So this is much longer code, but we don't really need to know what this does, except that it actually loads the SVG from the plasma theme and not draws it. This doesn't actually draw the SVG. This just loads it into memory. And what we do with this SVG is to read the margin. And that's it. We don't actually draw it on the view. The drawing is done later on. So we can then see that we have the task manager. So what you might ask, what is the task manager doing here? This is not actually the task manager, but it is a model that we use to know information about the virtual desktop and the activities. And we need to know about these two to actually know if a window is maximized in this desktop and in this activity. And why are we interested if a window is maximized or not? Well, because we need to provide adaptive transparency. So a maximized window will make the panel opaque. And this is something that we need to know. So we take the virtual desktop information, the activity information, and then we sort all of the visible windows based on whether they are minimized so that they are not minimized, so only the open ones. And then we filter by the fact that they are not maximized in this screen and in this activity. And of course, if there are any, the panel will be opaque. Finally, we have these other two frame SVG items, which are actually used to draw the panel. But we have two of them, so you might ask, why two? Well, one is used to draw the normal panel, and the other one is used to draw the opaque one. So this is a translucent item, and this is opaque item. And the panel will switch between the two based on whether they are maximized windows or not. So what we say here and here is that the borders that are enabled are the borders that are enabled for the panel, which is basically, in this case, the top one, because the bottom, the left one, and the right one are covered by the screen just ends there. So we don't have a right, bottom, and left border. And then we say, uncourse field parent, which means take as much space as it's needed so that it actually fits the panel view. And then we have the image path, which is where we actually take this SVG from, which is widgets panel background, and the solid widgets panel background for the opaque one. So then finally, we have the transitions, but yeah, these are just to make a transition from the translucent one to the opaque one. So basically what we say is that we give an opacity to the opaque one, and we make it appear or disappear based on whether there's a maximized window. So this is the transition from opaque to transparent, and this is one from transparent to opaque. And then we have this little bit of code that actually reads the opacity mode of the panel and checks out if it should be transparent, opaque, or adaptive, and if it's adaptive, it will actually check the window model count to see if any windows is maximized. And if there is, then we go for an opaque panel. Otherwise, transparent one. If instead the panel opacity mode is always opaque, we always choose opaque, otherwise, we always choose transparent. Then there's also this display hint, which is basically saying that we need to be opaque also not only to the panel, but also to the applets inside of it. So what we're saying is tell the containment, which in this turn will tell the applets that the desktop is either fully covered or it isn't. Then we have the states. We have two states, one for when the panel is opaque and one for when the panel is transparent. So of course, as we've seen before, we can make a transition from one state to another and later on, I think later on, where is it, sorry. Actually, not later on, right now. Yeah, it's used to the transition between those two. And then I got lost. We have this function which adjust the prefix, which basically says that if we are a bottom panel, like this, if we are a bottom panel, then we are interested in the prefix south, mostly as an example for the text manager, because if you actually go see the task manager code, you have a version of the task manager for the bottom, one for the left, one for the top, and one for the right. And their names are North, Sud, East, and West. So we need a function that says, okay, if we are on the left edge, our prefix is going to be West, if we are on the top edge, it's going to be North, and so on. The default prefix, if we are not in any position, which should, I guess, never happen, is just an empty prefix. Then we have this uncontainment change, which basically says whenever we change the containment item from one panel to another, which again should rarely happen, if not like when you actually turn on the EuroPC and you switch from having no panel to having your panel. So this runs and when the containment actually changes, so when it's set, you set the parent of the containment to this item, this empty item, then we set it to visible so that we can actually see the containment, which remember is what actually deals with the panel, we'll see it later. And then we say that it should feel the containment parent item, which is this one. And then we also adjust the prefix so that we know which prefix to use. Then finally, we have a binding from the property panel length when containment value, blah, blah, blah. So basically what this says is that the length property of the panel only exists when the containment is a set and its value is that if there's no containment, then return, if there's a vertical panel, then return the containment layout preferred height. So if there's a vertical panel, the length is going to be the height. And if there is an horizontal panel, then return the width, because the length of the panel is going to be the width. Then we have this other binding about background hints. And again, what this says is that, well, it just reads the background hints property of the containment, so that's about it. Then finally, as our last piece of code, we have this item, which is the containment parent, which is just an item that we use to say, okay, our containment is going to go in here. So it is like containment here. And when we actually run the code, we are going to actually move the QML object of the container inside of here. So this is the containment. Sorry, this is the view, not the containment. And now we can actually give also a look to the C++ code for the panel, which is this one. And this one is quite long, it does lots of thing. And I'm not going to showcase each one, each property, but let's just say that it covers all of the properties of the panel. So we have the maximum length and the minimum length that the panel can have, the thickness of the panel, the alignment, whether it's on the left and the center on the right, the visibility mode, whether, I don't know exactly what this value is, but we also have the opacity mode, whether it's adaptive, always transparent or opaque, the background ins and so on. So we have a bit of code that actually reads the values and sets them, and then we have all the functions which actually we can better showcase from the H file in here. So we have many properties that are actually readable from QML to, I think, this is what Q property, yes. That is, that are also readable by QML also. In general, there are Q properties, it's not just QML. We have the alignment of the panel, which again left, center, right, the offset compared to that alignment, the thickness of the panel, the length and so on, all of the properties of our panel. Then we have, yes, the enumerations for the various values of the above Q property. So we have the visibility mode, which can be normal, auto hide, let the windows cover and windows go below. So now I actually know what the visibility mode is, and there's also explanation about it in the comments, the opacity mode and so on. Then we have the functions to actually read those values such as the thickness and also set them. These values are referenced in the Q property, so same thing. And then finally, we have the actual functions. We have the resize event, the show event, move event and general event. So this is event handling. And if we actually take this function in the actual code, there's something interesting. And that is, I showed it last time, that this part is, what this part is saying is that if the containment, which I can only remember is the part inside of it, contains the position of the mouse, sorry, if it does not contain the position of the mouse, then move the event, let's say the mouse, it's as if we're moving the mouse event inside of the containment, so it is still registered because the containment is actually a bit smaller compared to, no, the containment is actually just as big, but the outlet are smaller because they have a margin. And if you click outside the margin, they still get triggered because we have this piece of code that redirects the mouse input inside of them. So what else? We have some signals, the signals are function that are called when something happens and you can connect these signals to some slots to make those slots be called when the signals are called. So we have a signal for when the alignment changes, the offset changes and so on. We have the queue slots, which again can be linked to some queue signals, not necessarily these ones. And this one is for position in the panel, I guess. This one is restore, show temporarily. We could see the code for each one, but it's not really interesting. And then finally, we have all the actual values, the offset, the length that are read with the functions that are above. So this is the panel view. Again, it's pretty useless to see all of the C++ code line by line because you only work on the part you're interested in, but it's just to give an overview. And then finally, we can look into the final component, which is actually the containment, which is this one. And remember that the containment is inside of the view and that it holds the applets. So we can see that the containment is as the size, is this the right containment? Yes. We can see, okay, let's start from here. Again, I want to explain every line, but we have the frame SVG item as before. One is for the normal SVG and one for the thick SVG. So the difference between these two is that the normal one is this part on the left and the thick one is this part on the right. And the link between them is the margin separator. We switch from the normal one to the thick one. As you can see, the margin changes from small to bigger. Now, these two are not actually drawn. They are just to read the margins of the small one and the thick margins. So again, not drawn as before, but only to read the margins. The actual drawing of the panel is in the view in these two items, not here. So we have another couple of properties of our interest, like whether margin areas are enabled, whether we have, sorry, not whether, but the property that holds the actually highlight SVG to draw the highlight. And then we also have this spacing at minimum size that we also saw in the view. It's the same thing. Again, we need to calculate the margins, which means that we need to also calculate here what is the maximum value of the margins. And then we have some code to add an up-let, taking as parameters the up-let and the X and the Y where it has been dropped. And what this does without seeing like each element is that we are looking, so first of all, we insert the item before the DND spacer if there is one. The DND spacer, I think, I got a bit confused on this thing is the spacer that you have when you drag something. You can see that like there is this big empty space and this is the drag and drop spacer. So I think that that's what it does. Sorry, I dragged the, oops. I actually accidentally dragged the margin outside. I can't get it back. Okay, fantastic. Nevermind. So let's get back to the code. And then when we insert the element before the spacer, we update the margins. Then we say if there is no drag and drop placeholder, such as if you are dragging in a new element, then insert this container, okay. Yes, because it creates a container for the up-let. All of the up-lets are inside a container. So we insert the container in the X and Y coordinates that are given. So we first check if there's drag and drop placeholder and then replace it. Otherwise, we just use the position given if they're valid, so more or equal to zero. If they are not valid, then fall through to determining an appropriate insert position. There's a long like fix me to do here. This is not in the interesting case. So let's forget about it. Then we have a checklist spacer, which is a function that I admit I did not really understand. So forget about this one, sorry. And then we have some setting up of this layout manager. And the layout manager is the JavaScript code that we have here. So what we are doing in this component uncompleted, which is, which runs as soon as the panel is loaded, is that we set the plasma to the plasma, the route through the route and so on. So an interesting stuff. So that then we say, when we start dragging something inside of the panel, if the plasmoid is immutable, which means that we are not in edit mode, then ignore the event. Otherwise, if it's horizontal set the fix that we, well, this doesn't seem interesting, but the interesting part is this one, if you come in dragging something, insert the drag and drop spacer into the position that was given, which means that if I start dragging an applet inside of the panel, that this drag and drop spacer will appear. You see that there's a spacer. This is the drag and drop spacer. And of course, if we stop dragging and we actually insert the applet, the drag and drop spacer will be replaced with the applet as we've seen in the code before at applet like this. So let's also remove it because I don't actually want these activities applet here. And then we can see that the on drag mode, same thing, we start the dnd spacer to the event x and y. And when we leave the drag leaves the panel, we just remove the drag and drop spacer by setting its parent to root. And then we say that the width and the height of this drag and drop spacer will be zero and zero. So it disappears. But when you actually drop something inside of the panel, then process my data, blah, blah, blah, accept the event, then, oh yeah, this is actually all not interesting stuff. It's unled somewhere else interesting, which is probably here, which is another containment. This is using the containment API and it says when you add an applet, then call the add applet function at the x and y given and save the new layout to file so that when you restart your system, it's still like that. Similarly, when an applet is removed, call the remove applet function, which is not above. It's either below or in the JS file. So let's see if it's in the JS file here. Now I did not mean to open erst to open a JS file. So close, thank you. And if we drag it to Kate, we can check that we actually have this remove applet function, which gets called, gets called. And what this does is basically that it loops over the children of the panel, which is, in this case, it's called layout. And then when it actually finds the child, which applet is the applet we are removing, then it just destroys that applet, so it's no longer in the panel. So if we get back here, there's also on user configuring change, but this is not interesting. Then yes, stuff like that. Yes, then we have the components. We have this component, which is very important, which is the container of the applet, which is where the applet actually lies. And of course, the container of the applet will actually have an applet somewhere, where is it here, applet, as a property, but also a lot of code. So we can see this code. We have a property on whether this container is in a thick area. So on the right, all of these applets are in a thick area. All of the applets on the left are not on a thick area. And then whether animation are enabled. Then we have the code for the actual handling of filling width and height, if there are a spacer like something like that. And then there's this get merging function, which is to help getting the actual margins. And what this does is I'll just explain it a bit easier, is just it takes the margin from the SVGs that we've seen on the top, based on whether we are in a normal panel on the, or the thick part of the panel. And then it does all the math with, you know, the spacing at minimum size and stuff like that. And then when we actually are able to read the margins, we set the width, the height, we do it three times, one time for the minimum, one time for the preferred, and one time for the maximum. But this should be about the same in all three cases. Let's see if there's any outstanding difference. Yes, in this case, we are basing it on the applet layout, minimum width, preferred width, and maximum width. So the minimum is of course the minimum amount of width that the applets needs to have. The preferred one is how much width the applet would like to have, and then the maximum is the maximum they can have. So of course when we set the width is that we get the root height and the root width and then we take off the left and right margin. Then finally we have these properties old x and old y, which let me check where they're used, not in this file and in here. Okay, so okay, yes, this is for the translations. Yes, so basically we save the position of the item and then when we actually change the position of the applet, then we see what change has been done from the old x and the new x and we save it as a transition. And this both for the x axis and the y one. And then we do a number animation to actually animate these translation properties so that moving an applet is something that's animated and not just that goes from one spot to another instantly. And that's it, this is the container for the applet. Then we have another, this is the one I actually wrote, so it's horrible, just kidding. This is the rectangle height light element, which is this element, the blue line that goes from being small, then gets bigger on the right size and it could technically get smaller again and then bigger. So it needs to be flexible. And I will not explain each property because it's a bit of a complex element. I'll just say that there's like a component and then another component inside of it. So not something you'd want to use. Like if you need to change this code right to me because it's a bit complex compared to what was above but basically what this does is just to draw that element and then we allow for enough customization to have like a top one for the field for the field part, then a step one, which is where it changes from small to big and then a field step, which is basically the part which is not, this is complex to explain, not the line itself that goes from small to big but the part above it and then so on. Then we have the UI components, which is the things you actually see. So we have again the margin around the panel, only left and right if we have a horizontal one and if we have a vertical one, it's only top and bottom because the top and the bottom margins are defined but by the applet container themselves. Then we have this last spacer, which again I'm not sure what was the purpose of it but there's also the drag and drop spacer which again is the one we've seen before when we actually try to drag something inside of the panel. So there's other stuff but then there's this grid layout with this current layout ID, which is where we actually have all the applets. So this is like the actual component where we'll have the applets inside of and then we have like one row and one column but of course that won't be the case when all the applets populate the panel and it's a grid because on the bottom panel, it will be like just one row but on the vertical panel, it will be just one column. So we change one of these two accordingly to the position of the panel and then we have this timer. Again, not interesting stuff. I'll just switch past it and then there's this startup timer which is actually just kind of a hack to make this work and just to run something as soon as the panel is actually loaded. And this is the main QML file. Then we have the config overlay which I won't go through completely but basically this file is about this top part with the AdWidgets, AdSpacer and everything is for when you're actually editing the panel. This is why it's called a configuration overlay. And then finally, we have the layout manager which again was opened in our studio which is not what I want. What I want really, I want to open it with Kate. And the important thing about the layout manager it has a function to restore the panel and the position of all the elements after booting up, function to save all of the updates when you change it, a function to remove an outlet and then insert before, insert after, insert at index, all these functions are also inserted at the coordinates. All of these functions are to actually insert updates inside of the panel at the right position. Then finally, there's this function which is from me, update margins which basically checks each outlet where is it, whether on a thick area or on a normal area. So for each one, it says, okay, this one is still thin area, thin area, thin area, thin area. Then there's a spacer. Then there's the task manager which is thin area. Another spacer. And then here, there is the invisible margin separator. And as soon as it sees this, it says, okay, we need to switch from thin to thick. And now this one is thick, this one is thick, this one is thick, and so on.  So this is very important for all the outlets to actually have the correct margin actually. And then what this code also does is to create a new object based off on the rectangle highlight element that we've seen before. So basically what this does is says every time that there is a margin separator, we need to create a component that draws the margin, the blue margin on top and bottom. So it does it one time for this one, then it draws the part where it gets smaller, and then it does it another time for the right part. So we actually have two rectangle highlights element, three if you count the part where it gets smaller at the middle. And that was about it. So this was an overview of the panel. I've said pretty much all of the important code that you need to know about if you want to edit a panel. So if you're interested in developing your own feature or fixing about that annoys you and stuff, this is where you actually want to look at. If you're interested on the appearance of the panel, then that's something else entirely and it's defined in Plasma framework in the desktop theme. Let's take for example, widgets panel background. This is where the actual appearance of the panel is defined. But if you're looking for the code, well, it's this one.


Mitch Shipman at the U.S. Naval Academy's Mechanical Engineering Department participated in a senior capstone project. This year's project provides a unique experience for Mitch Shipman to build leadership skills and gain hands on experience before heading to the fleet. U.S. Navy retired captain Leonard Hamilton is a team's lead. The primary thing I want them to pick up is leadership skills. You know, I'm the mentor for this team, but I'm not the dictator. I want them to make the decisions. I want them to run the schedule. I want them to run the budget. And one of the most typical things that they encounter is peer leadership. The Navy team is building this year's racing car to participate in the annual Formula SAE competition held at the Michigan International Speedway. To watch the rest of the story, visit all of his magazine's website at ah.mil.


All right. Hello and welcome. It's time for our SIG Club provider update. If you are looking for Helm, that was last hour. So, you can watch the recording. It was fantastic. But, yeah, let's get into it. Shall we introduce ourselves? Yeah, my name is Michael McEwen. I'm a software engineer at Red Hat, mainly working on cloud infrastructure and auto-scaling related topics. And I've been working in and around the Kubernetes ecosystem for about six years now. And if you want to look me up on GitHub, that's my handle. Awesome. And I'm Bridget Kremhout. I'm a product manager at Microsoft. I focus on upstream open source. And I think I've been around the Kubernetes ecosystem for about six years. I think time has stopped passing since March 2020, so I'm really not sure. But, and I'm Bridget Kremhout on GitHub and all of the everythings. My parents made the exciting choice of giving me a Google unique name in the 1970s. Good choice. Thanks, mom and dad. Okay. So, spoiler alert, you got to find out what this talk is going to be about. And we're going to start, I think we got to start with excitement and adventure. Oh, yeah, totally. I mean, a Jedi craves not these things, but SIG Cloud provider is all about them. And then we'll do some cloud provider specific updates. And then community stuff and even more caps that you can dig into and get involved with. All right. So let's start with the, hey, you thought you could use cloud providers. Watch out. It's not going to be what you thought. Want to give some detail about that? Yeah, definitely. Anyone who has been watching, you know, the great migration of in tree to out of tree for our cloud providers might be familiar with this cap 2395. And this cap is the enhancement that proposes the removal of that code from the Kubernetes, you know, main repo and then what's going to happen once we do that. So currently we're in the phase four beta portion of that enhancement, and that might sound a little overloaded, but we'll come back and talk about what that means. And all of this right now is going to depend on the success of the integration testing we're doing. So as we're starting to remove the final pieces that will allow us to take these cloud providers out of the entry, these tests are really important to what we're doing. And so what we need to do is kind of make sure all the tests keep working the way we expect them to as we move from one style of deployment to the other. And I think that this is probably important for people to look at because even if they think that they don't have to do anything, they almost certainly will have at least a few things that they need to do that we can talk about. Yeah, definitely. So like in in 1.26, what we're going to try to do if the test pass is we're going to enable these feature gates, the disabled cloud provider feature gate and the disabled Kublet cloud credential provider feature gate. So those will be turned on by default. And those are the feature gates that you would use today. If you wanted to enable the out of tree cloud controller managers, as opposed to the in tree Kubernetes controller managers. And there's a couple there's a reference couple references here at the bottom to the cap, and then to a related blog post that talks about the CSI migration, which is directly linked to this because it has to kind of, it has to predate what's happening with the CCMs. Yeah, and these slides are already on schedule so you can take a look and follow these links. So you mentioned where we are in the removal phases, and I think it's a little bit deceptive and so I want to make sure everyone knows that this isn't a situation where oh we're almost done and everything's fine and it's basically nothing to worry about and we're just you know Mopping up at this point. There's a little bit more going on that people should probably realize. Yeah, no definitely definitely and as you can see from this this is enumerated in the cap, but there were four main phases we were moving through right and so like we've kind of gone through the process of, you know, moving the cloud provider code from where it was in the Kubernetes repo into the staging portion of the repo, building the CCM kind of library that allows us to reuse that code, then moving the code will really copying the code from the Kubernetes repo into the specific cloud provider that allows us to reuse those and now we're at this phase four which is disabling them right, but this is taking us a while to get through and you know people have been asking for several releases now when is this going to happen one is this going to happen. So 1.26 we're going to try to make it happen, but it might take us a few releases to complete it because if we find errors in the integration testing while we're doing this, we'll have to slow down our cadence to fix those things. So I think this is something the SIG probably needs to talk about a little more in terms of like letting the community know where we are in the process and how close we are to doing this because I've already been getting questions about like well what where can I watch where can I see when this is going to happen so yeah this is something we need to talk about and so I think that the part like you know how for a long time everyone said you had to care about IP IPv6 and you thought it was going to happen, maybe not really and that's it's been coming real soon now for you know the the year of IPv6 and your Kubernetes cluster was coming real soon now until it was actually here and it was actually happening and we're just letting you know that now this is actually happening so yes we are actually trying it out now. Okay so you mentioned testing and I think we should talk a little bit about that too because that is key to how people are going to know are they going to be okay are you ready. Yeah absolutely and so most of the proud jobs that we run right now in the Kubernetes CI use GCP the Google Cloud Platform as the mainline for running these things and so as we're starting to transition what we're going to do is we'll start by using that GCP CCM which is the out-of-tree controller manager to start doing these tests and as I mentioned you know in the previous slide this is the highest priority for the SIG in 1.26. We were hoping you know if the testing goes well that we can actually deliver this and then you know the wider community can start to use the out-of-tree providers and get used to the style of deployment that goes with that and so what we kind of like talk about here in the requirements before we could accept this is all of our pre-submit jobs will have to run with the CCM or no cloud provider. So as you know Kubernetes can be deployed in a manner where it doesn't have to be aware of the infrastructure provider beneath it. We are using GCP in our main testing so for the tests that require a cloud provider those will all have to run with the CCM. And then most of the post submit jobs will also be running with the CCM or no cloud provider. And I say most because there will be still some integration tests to make sure that the old KCMs the in-tree portions are still working. You know those get removed. And the note that you put at the end here I think is really important. The we need to at this point start looking at individual out-of-tree providers repos for you know their specific tests because we're going to start no longer having one in-tree you know to roll them all but instead it's going to be very. Okay so what should people do like right now if people think oh wow this kept sounds like a big deal and maybe I need to actually take action we have some actions for you. Yeah definitely. So if you are currently running your Kubernetes deployments in an infrastructure that has a cloud provider you will probably want to understand how the cloud controller manager architecture works. And this first link it gives you an impression of how it fits into the Kubernetes cluster and how it gets deployed in the Kubernetes cluster as well.  And so the next link the migration process documentation would be really helpful to show you the process that you take to migrate from the in-tree to the out-of-tree. And this can be done in highly available clusters without disrupting work. And it will also show you what you need to do to deploy those on your own so whether you choose to do it with a you know demon set or a deployment or whatever works for your organization it will show you some of that. And then my last call out here is start planning your migrations now. Yeah this is the sort of thing where I know we all want to wait until the last possible minute but we're giving you the warning that now is the minute to avoid having pain and sadness. And I know when also when people tell you you should start doing this big amorphous thing it's complicated and probably hard. The first question you have is can you show me an example of where somebody has done something like this. Happily our friends at Red Hat have. Yeah so as many of you may or may not know OpenShift is a hybrid cloud Kubernetes so it runs in many different places and at Red Hat we test it on a lot of different clouds. And we test five or six different cloud platforms in all of our testing. And so we needed a way to centralize our transition or our migration from entry to out of tree. And we needed a way to share it with our users in a way that they could repeat these processes so we didn't have like a lengthy you know documentation they had to read or something. So what made sense for us was to encode the knowledge about how to how to migrate from entry to out of tree into an operator. You know we felt this fit really well with kind of the Kubernetes ecosystem and kind of fits into the ethos very well. And so what we did was we encoded all of our you know kind of logic around that into this operator. And for us this single operator runs on all of the clouds that we run on it can detect what's cloud it's running on and then do the migration. And it works with highly available clusters it will keep the cluster running while it's doing the migration. And you know this is something we test in our pre submits and our post submits you know daily basically so it might seem like a heavyweight solution depending on what you're trying to do. But if you're operating in an environment where you know maybe you're serving multiple clouds or you have you know lots of clusters going in at different versions. This might be the kind of thing that could help you to make this migration easier. Yeah and because this is open source even if you're not going to use this specific one for your use cases you can go examine it learn from it. Right. So yeah the link here you know we call it the cluster cloud controller manager operator like I think our team is getting a reputation for making names that are like super long. And so we call it the three CMO internally which I like because it sounds kind of like Star Wars or something but yeah check it out. It's all there. It works. You know you can copy it do it over. Oh my gosh Mike I think three CMO needs a cute mascot you should get on that. OK so let's go move into cloud provider updates. And this is going to be we're going to hear a little bit about what has been going on in each cloud provider. I think more or less since the last KubeCon so about the last six months but just highlighting a few of the things in the individual cloud providers that are a little interesting or different or what you should know. Yeah so the AWS provider updates they've got a lot with us to share here so they've just had a recent release of their credential provider and they've migrated it from the entry. You know they've got a lot of bug fixes they're working on some artifact builds it looks like they have an I am authenticator which has new release versions as well. And they're working on the next release version it looks like they're working on a bug patch that they're going to push out. And then they've also got updates to their load balancer controller as well. So if you're working on AWS you know definitely check out the updates to their provider. All right awesome thank you. And for the Azure provider update I reached out to my colleagues who work on the Azure provider. They are not able to be here but I wanted to put their GitHub icons and handles up there so that you could reach out to them individually if you wanted to. Because they're a great team. And the recent achievements that they wanted us to highlight are we migrated all of our test and for jobs for our cloud provider from using AKS engine to using Capsi. We're using the cluster API provider for Azure to run all these tests highly recommended and since you know cluster API can be used in all of the clouds you've probably ever heard of and a few you haven't you probably could check that out. The VMSS flex will be supported in the upcoming release. We've added home charts to deploy cloud provider Azure improved error handling you know various features just to kind of all of the small nuance things to fix various bugs or add features that people need around like disk IP etc. And then of course you know CSI driver improvements and that kind of ties into the what's next. Of course we are rolling the dual stack IPv4 IPv6 networking that I mentioned earlier that Kubernetes has into cloud provider Azure. Some performance improvements you know tracing improvements obviously like we all like to operate things when we can see what's happening so of course Azure SDK updates etc. I did want to point out because we talked about this a little bit the removal of the Azure disk entry driver is coming in 1.26 and if you're thinking like oh wow this CSI migrations can take a really long time. It took us about four years but after four years of work we're actually done and we can remove that and then we're also GA the Azure file entry driver and so that's kind of the and then you know other again more improvements etc. But I think that's a good example and we will talk more about that too of the spoiler coming up bunch of the stuff that you know you need to be considering but yeah that's the that's the Azure update. Cool sounds good and everyone go get a new get the new version of the Azure cloud provider right so Google also has been working on some updates. They've been continuing to kind of progress their CI and there's kind of some interesting work they've been doing behind the scenes pushing on like you know how to check different versions and everything and you know versions of the cloud controller versions of Kubernetes so that's kind of some interesting stuff happening internally. Their kubelet credential provider plug in which we'll talk a little bit more about that later they've created images for that so they're all downloadable now. They've created this leader migration API to make their you know safe migrations for their KCM which was the entry to the out of tree CCM in their HA clusters and what they're going to be working on next is they're going to they would like to get a release policy out for the images they're creating so that you know people can know when to update and where to go to update. They would also like to improve their documentation and of course like testing testing testing. I feel like testing if it's not on every slide just imagine a testing testing testing on every slide. Yeah so we actually have a special guest here. Sadev Zala our chair for the IBM cloud provider is going to come up and give the update for IBM. So yeah come on up Sadev. Thank you so much Mike and Bridget and everyone. So I'll just brief on the progress on IBM cloud provider. It's one of the sub project. There are a lot of hyperlinks here. So we already shared the deck with you so you know all those links are reachable. You can reach out to us on SIG cloud provider Slack. We also have a provider IBM cloud Slack channel on the Cuban Slack so you know you can reach out there. We meet once a month so we would love you to join there. And then we have of course in a Google mailing list right. So under product IBM cloud we have four GitHub repos the cloud provider one that's the CCM implementations. It's always been out of three so we never you know we didn't have to deal with the pain of moving from entry to out of three because we started a little bit late in you know 2018 time frame. And that's the time you know this we were started to going in this direction as as Bridget and Mike say it's been taking time you know we're talking about out of three for a good couple three four years now. Cluster API that's another GitHub repo we have for IBM cloud. Right so there is a cluster API repo for life cycle management of cluster that's a Cuban it is repo itself right the project. And what we have is the extension of that for IBM cloud to have the cluster management lifecycle management there. We also two other repos one for managing life cycle of IBM VPC block data volumes and the second one is in a similar one but for the power vs. About you know IBM cloud provider repo itself you know this is the cloud provider that that that we use to run OpenShift on IBM cloud provider IBM cloud. We also use the same cloud provider to for our IBM cloud Kubernetes service or what we call IKS. Some of the work ongoing there is to make it more consumable so refactoring is going on some documents are going on as well. And as of today it's you know we're using it for OpenShift 4.11 to run on IBM cloud using for running you know Kubernetes 1.25 it's part of the IKS. And I have provided the list of folks they're working on on this different repose right we have one of the call it here rock topples I'm glad he's here others couldn't make it. But you know feel free to reach out to us and we'll be happy to you know connect with you and you know help you as you need. Well thank you so much appreciate awesome thanks to Dave. Thank you. All right. All right. And lastly we have the VMware provider update so they've got a link to the vSphere cloud provider. You can you know again download the sources from there check out their code. Their latest developments they so that for 1.25 they've done a bunch of bug fixes and they've also resolved some problems with their helm charts. So this will make it a lot easier if you're getting into deploying these things they've given you a little help here in terms of getting the image deployed in your cloud and getting it running properly. Their credentials manager now accepts an alternate format secret for IPv6 and they won't delete a VM that is temporarily unavailable. I'm guessing this was a problem for some people and they now have an ED testing pipeline set up as well. So for them like many of these other providers what's coming next is more documentation and more testing. Love to hear it. Okay. All right next we're going to kind of talk a little bit about SIG community or to be more specific we're going to talk about you because you're here because you want to know where you fit into this and we've got some ideas. Yeah so first of all I want to talk about like who we are I mean you know who we are because we introduced ourselves already but in terms of who the SIG chairs are and who the leadership of the SIG are. Nick Turner from AWS is one of our current co-chairs and technical lead. You can reach him at you know NCK Turner on GitHub and same thing on Slack as well. Andrew Sycam from Google he's also a co-chair and technical lead and he's Andrew Sycam on GitHub and I think it might be slightly different on Slack so find him on GitHub. And then Walter Fender also from Google is our technical lead and kind of emeritus chair. Chef Taco on GitHub and also on Slack. Yeah and that's we wanted to highlight them because while they are not able to be here at the conference today. They're very active and present in the community so we want to make sure you know about them and know you can reach out to them or ask them questions. And then we also would be remiss if we didn't talk about the other SIGs we interact with the most. Yeah totally so like we do have a lot of crossover and I think you know Bridget and I were talking about this the other day and it was like well what you know what do you what do you cross over with the most what do I cross over with and it was actually interesting that we both kind of like looking at different areas so like. SIG networking and SIG node. We tend to do a lot of crossovers there and we're always talking about you know think like you said IPv4 IP you know this is the century of IPv6 right so. Yeah we do a lot of talking about how do we you know find bugs there and everything because doing the CCM work we're doing a lot of these low level like kind of networking things and we're coming up with some bugs and finding things and then SIG node as well because there's a lot of interaction going on between how the cloud these new external cloud providers how they. Taint the node are they untaint the nodes when they become ready and there's a little interaction going on there to set the note up and then. You know SIG auth is another big one because there's always something going on with you know I don't have my credentials yeah yeah exactly okay. And so then we we did mention a big cap that's going on at the beginning but we have some other ones going on to you want to tell us about a mic. Yeah so two of the other caps that one of them is in progress right now and the other one is going into GA so this. Yeah so like oh I just wanted to say like let's repeat and like not forget that first one because I'm like we're jumping over it but. We have more detail about the second two on the next couple slides but let's remind people why do we care about removing entry. Yeah totally totally I mean like. Yes I did skip over the first one pretty quick there but yeah of course go back and check out 2395. It is worth repeating that we are going to try to remove the entry providers in 1.26. So if the test pass when you upgrade to 1.26 those feature gates will be enabled by default so that means that the. Kubelet will now be set to use external cloud providers so be prepared for that. So what do you expect the experience of somebody who's just happily going along using a cloud provider of their choice. And completely ignores that and 1.26 comes and we change the defaults and then they're on 1.26. What do you expect will happen right so today when we run the Kubelet if we're using a cloud provider let's say we're using Azure. I will pass a command line flag to the Kubelet you know minus minus cloud provider equal Azure and that tells the cloud provider to. You know the Kubelet to run that cloud provider now if I don't change anything and then I upgrade to 1.26 and these feature gates are enabled the Kubelet is probably going to crash right off the bat because those pathways aren't going to work anymore. So that might be the first thing you would see but if you had some other methodology where you were you know maybe using a different cloud provider or we're trying to use cloud provider none or something like that or no cloud provider. You may or may not see a problem here it kind of depends what your interaction with the underlying infrastructure is but the first thing I would look for is you know Kubelet log errors for sure. Yeah, absolutely. All right and then tell us what the other two are and then we'll go into detail. Yeah, so kept 2699 is a kept we're working on right now we'd like to add web hook hosting to the CCM. And I'll talk about that a little bit why we're doing that on the follow up slides but we need help reviewing that so please come around and take a look at it. And then kept 2133. This is going to add some new functionality and it goes hand in hand with what's happening in 2395 the removal process. It may or may not be important to you depending on what platforms you're running on or what functionality you're adding. We'll have another slide about that as well. All right, awesome. So let's talk about these web hooks. Yeah, so adding web hooks. You know this is kind of a common pattern if you're familiar with Kubernetes you've probably come across web hooks, love them or hate them. You know they're here to stay, I guess for now. But what we would like to do is add these into the CCMs and the reason we want to do this is because there is a volume label that pvs use this persistent volume label. And it, I think if I remember correctly, it has something to do with like the zoning of the storage or something. But when these are created, you need to be able to have an emission web hook to kind of set things up and make sure that everything is correct for the the Kublet that's coming up that's going to be initialized. This also gives an opportunity to kind of run fewer processes in the control plane as well. So you, you know, you can kind of centralize some of these web hooks in a way where you could have a, you know, a single web hook provider for the entire cloud so you can kind of reduce some of the workload that's going on there and there's a link to check it out to read more. And so that's a good one for people to get involved, test it, try it. Yes, we need testers, reviewers. Yeah, for sure. This one is still very much in progress right now. And so if you're looking for a place where you can start being a participant in a cloud provider, this is a great one. Yeah, absolutely. And we got another one. So this other one kept 23, 2133 about the Kublet credential provider. Now this is going into GA in 1.26 and it's defining, I wouldn't say a new API, but a way to do something that had previously been done in tree. So on AWS, Azure and GCP currently, there is an entry credential provider that can acquire credentials to get container images from those clouds. In much the same way that the CCMs are being moved out, this mechanism is also being moved out and an API is being created around the controllers that can now do that work outside of the Kublet. So what this means is that it gives an opportunity for new cloud providers, other cloud providers, you know, perhaps IBM or OpenStack or whatever to start creating these credential controllers in the cases where you might need them. And there's a little history here of it at the bottom. Yeah, awesome. Okay.  And here's where to get involved. I mean, probably the first place to check out is the SIG community repo. Definitely. Yeah, there's lots of good information there about meetings and like a lot of the information we have here is also duplicated there. So if you check out one link, like go check out that one. And we meet every other Wednesday. Yep. And I probably, I would say like the C cloud provider Slack channel is not too busy, but it's a great place to reach us. At least I have the notifications turned on for that one. So I tend to hang out there a lot.   Where's something with a little more substance that I can dig in and really start learning and understanding. Yeah, this last link to the cloud provider repo. This is like a library or framework or whatever you want to call it that we that all the new cloud providers are built off of. And this was, this was created by distilling the logic that existed in tree and pulling it out. And then what that allowed us to do was take all the entry providers use this new external library and move them all out built on top of that. And so I think it's kind of interesting just to learn about if you're really into like kind of getting into the tech. It's a great thing to become familiar about become curious about it and then, you know, maybe build your own cloud provider or help out or whatever, you know. Yeah, absolutely. Okay. So that's pretty much what we got. Thank you much for joining us.  And I'll be at the SIG meet and greet this Friday. So which I guess is probably just right around the corner from here the 411 I guess is next. I think it's right over here. Yeah, so come say hi if you got any questions or want to know how to get involved or whatever like yeah we'll be there for a couple hours hanging out. All right. Thank you. And we have a few minutes for questions if people have any questions. I'll take the mic. All right, Jack, this better be a good one. Hi, thanks everybody. So when you are adopting the new out of tree cloud provider is that just a kind of hygiene exercise for your, for your cubelet or are there new features and new bug fixes in out of tree compared to entry. So that that is a nuanced and interesting question because as Jack is correctly pointing out, once we've digressed from the entry single code base to rule them all. Yeah, I pretty much guarantee that every out of tree provider is going to have different exciting new bugs. Yeah, absolutely right plus one everything Bridget said and and I think the other thing that's interesting to note about that too is that over the last few cycles we have been not accepting new patches to the entry providers. So the out of tree providers, depending on which except for yes, I've been chasing a lot of like, and now we should backport this cherry pick of this bug fix. Let's go find the reviewers who can get it into this particular release. Yeah, so like, so I think looking forward, the out of tree cloud providers are probably getting features that the entry cloud providers have not been having because, you know, like Bridget saying we're only taking security backports into the into the entry. So and in the future, that's where they're all going to go. So yeah, thanks for the great talk. So as I can maybe follow up to the previous question, you know, one of the things that happens whenever you decouple, you know, code is now you have a synchronization issue. Do you have like, I don't know, testing policies to in place to like make sure that these new out of tree things stay synced with the latest cube and everything. And we started, I think we started, didn't you start with a discussion of testing? Like this is, thank you, you're taking us full circle to why this tells us exactly why Mike said testing is going to be paramount. Yeah, totally. And I think there's actually an interesting kind of detail here and it's, you know, we don't have a slide for it because this is more kind of like, for lack of a better word, like a skunk works project that's going on inside signal cloud provider. We've talked about it for several cycles, but we've never actually kind of achieved it. And we were working on something called least known good. And this was going to be a testing matrix or it is a testing matrix. We're trying to figure out how to make it work where we can test versions of Kubernetes against versions of the cloud providers. And so we can, we can have kind of a matrix of different ways to test it. And so the idea would be that we would, we would do the least known good testing. And from that we would, we would have a list of where, you know, problem areas are and whatnot. So we have some ideas about it. I think aside from the integration testing we have going right now, you know, that'll be our, that'll be kind of like our red line for the moment. And then in the future, I think we'd like to get into this least known good. It would probably be most useful as we're going through this like transition phase from the entry to the out of tree. But it could be useful in the future as well, just to kind of create this matrix of options. So yeah, thank you. Good question. And that's probably a good place to. Oh, we have what we have one more question from over here and then we'll, I suspect that this is going to help us segue to the where to go. Maybe not. Thank you. This was really interesting. I was just going to ask, now that all the club writers are kind of doing their own thing in their own repo. Do you see an opportunity for them to collaborate together and stay in sync to ensure like consistency and, you know, user experience that translates from one club provider to another. And I think that we can take example from other SIGs like a SIG cluster lifecycle. I think I know it the CAPI umbrella project certainly informs CAPSI and all of the other cluster API sub projects. I don't think we have that kind of structure yet, but maybe we need to be thinking about growing something like that. What do you think Mike? Yeah, no, I mean, I think it's a good idea like you're absolutely right like right now. You know, so I go to a lot of cluster API stuff to you know, shout out to my friends here. I think the cluster API community has like a much stronger idea of like how to keep cadence between the core of the project and the kind of the individual providers. You know, we do have meetings and you know, we attract people to come and ask questions and talk but we haven't created the same kind of mechanisms for doing that collaboration. I think the cloud provider is the main point of collaboration. And so probably like enhancements would come there, but then each individual cloud provider could start to vary and it might be tough for us to kind of organize that. So I mean, I think it's a cool idea. So I'm going to talk about for sure. I like the idea and I think that maybe that just takes us back to our message of testing. We're going to probably need to create a reasonable set of a test suite that kind of helps ensure minimum consistency is met whatever we're determining the minimum consistency needs to be like. Oh gosh, this cloud provider doesn't pass any of the tests that the other cloud providers test. Maybe we need to get some more viewers in there. Maybe we need to get some more maintainers in there. Yeah, for sure. You know, I think our meetings are pretty lightly attended now too. It'd be great just to see more involvement from the individual, you know, cloud operators and whatnot. And just, you know, we have a group of about six to 10 of us that meet pretty regularly, but it's always great to see a lot of activity there. So I'm here for it. All right. So on that note, I think we're about out of time. And so I just want to thank you all and tell you, yes, please take a look at CIG cloud provider if that's interesting to you, because it's definitely a place where you can jump in and make a pretty big difference pretty quickly. Absolutely. Thanks. Thanks.