So in the last videos, in the last segment, I guess, what we did was we took our crab apples and we got them ready for us to do, make our crab apple paste, right? Or a crab apple jam, if you want to think about it that way, because that's the way we've been treating it. We were eating it last year, right? So I got, basically it ended up being, we got two of these buckets, right? Of crab apples and I've only cleaned one. Okay, so what we're gonna do, is this the one that I cleaned? Let's check it out, I should be the one to put that on the counter. This guy, yeah. So this is the one we cleaned. Let's put the lid over here. So let me show you what this looks like. And this is what we spent, you know, the last session cleaning, right? I just got rid of the stems of a lot of these. Well, I got rid of the stems. You know, some of them I could pull off, majority of them I just ended up cutting. So it just cut it down to a little bit right there, right? That way when we cook this up, because the crab apples do break down, like when you heat them up, it's pretty interesting actually. I noticed the last year was all of a sudden, they just start crumbling, right? So what we do, we take that paste, I guess, and we have a, here, let me show you this, I'm gonna put this here, we have this thing.  And what it does is it's got different size sieves, right? So I believe, no, we didn't use a thick one, I think we used, I don't know if we used the smallest one. This is the medium-sized one, and then there's another one here. This is the smallest sieve. I don't think we used this one, this was too small I think. But we do have to stop the seeds from going. So I'm gonna try the middle one first. I can't remember what we did last year. That's the problem when you do things once a year, right? If you don't write it down, you tend to forget, right? So what we're gonna do is, this time that I make it or that, you know, I'm gonna write down exactly what it is that I did because it worked out really well last time and we should have done it, but we didn't. So we'll see if we can repeat what we did last year, okay? So basically, what I have to do right now is wash these crab apples, right? So I'm just gonna let the water run on it, okay?  And then what we're gonna do is, we're gonna do two pots. And I might, you know, depending on how many crab apples I feel like, you know, getting in there, I got the scale set up here. So we're gonna measure and we're gonna use a ratio of two to one. So whatever it ends up being, two units of crab apples to one unit of sugar. So, you know, I got the buckets. We got the buckets, we got the buckets right there, right? So I'm gonna use those. I don't know how much those weigh. So whatever that is, I'm gonna, you know, measure it. And then the number we get, we're gonna multiply that's the total and we're gonna have that to get the sugar, right? So this water is almost filled up. That's really nice, actually. This is gonna be heavy, I think. Oh yeah, but I'm gonna show it to you. So the crab apples are sort of floating up top. I'm not gonna tilt it too much because the water's there, right? So I'm just gonna, you know, play with it a little bit and let the crab apples wash. Okay, so we're gonna let it soak a little bit. And the recipe is really simple. It's two to one ratio of crab apples to sugar, right? And then all I do for each one of these pots, if I remember correctly, we put in anywhere between one to two squishes of lemon, lemons, lemon juice, right?  So what I'm gonna do right now is basically drain the crab apples, right? And then fill it up with water again. So, you know, get rid of, they were pretty clean because it recently rained a little bit. And, you know, we checked them when we were doing it. They just had a little bit of dust on them, stuff like this, right? So we're just gonna drain it, fill it up again and then start weighing, doing our measurements. Okay. So I'm gonna use the lid to hold back the crab apples so I can drain it completely of water. I'm just gonna give them one more rinse. And then we're gonna start just doing our measurements. Let's drain it one more time. Yeah, right, nicely washed, right? Nice and bright. They look great. And they're really, really tart, these ones. I'm gonna pop one and I'm not gonna talk for a few seconds or a minute or so, actually let's do a half of one. Yeah, this is one of the ones we cleaned up. Very tart, very good. I need to drink water after that. It's so good. And the scale thing I have is very hokey pokey, right? It's like, it's not even leveled. So I'm just gonna use this. So it's approximate everything that I'm doing. Okay, so let's do this. And I have a little sticky, little pen so I'm gonna write down what I'm doing. So we're gonna do a few measurements. So let's do, we'll do this pot first. I don't know what size this is. I don't know if pots say the size in the back of them or not. Yes, it does. 7.7 liters, it says, right? So we're not gonna fill up the whole thing. So 7.7 liters, I'm gonna do the weight-wise. So one of these guys, about this much, is about a pound, okay? So that's about a pound. So I'm just gonna count how many of these I'm gonna put in each pot, okay? That's the way we're gonna do it, approximation, right? So there's one. So this is another pound. I just wait the second one so I can get a good visual for it, that way I have a good feel for what a pound is approximately gonna be. So that's two pounds, right? So all I'm gonna do, I don't need the scale anymore. So one, two. So all I'm doing is putting in ticks. He's dark enough for you to see, you get the reflection. So that's two pounds, right? Two tick marks. I'm gonna do, so that would be four. Two more ticks. I'm just gonna put one more, make it five. So that's five. Five in this one, okay? I'll show you how full it's getting. So that took five pounds of crab apples. So I'm gonna put two and a half pounds of sugar in here, okay? I'll see, I'll see what it looks like as well. I go by, by visual a lot as well. See how I'm gonna get put in this one. Worked out well. Empty bucket, drain this. Since these guys were on the bottom, just gonna give them another wash. So that's a little bit less than a pound, right? So I'm just gonna grab like a handful from here and throw it here and that'll balance things out, okay? Now we gotta throw the sugar in here. So there was five in each. I'm gonna call this the black pot just in case I changed the recipe on it, right? So actually let's do it like this. Let's use two different stickies for the two different pots and see where we end up, right? So five pounds crab apple, five pounds of crab apple. I think you spell it like that. And then five pounds crab apple black. So the black pot, five pounds of crab apples. I'm gonna add two and a half pounds of sugar to each one because the ratio's two to one, right? So 2.5 pounds sugar. Let's see how much that looks like. And if it looks a little bit too much, I'm not gonna add that much. We'll kick it down. And I just have another plastic container that I'm gonna use. I'm trying to reduce my use of plastic containers but I gotta get a better scale because that thing, the glass would be too heavy for it, right? And the type of sugar I'm using is the type of sugar is cane sugar, okay? Organic cane sugar. And organic cane sugar, it's really sweet. The sweetness factor is more. So I might actually use less sugar. I might do two, two pounds instead of two and a half. I'm gonna taste the sugar when I crack it open. The sugar can be sticky so I'm just gonna cut this in the sink because I don't want sugar everywhere. See, this is, here, I poured this in here. Let me show you. This is the cane sugar and that's half a pound. And that seems like a lot to me. So I'm gonna pour more. Maybe I'll take it to one and a half pounds. We'll see. That's a little bit over one. It was about one and a quarter. So let's check this out. And that's one and a half, okay? So what I'm gonna do, I'm gonna make the black one, one and a half pounds of cane sugar. And the other one, I'm gonna make it two, okay? So let's take this to there. And now we're gonna do, since this thing was pretty full up, I had one and a half pounds, so I'm gonna do one pound at a time for the black pot or for the other pot. So let's check this. So that's one pound. Okay, so now that we've got an idea of how much that is, a little bit less. Oh gosh, way less. So that ends up being two pounds of sugar. Now, I'm gonna keep the sugar here still because I'm gonna taste it once it breaks down a little bit and see if it needs a little bit more sweetness or not. Actually, I was gonna taste the sugar to see how sweet it was, wasn't I? Let's check this out. It's got a smoky flavor to it. That's good. That's enough sweetness, hopefully anyway. So what I'm gonna do now is, now these pots, these stove tops we're getting used to, they're really strong after a certain temperature, they kick up, so they're pretty powerful. So I'm gonna put these on low heat. This one I'm gonna, wow, low-ish. I'm gonna put on level, actually you're supposed to kick it up and then bring it down. So I'm gonna put this on medium, right in the middle. So if it's going from a range of one to nine, I'm putting it at five. It says right in the middle basically, okay? And this one I'm gonna put, it's on a single or a double. So actually I should write this down first. So this one, the sugar was two pounds and this one was 1.5 pound, sugar cane and the black one was one and a half pounds, right? So this one, the single, yeah, let's do it single. And I'm gonna put this one in the middle as well. Now what I'm gonna do is, I'm gonna add a half a cup of water to each one, okay? So we need half a cup. And I do approximate, on the mid, on mid, it's even doing that, let me pour half a cup in there. That's a little bit more than half a cup. That's about three quarters of a cup. And what else I need to do is cut up lemons and put lemons in there, right? Lemon juice. So let me grab a knife.  They're not big lemons, right? Little guys and the other one I didn't bring the other half over, about the same, right? If I do perspective, huge, right, about the same. So let's do them in this. I don't like how strong this is going. I'm gonna turn it down a little bit, okay? And I wanna put the lids on them for now. So I'm kicking this guy down to a four now, okay? Four out of nine. If it starts off from, goes from one to nine, I'm kicking it to a four. So what I gotta do is get rid of the seeds in this because the seeds come out with the lemon, right? It's got a lot of seeds. So I'm gonna do this. Where is our little funnel thing? I'm gonna do this, I'm gonna use our cup. So just use a funnel and the lemon juice, easy. And then all I'm gonna do is just push on this. That's good enough, this thing's going too powerful. So I'm kicking it down to three now on this, okay? Because I don't want anything to burn at the bottom of the pot. If you ever made jam, if you burn the bottom, takes a lot of work to do to clean it, right? Jam is tricky. So let's throw this in. And we gotta do the same thing. Now I don't want to get rid of this, it's, it's, it'll be a waste because that you can use for tea or something. So I'm just gonna save it. Put this getting back here. Let's cut another two lemons and do the same thing. This time I've got more juice out of these. Looks like it anyway. I'm just gonna, you know, saving the pulps because when I make tea, I just put a little bit in there. Okay? Delicious. We're done with that. And this one we're gonna pour in this. Now this guy's going crazy. So let's switch this up. We're going to do is bring this out. We don't need this, we don't need this. And I keep the, and I keep the lemon peels. I take jars of water and I just throw the lemons in there and I drink lemon water. If you've seen some of my videos, you'll see, you know, I have sometimes it's just lemon just sticking, sticking in them. Sometimes I take fresh squeeze, but if I do something like this, I just use these guys up. I just put these in the fridge and one at a time. Or sometimes I take jars and I have a couple of jars in the fridge. Maybe I'll show you. I'll take jars and put the lemons in them. Let me show you. I'll cover up the label. But basically take a jar, put lemons in there, cut them up to quarters, whatever size you want and put it in there. Nice cold, fresh lemon water in the fridge. It's really delicious actually. Makes me want to have some. So let's dump our water. And it tastes lemony and you also get some of the, from what I understand anyway, some of the oils of the lemon is supposed to be good for you. And usually lemons that I put in there, I can fill that up like two or three times and still use the same lemons.  I need to mix these up a little bit. So what I'm going to do is, we're done with the scale. We're done with all this stuff. So all we have to do now is, let this thing cook. And I'm going to let it cook for, well, I'm going to keep an eye on it. I'm going to keep the temperature low. This is the first time we're making, actually I've made a couple of quick plumb jams and stuff here. I've been cooking here for a few months, but I haven't made anything large like this, like jam or spread or anything. So I'm going to keep a close eye on these. Usually an hour or two hours, I'm going to let it cook on low heat, let it break down. And then when it's ready, I bring jars and I heat up the jars in the oven to get them at a nice hot temperature, same temperature as the apple sauce or apple spread, apple jam, right? That way the glass is sterilized and the temperature of the glass is going to be about the same as the temperature or hotter, actually hotter, not too hotter because they crack, but almost the same temperatures as the apple spread, apple jam. And then when you put it in there, the glass doesn't crack and it's nice and hot, sterilizes and I put the lids on top and they all seal when they start cooling, right? So that's what I'm going to do. And I'm going to constantly come and mix these up and we'll see where we end up, okay? We'll see where we go. Hopefully it tastes good. If it does, I'll definitely, well, this is going to be a permanent recipe. So so far, oh, I forgot to add the lemons on here, right? So I put two small lemon juices in each, right? Two small lemon juice. Two small lemons. And that's all, that's all this thing contains. We'll see where it goes. Hopefully it comes out delicious. Okay, I'll see you guys in the next video.


My name is Daniel Crook. I've recently joined the CNCF to help improve the developer experience for our growing number of projects at the CNCF, including Kubernetes, but also dozens over 100 and more. So I'm here to give you a heartfelt namaskada, Bangaluru, and a warm welcome to Cube Day India 2023. I first visited the city 15 years ago, and it's amazing to see how much it's grown in those past years. Particularly in the last few years, as the cloud native community has grown here and how you've influenced open source around the world. So I'm also very excited to see how many of you are here today, with us over 1,000 in attendance, making this the biggest Cube Day ever. Cube days like this are very important for the CNCF to meet communities where they are, particularly for folks who are not able to go to the multi-day week-long events in North America, Europe, or in China. And I look forward to talking to many more of you today. I've spoken to some folks already, both at this event and at the reception later today. So before we actually get into the program, let me take a few minutes to talk about the growth of the CNCF itself and how the community here has had an impact on that. India's been a major driver of growth of open source projects at the CNCF.  Starting with Kubernetes in 2015 and growing rapidly since, we're now over 170 projects at the CNCF with 220,000 contributors, many of whom are in this room today. All right, so digging deeper into that number of contributors and end users, we have nine companies, headquartered in India, that are members of the CNCF, including platinum members, Infosys, and HCL. And that, of course, doesn't include global companies with offices here such as Amazon, Microsoft, Google, and IBM that are part of this fast-growing community. Together with those projects and companies, we recognize a great group of CNCF ambassadors. There are over 30 of them across the country. And many of them are in the audience here tonight today. And I'm glad to meet several of them last night in early this morning at the breakfast. These folks are key to sharing knowledge about cloud-native technologies, mentoring beginners, and building the cloud-native community. They can help you join our movement as well. So please introduce yourselves to them when you have a chance. OK, beyond today's conference, there are many other grassroots communities within India.  There are 36 active community groups in India. And they've held nearly 100 events already, reaching 7,000 members, half of which are new to cloud-native this year. There's also been three official Kubernetes community days, one in Chennai with over 400 attendees, another in Mumbai with over 360. And of course, KCD Bengaluru, the largest with nearly 700 attendees. KCDs are so popular in India that the key industry and analysts observe the attendance of these events to gauge the size of the cloud-native market across Asia. And thank you in particular to KCD organizers, like those in Mumbai, who are setting an example and making space for new KCDs in additional cities. So there'll be an event in Kerala happening in February, Pune in April, and Hyderabad in June. And a shout out to India's efforts in cloud-native sustainability. It's helping this emerging model that consumes a lot of power be more efficient and be more responsible stewards of our planet. And one of the event chairs of our event today, Nancy Chuan, was one of the key organizers of Sustainability Week globally. She also started the Women in Cloud, Women in Cloud Native Group, and I encourage you to check out the Slack channel hashtag CNCF-Women in the CNCF Slack workspace. So let's just take a quick look at how the impact of those people, companies, and communities have come together on the global stage and made an impact. India is ranked number four in the world for contributions to CNCF projects. And that's 6% of contributions globally with over 90,000 contributions this year alone. If you look just at Kubernetes, India is ranked number five. That's 7% of global contributions and over 20,000 contributions this year. OK, so what's the best way to join this community and get started in Cloud Native? One way is to look how key contributors have blazed a path for folks before you. Nikita Raghunath, her journey is a phenomenal example. Six years ago, she started in the community as a Google Summer of Code intern, and within six years joined the Technical Oversight Committee of the CNCF. It's leading strategic body for technology. You'll also see her on stage at KubeCon throughout 2024, as she's the KubeCon chair incoming for those events next year. So everybody's path will look different. Everyone's path will look different, but maybe you too can get started on the road as a mentee in the Linux Foundation or CNCF mentoring programs, work your way up to being a technical contributor and taking on a leadership role in the community. If you're interested in getting more deeply involved in the Cloud Native community, I urge you to check out this presentation with some workshops on Kubernetes contributions. It's from KubeCon, and all the talks and presentations from previous KubeCons, including the one in Chicago, are available on YouTube for you to check out now. For other ways to get started, visit contribute.cncf.io. Tag contributor strategy recently updated that with entry points for lots of different communities to get started. And as I wrap up this welcome to the single-Cube Day India, let me ask you, what's better than a single-day Cloud Native event? That's right, a full-blown, week-long KubeCon, and one's coming to India next year. So stay tuned for the location and the date. Those haven't been set yet. But stay abreast of that information. And one last request before I pass the floor to our program chairs. Please have a look at our annual survey and provide your input. There's a training and certification discount for those who fill it out. So please do provide your expertise, your input there. It's much appreciated. OK, so with that, let's get on with the program. I hope you have a great event, learned a lot, and meet many new friends. Thank you.


Well, the Trump administration trying to ease the impact of retaliations from this trade battle, announcing $12 billion in aid to farmers who have been hurt, deliberately hurt by the way, by China and other nations, and ironically, in violation of World Trade Organization reforms. Of course, we know the goal here is to drive a wedge between President Trump and really the folks that helped propel him into the White House, and knowing that the mainstream media and others will falsely jump on this and say, oh man, what about the farmers? What about the soybean farmers? They never cared about them until today. Well, President Trump took care of that. But now the debate is, is it the smart move today? We know it's not Capitalism 101, but is it the right thing to do in the midst of a trade war when China is trying to crush our farmers? Here now to discuss, we've got Danine Borelli and Melissa Armo, the Stockswhos person. Of course, DanineCRTV.com. All right, let me start with you, Melissa, because Wall Street, of course, oh, you know, this is not the right thing to do. None of this, according to Wall Street, is the right thing to do. The status quo is the right thing to do.  That's great for Wall Street. But what about Main Street? What about the farmers? Should we allow them to suffer because it's not Trump, by the way, China is deliberately targeting them? Well, you're absolutely right. And actually, this came out today, but the market really didn't have a huge negative reaction. We backed up this morning, great earnings from Google last night. The market held, had a short-term drop-off, but held up today. And I think overall, this is the right thing to do. We can't lose our farmers. Trump is supporting the American farmer. We need them. And, you know, if you think back 10 years ago, 2008, we bailed out the banks. Talk about Wall Street. We bailed out the banks. Right. It's 200, 700 billion. And since then, you've bailed out $1.5 trillion to keep them afloat, huh? Right. How many people watching this show got any of that money? All right, Danine. 2012, soybean prices metric ton peak, the 1788, when Trump came in office around 900, they actually went down to 850. It's the same thing with corn. The prices peaked in 2012, in fact, on July 16th, down more than 50% since then. I never saw one story, and it will cover the Wall Street Journal, front page of the Journal, front page of the Post, front page of the New York Times, about the plight of the farmers, the corn farmers. I understand now that they're being used as a political tool, and that's why I think this was the only move that President Trump had, because the media and the pundits that don't want him to win this thing are being disingenuous about now their love affair for American farmers. Well, sure. And I totally agree. And what you're seeing is selective outrage from the media in their reporting.  But what I see President Trump doing, yes, I know he's trying to do something for our hardworking farmers. A lot of them are family owned. Personally, I am not in favor of bailouts. I believe in a free market. But I do see President... Is it a free market? Well, it would be if the trade wasn't so imbalanced and... But it's not right now. I mean, do you think we're really in a global free markets? Because there are tariffs. There are trades. There are regulatory, you know, there are fees, there are, you know, all kinds of different things. Is this truly an honest to goodness on paper, on paper, what you say it was a free market? And we live in a free market society. So we have market capability. So our relationship with China is a free market. No, it's not that that's what I'm trying to get to. It is lopsided. So this is what President Trump is bringing attention to. Americans really did not know about this, to this magnitude, this depth, especially when it comes to intellectual property. So it's bringing spotlight on this issue, trying to get better trade negotiation deals with America. I love that point because, you know, what a lot of purists are saying, Melissa, is that well, we've always had these voluntary, you know, relationships. You sell us something. We give you something back. But I don't think Americans understood what was behind there, you know, the Wizard of Oz sort of thing. What was behind this and what was actually going into this and what was going to happen to them, to them for this falsely and dill, for accepting all this cheap stuff, the majority of it, going to garbage dump anywhere in the next three years. I think Americans are reawakening. You could call it buyers or more.  I know we are the strongest economy in the world and we should not blink. How do you see it playing out? Because right now, to your point, the markets aren't as afraid as the pundits tell us they are. No. And remember, the markets really don't like tariffs, but the markets do love Trump. And in some regard, the markets almost have a little faith in Trump. I mean, when you look at these things that are happening, the markets are holding tough. And so is Trump. So you got to give Trump credit. He's trying to press this forward as hard as he can. And by him doing this, it's like a one-up of you for the Chinese that it's saying, well, do whatever you got to do because we're in it for the long haul. And he's hoping to push it forward so it doesn't last that long. How ironic that China is the latest moves from China, lower taxes and infrastructure. Right. Then taking the Trump playbook, you know, if the Dems think the Chinese are so great, maybe we'll get infrastructure reform. Ladies, thank you both very much. Thanks. Appreciate it. So we've got this government agency plagued by controversies. We all know about it. Well, now they have a new leader, and a lot of people think we're going to see brighter days ahead. We're talking about the veterans. We'll discuss it next.


Hello everybody and welcome to another hobby cheating video. Today we're going to talk about finding your painting zen. Now a lot of times when you're painting it can be a little stressful. Sometimes you can get down.  Now one technique is to do like I do here and have a nice dog that you can pet and relax. She doesn't want to be on camera apparently but if you don't have that or maybe even if you do there are some techniques you can do in painting that we're going to talk about today. A very simple technique that I use all the time to keep myself on the road always improving, always learning and still painting. Hope you enjoy. Our story today begins with the humble claw lord. Yes this little guy from Games Workshop. The claw lord, the hero of this game and army. Now over my time I've painted quite a few claw lords and in fact that's what this video is about. Not specifically painting claw lords but why I paint them. There's the first one I painted long ago you can see the reds all glossy. Here's another one I painted. I paint a lot of them because they give me a chance to learn. For example when I did those and rebase them it gave me a chance to learn here with making a new kind of cool base. My sewer bases video you can check that out up in the corner. But it gave me a chance to do something new. Claw lords I have eight of them. You can't feel more than six in an army and you really never need more than one. But I keep painting them because there's no pressure when I paint them. They're not for a competition. They're for an army I don't really need any more models for. I have 10,000 plus points. There's something I can just have fun with.  If I want to try a different company's miniature like I did here oh cool a different range somebody makes a different one. Let me try that. If I want to try some kind of different painting techniques or experiment with weird things like hey I wonder if I can do dripping poison or I wonder if I can have armor that just has this slight color reflection on it. You know I'll give that a try. And if I don't like it or the experiment fails who cares? Because in the end I didn't need the fig. I wasn't under crunch for an army. I wasn't painting for a competition. But I can use it to learn as well. On this guy I practiced doing OSL having a green glow coming up from the sewers and really understanding that green light. I ended up using it more here on this fig which was then entered into competitions needed pretty well. And I wouldn't have done this if I hadn't have done the other fig to just learn and experiment. When I did this guy I thought I wonder if I can make shadows in armor more interesting especially looking old armor. Can I hide other colors in there I had seen other painters doing it. And so I wanted to experiment with new recipes for non-metallic new colors new combinations trying different things out. When it came to skig here my claw lord for my for my soulbound game it was a chance to learn how to paint an entire fig in oils. And do a tutorial about it. And you can see that right here. This was me painting skig completely in oil paints I have this tutorial again you can find it up in the top corner if you want to go check it out. Now I painted in oils before but usually only parts of the miniature I hadn't done the whole mini in oils so I got to challenge myself. And teach people at the same time as I push myself beyond what I would normally do. And in the end I got a fig out of it that I quite enjoy. I thought it was a lot of fun to paint. And I still use them all the time. So these figs allow me to experiment to do something different or even to just continue learning and continue refining. This guy showed up in a recent video on steel non-metallic metal something I'm always trying to work to get better on. And he gave me one more chance to practice again on something where if I messed it up who cares. But I could try different colors, different techniques, different ways to manipulate the paint. And there's no pressure. I paint them for as long as I feel like painting them. I stop when I feel like I'm done. But I constantly get to be learning.  So there you go. If you like this, give it a like, subscribe for more hobby cheating in the future. And as always, I thank you very much for watching.


If I could start to work with elite-level players and programs, people would infer that I'm a really good strength and conditioning coach. They would make that assumption. What I did was I started reaching out to Montrose Christian, which was based in Rockville, Maryland. It's where Kevin Durant ended up graduating high school. But at the time, this was 2000... I started reaching out, I think, in 2001, maybe 2002. They still had a history of producing Division I players and players that would matriculate up to the NBA. So I figured while I'm training soccer moms and lawyers and lacrosse players, if I could be a part of the Montrose Christian program and start working with elite-level basketball players, people would start to assume that this national program has this strength and conditioning coach. He must be a national-level strength and conditioning coach. The coach was a gentleman named Stu Vetter, and he's one of the best high school basketball coaches to ever do it. The only way I could reach out to this guy without stalking him and showing up at his house was literally to send faxes or I could handwrite letters. And I started doing that and basically said, look, I love basketball and I love performance training. You have a tremendous program. I would love to volunteer and offer you professional-level strength and conditioning services for your team for nothing. All I want is the experience to work with your players, and I'd love to learn from you as a coach. It took two years before I ever even got a response. Like, you want to talk about sending faxes and nothing coming back and writing letters. And the response I got was one time I finally just randomly called the office and one of his assistants picked up. I mean, I was startled because at this point all I was doing was leaving voicemails before and now I was talking to a human being. I forgot what I was even going to say. Like, I was just making my routine call and ended up talking to this gentleman who was an assistant. And to this day, he's an assistant coach with the Washington Wizards and is one of my really good friends.  So yes, this is perfect timing for you to come in and help me and let's do some stuff behind the scenes. And once our players start getting bigger, faster, and stronger, then I'll tell Coach Vetter that you were the one that did it and he'll bring you on. And that was our plan and that was what we did. And that first summer, Coach Vetter didn't even know that I was working with his players and they made some great progress. I mean, players gained 10, 12 pounds over the summer. They came back in great shape. And then Coach Adkins, true to what he promised, said, Coach Vetter, this guy, Allen, is the reason that our players are better. He was the one that worked with him for free all summer. And that began my relationship with Montrose. And at the time, Montrose was one of a dozen Nike flagship schools that Nike sponsored to the degree of some of the college programs were all familiar with. So at that time, Coach Vetter started to introduce me to people at Nike. And a few years later is when they started up their summer skills academies where they made these camps for guys like Kobe Bryant and LeBron James. And at the time, it was Vince Carter. And at that time, I was really the only strength and conditioning coach on Nike's radar. And it was all through that relationship. I've gotten to see guys when they were 14, 15 years old before they became the great players they are today. And then through that introduction, I got to work camps for guys like Kobe and Steve Nash and LeBron James. But there were so many key points of just persistence of sticking with it that led to those opportunities.


This is stock number 10593. We are here at Summit Automotive in Fond du Lac, Wisconsin near new and used sports car headquarters Today we are checking out One of the lowest mileage 2013 Shelby GT500 Cars we have ever had on our lot This one has the 5.8 liter supercharged VA motor with 662 horsepower. It has been fully safety and inspected by our service shop Has a fresh oil and filter change. All the fluids have been checked and topped off This car is 100 ready to go and this car only has 330 original miles on it Black clear coat is the color you get the race red stripes over the top and on the sides And we shoot all of our videos in 1080p 60 frames per second. So if you have hd capabilities on your computer tablet or smartphone device Turn them on right now because it is definitely your best way to ensure the quality And condition of the vehicle before seeing it in person And if you want to check out all the photos on this car in the upper right hand part of your screen Is a link right to our website click that and check us out there. This one comes with the svt performance package, which gives you these gray painted rims You got brembo brakes in the front and it has a good year ego f1 265 40 zr 19 tires On the front here And they obviously only have 330 miles on them Just an amazing Amazingly clean car The front bumper is in excellent shape I didn't see any dense dings or cracks on that it does come with the hid headlamps The led running lights The factory fog lights The cull hood Those stripes are in excellent shape as well. I didn't see any scuffs or scrapes on them And just a very nice car Now those lower skirts looks like might have hit On the bottom here just a little bit, but you can replace those pretty easy And inexpensively So we just leave them how they are Passengers side fender is in excellent shape no dense or dings on that and the passenger side rim Is in excellent shape as well As you go down this side of the car You can see just how clean that body is how reflective And mirror like that paint is And we take these hd videos especially on these sports cars So that you can see the vehicle hear the vehicle And you can have confidence in what you're looking at before you even get here So that when you do get here or if you get the vehicle shipped to you You'll have the confidence of knowing exactly what you're going to get And that you're dealing with the right car And the right people and that's why we offer the summit auto fast pass option as well in the upper right hand Part of your screen and link right to our website where you can apply for financing get pre approved See a payment quote even appraise the trade all from the comfort of your own home Back rim is in pretty nice shape as well And the back tires have just as much try as the rest Coming around to the back of the vehicle Rear bumper is in excellent condition No dense dings or scrapes on that it does have the led tail lamps You get the cobra logo in the middle the shelby Block lettering on the trunk all those stripes are in excellent condition as well And this car does have the sought after track package You can always tell if it's got the track pack by looking at the rear diff It's got a little tube that comes off right there If it's got that The car's got the track pack Which I believe was a 29 $95 option on this car brand new This one does have the capitalist fuel fill Driver's side quarter is in excellent condition And this back rim is in very nice shape as well Down the rest of this side of the car. You always want to look on the lips of the doors for any Chips or stuff like that, but this one's perfect Power mirrors with the blind spot mirrors inside This car has the black and red Leather and suede interior you get the cobra embossed backrest No rips no tears on the seats very very little wear factory GT 500 floor mats in the front power driver seat with lumbar You have the launch control The different steering options as well as the different suspension options auto head lamps Power windows and power locks As we hop inside the vehicle here You can see that this one only has 330.9 miles instrument clusters very nice and clean you get the leather wrapped And suede wrapped steering wheel Bluetooth and audio controls on the right cruise controls on the left cobra in the middle And the steering wheel is just in great shape This one has the electronics package, which gives you the factory Navigation system you also get AM FM and serious XM radio capabilities. You can also store music onto this radio And um has a cd player it has the shaker Pro audio so it has the subwoofer in the back you Have dual climate control there the sync system to connect to your bluetooth cell phone And you also have these six speed manual transmission. We're going to open the trunk here And then check that out a little bit I got the glove box open because I wanted to show you the Owner's manual and all the books that go along with the vehicle um Just uh Just about everything that came with the car is in here Put that away Has the gt 500 floor man on the passenger side Passengers side seat no rips or tears on that this car has never been smoked in smells very clean inside almost brand new And it does have the home link buttons up there for your garage door security systems and lighting systems You also have map lights up there in the center console you get a usb and an aux jack some coin holders and then your um additions for putting sunglass holders Up on these things are in there as well The dash is in excellent shape as you'd imagine And we'll take a quick look at the back seats and then we will check out under the hood Oh, I suppose we'll check out the back seats before we check out the trunk Back seats no rips or tears back there. It does have the latch child safety system Absolutely perfect And the carpeting is in nice shape as well You also get the svt 20th anniversary sill plate on the uh 2013's We'll take a quick look under the trunk or in the trunk here. There's your shaker pro audio subwoofer And this is what gets me about this car just How like new this back area is has the tire inflator kit all those couple little Sheets that came with the car are in there as well very clean back here and Just an amazingly nice low low mileage gt 500 Those stripes on the side all are perfect You can see those hid headlamps the led running lamps I'll take a quick look under the hood here the 5.8 liter supercharged v8 motor engine bay is very clean runs very smooth Get the grabber blue powder coated heads on there this one was made by hand built by keith dean Or kevin dean and keith or stad Pulled air intake Very nice the whole engine bay is very clean cold induction hood And just a very very nice car all the way around To see more pictures of this car or one of our other 450 new and used cars trucks SUVs mini vans wranglers sports cars GT 500s dodge challengers chevy camaros you name it we got to go to our website www.summitauto.com full pictures and descriptions of every single vehicle from two locations all at summit auto.com And if you'd like to check out more hd videos you can go to youtube.com slash summit auto Remember to like subscribe and share on this video and all the videos that you see there In fact in a second you will see a link to subscribe to our youtube channel on your left A link to more gt 500 videos like this one on your right if you haven't been to our website on the bottom Link to this vehicle on our website click those check us out and we really look forward to helping with this super clean 2013


Hello, I'm Michael Serkin, working at Red Hat. I'm the chair of the Virtio Technical Committee, which is a governing body that develops the Virtio specification. And now I'm going to tell you what we've been doing in the last year. First of all, the Virtio Technical Committee made some changes to its charter. One of the changes has to do with the scope of the Virtio specification, which originally was designed to only cover the interface between the driver, which is part of the guest running in a virtual machine, and device, which is part of the hypervisor on which it runs. Nowadays, there are multiple implementations which look differently. For example, there are hardware Virtio implementations, which can be used on bare metal systems. Or we pass through to a guest of a virtual machine, but not be part of the hypervisor. There are nested setups where the device is part of the hypervisor, but not part of the hypervisor on which the virtual machine runs. All of these cases are now declared in scope for the Virtio specification. The Virtio Technical Committee has been de facto registrar of device ID and feature bit numbers, and this has now been included in our charter. We have also made official our strong commitment to compatibility. In particular, any device or driver compliant with the specific version of the specification is sure to also be compliant with any future version of the specifications. We plan to release these future versions every 12 to 16 months. Finally, Cornelia Huck, which is a long time contributor to the Virtio specification, and the co-editor of the spec working at Red Hat, is now a co-chair of the technical committee. Congratulations, Cornelia! It's easy to track changes made to the Virtio specification over time, because we maintain it the history on GitHub. Looking at the change history historically, we can see that the rate of change has been stable in most of the recent years. You can only see a large spike around 2014, which is due to our work on the initial Virtio 1.0 revision, during which we have imported and documented a large body of existing code. However, looking at the number of individuals contributing to the specification, we can see that this number has been growing steadily ever since Virtio 1.0 has been released in 2016. More than that, looking at the number of organizations involved in the Virtio specification development, we can see that this year is a record year. We have exceeded the number of organizations working on the Virtio specification that has been the previous record set in 2014. What drives these new contributors to work on Virtio? It turns out that for many of them, the reason is outside the cloud space, which is a traditional for Virtio. Instead, there are use cases that involve automotive, internet of things, mobile and other workloads. You will see this as I am going to discuss some of the changes that have been made to the specification in the last year. Of course, I cannot list all of them, but just to give you some examples, I would like to start with the Virtio sound device. This is a new audio device supporting audio input and output. It is very useful for automotive, and it is the largest single change made to the specification over the last year. The specification has been contributed by Anton Yakovlev, working for OpenSynergy. Good job, Anton. Thank you, OpenSynergy. The second largest change to the spec is documentation of the new Virtio memory device. This one can be seen as a replacement for the balloon device, while the balloon device takes guest memory and passes it on to the host, kind of sealing it from the guest. The Virtio memory takes the opposite approach, adding host memory to the guest. This reversing of the roles turns out to be able to fix multiple issues in the traditional balloon device. Lots of thanks to David Hildenbrand at Red Hat, who implemented this device and included the specification. GPIO is, of course, a general purpose input-output device, which is widely used in embedded and Internet of Things configurations. Any of you who worked in such configurations are, of course, familiar with it, which is the reason that Virish Kumar from Linaro added support for Virtio GPIO device to the specification. Next, System Control and Management Interface. He is a management interface present on ARM systems. It allows managing power, system state, sensor access, and more. Thanks to Peter Hilber from Open Synergy for adding this device to the specification. Free page-hunting is not a new feature in that it has been suggested many times in the past. The idea is that guests can suggest areas of unused virtual machine memory to the host. By guest and host cooperating in this way, they can manage the memory of the virtual machine more efficiently. This sounds kind of simple, but it took many years to implement and even more time to document. Lots of thanks to Aleksandr Duik for being persistent and including this in the Virtio specification while working for Intel. Virtio network devices are very popular. In the last year, support for UDP segmentation, which improves performance when transmitting packets from within the VM, as well as support for hash reporting, which improves performance when receiving packets in the VM, has been implemented by Yuri Banditovich at Red Hat. Thank you very much. Additionally, Vitale Mirenio at Marvel added support for flexible driver notifications. This enabled support for hardware virtio offload devices developed by Marvel. Thank you, Vitale. The iSquare C bus is of course very common and embedded and automotive systems, which is probably the reason that led Jai Deng from Intel to add support for Virtio iSquare C to the specification. Over the last year, the Virtio GPU gained ability to export resources between devices, as well as ability to pass global resources. This has been developed by Kurchetan Singh and David Stevens while working at Chromium. The Virtio file system gained over the last year support for the notification queue, which allows reporting asynchronous events from the server to the client. This work has been done by Stefan Hainochi at Red Hat. Thank you. And last, support for lifetime metrics for devices with limited lifetime, which are common, for example, in mobile systems, has been added to the Virtio Block device specification by Enrico Granata at Google. And there are more. So, I cannot list you all. I'm very sorry, but thank you to all who contributed to the specification and to those that I did list. I have just mispronounced your name. Sorry about that. Also, thanks for all the viewers of the spec for their feedback. And of course, for developers who actually are implementing devices and drivers according to the spec. The work is driven by your experience to those not directly working on Virtio. Virtio uses extending to new fields and drawing new contributors. So, join us. Virtio is easy to extend. A lot is going on. You can work on performance, or you can work on new features. And with that, thank you very much. My name's Alex Benet, and this is the Chromium status report. If you take 445 open source developers and you mix them together on a mailing list, this is what you get. But before we go into the details, I'd like to frame this by talking a little bit about me. So, I've been hacking on Chromium for around about 8 years. And that puts me in with about a quarter of the developers of the project that have experienced between 5 and 10 years. As you can see, we've got a fairly good mix. We've got a fair number of people that have only been contributing for less than a year, up until this hardcore 10% that have been working on this project for quite a long time now. I'm very lucky that I'm a paid developer, and Chromium is my main gig. But that makes me in common with the majority of the developers that work on Chromium. Only about a quarter of the contributors work in their spare time. The rest are doing this either full-time or as part of their main gig. Now, I think it's time to talk about the event. There's been one thing that's affected everyone in the world over the last couple of years, and that, of course, has been the global COVID pandemic. And I was interested to see if the effects of the rest of the world have had any changes on how we develop Chromium. So, looking at the developer survey that I sent out a couple of months ago, I asked for people's impression, and the overwhelming majority of developers said that the pandemic had no very little direct impact on them. There was also a small percentage of people that said that, given that they had more time to work on Chromium, it was an overall positive. Looking at the actual data itself, I plotted out the commits, although our raw commit data is fairly noisy, so I've had to average it out to make it a little bit smoother. And you can see for the duration of when the pandemic started at the tail end of 2019, it's had very little effect. In fact, you might even notice a slight upward tick in the total amount of activity in the project. However, there has definitely been one change in the way the developers have worked over the last year, and that's been the switch to working from home. So, we already had a fair number of people that did a degree of home-based working when they were working on the project, but that has very much become the majority over the last year as work from home mandates have rolled out across the world. So, now let's have a look at the releases and some of the key changes. So, we seem to be keeping well up with our regular three-releases-a-year cadence, and I don't see anything that indicates that that's going to change anytime soon. It seems to be working pretty well. So, I did a plot as a word cloud of all the various things that were mentioned in the sort of subject line of the commits. And you can see, as you'd expect, all the major architectures, so we've got PowerPC, MIPS being mentioned in commit messages, as well as subsystems such as the block subsystem, TCG, and stuff like that. It's also quite gratifying to see a lot of mention of testing, so that just gives you a sort of broad overview of the sort of areas that are seeing changes in the code base. But let's look at some more specifics. So, one of the things that's improved is our support for encrypted guests. So, this is currently AMD's secure virtualization technology. But I expect, as other architectures catch up, we'll be seeing needs for support of this sort of thing in the future. In the block subsystem, QCAL2 gains subcluster allocation, and this basically enables more efficient use of QCAL2 backing files. Another big change is a full emulated NVME controller. I believe there's another talk at KVM4 and where Klaus is going to talk about the history of that. Another section is the multi-process device emulation. So, this is separating the emulation into a separate process, which has some interesting security implications. And finally, ACPI hotplug is now the default for PC-based architectures. As with every other year, we have been involved in Google Summer of Code, and this year we had three contributors working on various parts of the code. So, Lara worked on improving our virtualization emulation for the AMD processors, which have slightly different virtualization architecture. Nitesh worked on a terminal user interface, TUI, that uses QMP to talk to Kremu to control it. And Mamoud did some cache modeling using TCG plugins. There was another bunch of students that worked on Rust VMM projects, which was done under the auspices of the Kremu project. So, that included Bogdan's work on mocking frameworks for VertiOQs, Harsha Dartvarden's work on integrating Vhost user Vsoc with Cata containers, and then Galen did some work on a Vhost user, a scusy backend. Of course, aside from virtualization, Kremu is quite popular as an emulator. And this year we saw, say goodbye to a number of targets, LM32, Moxie, Talgiex and Unicor 32. I mean, as far as we could tell, not many people were using these architectures. Some of them had been deprecated from Linux, and it was getting increasingly hard to find binaries and tool chains to build tests. However, we did say hello to a new architecture, and that's the Hexagon DSP architecture from Qualcomm, which was added in the last year. Whilst we're on the subject of TCG, I thought I'd talk a bit about some lower-level TCG updates. So we now have support for split writable and executable JIT buffers. A mirror view of the JIT so you can generate into the writable portion and execute out of the executable portion, and this is something that helps with running on MacOS on Apple Silicon. There's been improvements into the core TCG code with the way it handles constants. So again, allowing us to generate better backend code. A relatively recent addition was an improvement in the way that we handle breakpoints. And this was triggered by a regression we found with Windows that for some reason generates breakpoints into itself as it's booting up. So the new breakpoint handling is a lot more efficient and doesn't actually generate code that needs to be thrown away. And finally, the tiny code interpreter, which has always been the subject of deprecation requests, got a big update. So it was modernized to run all the latest TCG code that is generated by the new vector operations and is now properly included in our CI. So it shouldn't regress again. Chromium is also very useful as a development target. So there's a number of things I thought I'd mention here. So we now have the ability to capture USB packets in PCAP format so you can monitor all the traffic between a guest and a USB device, which gives you a good idea of what's going on between the two. The guest loader is a companion to the generic loader and it's basically there to enable you to test hypervisors, which expect to have a kernel and guest loaded into memory at the start and need some sort of pointer to it. We've continued to enhance the GDB stub, so we've got small features like adding Alt's Fees support for Linux user and also fancy features like reverse debugging, which builds on our existing record replay architecture to allow you to do things like reverse step and reverse debug. TCG plugins are now enabled by default anywhere where you have TCG available. The runtime impact when no plugins are loaded is practically non-detectable and so it's useful to have the plugins available if you want to do further analysis on your code without having to recompile the whole of Chromium. And finally, there is the Chromium storage daemon, which is your one-stop-shop program for dealing with various block storages. On the internal side, there's been a bunch of cleanup with things like the accelerator being abstracted and TCG-specific CPU ops being abstracted away, and this is all in the purpose of making the Chromium build more flexible and allowing you to build Chromium with only a particular set of accelerators or without TCG support added in. Another area's change is the common translator loop, which is embedded in translator ops, is now completely converted. So all guest architectures now use the common translator loop, which makes the management of that code a lot simpler and also allows them to use the other features. A while ago when we were doing SVE, we did a big rewrite of the original Berkeley soft float code, and the main change of that was we were trying to get away from a bunch of magic constants and shifts to something that was easily followed and you could see the common way that floating point was handled. Well, that transition has now been completed with the 80-bit and 128-bit soft floats all being handled in the same core code. Finally, there's with and without default devices, and this is another build option that allows you to specify which devices you want to include in your build. So say, for example, you're building a KVM-only binary, you may not want to include a whole bunch of devices that are only used for emulation. On the process side, there's a couple of changes. We've joined the 21st century finally and we now have a code of conduct. We've also continued with migrating more things to GitLab, which is now the canonical copy of our source code repository. So the bugs have migrated across and that includes a bunch of quality of life improvements. So for example, bugs get automatically closed when they're referenced in commits. More and more of our testing has moved across to GitLab. We still use Travis and Cirrus, but we've done work to integrate the results from those into one place so you don't have to look at multiple websites to see the state of a branch. As part of that, there's now also playbooks for adding shared workers. So this is part of our drive to reduce the load on GitLab's own shared services that are used for all open source projects and we can add specific architectures and have our own dedicated machines. Finally, Paolo talked about MISON last year and the MISON workers continue to evolve. Probably the biggest change has been adding, but reducing the number of tests that are done in the configure shell scripts and moving them into as native MISON tests. Finally, I'd like to talk about the documentation. So last year, we migrated everything to Sphinx and now we have a new unified manual. So the manual includes all your system, user tools, interoperability specs, as well as developer information in one nice searchable and browsable manual. It's also seemed to have had a positive effect, so we've got about 10,000 new lines of documentation that have been added to the system. Right, let's quickly go through some of the developer awards and stats because I know that's what people are interested in. So most commits Richard Henderson took it this year just slightly ahead of Philip and he also keeps that if you look at most lines changed. I thought I'd also look at who had the heaviest delete key. In my mind, a commit that removes more lines than it adds is also a good commit because it's generally removing lots of craft and Marcus has been leading the charge on that side. Finally, with reviews, there's been about 7,500 change sets and I think we had about 7,700 reviews in total. So it's now fairly rare to find a commit that's not had at least one review before being merged and Richard and Philip were very close side-by-side in having the most reviews. And finally, I will just mention testers because sometimes although we have quite complete CI, you need to have manual testing, actually build it and do stuff on your own machine and again, Philip has done the most of that. Right, with that, I will say thank you. I've been Alex Benning. You can find me on Mastodon as under my handle of ST Squad which is also the same handle I use on IRC. So goodbye and hope you enjoy the rest of KVM Forum.


Welcome to another edition of RCE again. This is Brock Palin You can find us online find all the back episodes and nominate new shows at RCE dash cast calm You can also follow me personally on Twitter at Brock Palin all one word And you can also find my blog floating around off of the RCE website I also have here again Jeff Squires from Cisco Systems and one of the authors of open MPI and sits on the MPI 3 Foreign body and Jeff you've been pretty busy recently. Ah, yeah, there's always lots to do and MPI 3 is actually finishing up. Well, it's it's starting to finish up meaning that All the new things that it will be considered for MPI 3 are now in so the doors are actually closing But it's it's a busy time. It's good stuff Yeah, and you've been having some information about some of the changes of Fortran and some other like tips and tricks for Utilizing open MPI at a more detailed level over at your blog, which is also linked off for the website Also, I will be speaking at Globus world at Argonne National Lab Which is April 10th 11th and 12th be talking about some of the stuff We've been doing with Globus here at the University of Michigan and Jeff you've got Euro MPI coming up Don't you? Yeah, let me give a shout out to Euro MPI call for papers. The papers are due in about a month May 5th is the deadline for posters and papers and it's in Vienna this year. So beautiful Vienna, Austria Please be sure to get your papers in Okay, so let's go ahead and go into our guests today. Oh, we have two guests We have Matt Turk and Aaron. I'm a day. They both are authors on the MPI for pi Which is a set of MPI bindings for Python. So guys, why don't you go ahead and take a moment to introduce yourself? Sure, so my name is Aaron. I'm a DIA. I'm a research scientist at King of Dully University of Science and Technology and Primarily, I came into MPI for pi as a user since we're interested at a high level of using Python for You know parallel computing applications on supercomputers. So I really we have this Invisible third person sitting in the room with us Lissandro Dalson who's who's the main creator and developer of MPI for pi and so there will be a lot of Lissandro did this and Lissandro chose and and Lissandro's genius sits beneath most of MPI for pi But yeah, we're happy to be part of the development team and helping with with MPI for pi I also wanted to do a quick shout out for the PsyComp stack exchange, which is a new beta I'm moderating for that and Hopefully if you have a question or answer about high performance computing you can go check that site out And there'll be a link. I hope from the podcast page Yeah, so my name is Matt Turk and I'm a Postdoc at Columbia University with the NSF CI tracks program And I also like Aaron come into MPI for pi mostly as a user I've you know deployed it on a number of different systems inside the exceed system and outside it as a Library used by a program that I around that I wrote called whitey, which is used in astrophysical data analysis And you know, I've used it MPI for pi to interoperate with C plus plus code As well as you know strictly within Python So that's pretty much where I come at it from Yeah, so unfortunately did try to get Lizandro on to show But he couldn't be here due to scheduling conflicts and time zones and all that kind of fun stuff but He said that you guys could fill in for him as a worthy representative So why don't we go right into this? Can you give us a little bit of an overview of what MPI for pi is? Sure, so MPI for pi is at the highest level a set of bindings for the MPI interface from Python So it attempts to provide not only all of the MPI Functions at a C level where you're basically calling the C function directly just from Python But also a friendlier set of bindings that interact with generic Python objects using a technology in Python called pickle Which is effectively just serialization Now what was the rationale for creating MPI for pi? I mean why add yet another set of language bindings in here? What's what's the motivation? So I think that It's clear that if if you want to use MPI from Python You can't just call the C API directly that's ugly and dirty and and C types wasn't even around When MPI for pi was first written so it's nice to have something in in the language That's friendly and flexible and and easy to use and and feels like Python So if you're an MPI programmer, of course, and you've been writing and see in Fortran it you don't care But if you're a Python programmer you want something that feels comfortable for you So for instance if you have a a Python program that you're that you're using you want to you know add on to it Say a parallel analysis layer, which is where I came at it from You know we had this this program called yt and it operated very nicely in serial And we wanted to be able to extend it in order to run on hundreds and now thousands and tens of thousands of cores and so in order to do that we needed some mechanism for parallel interoperation and You know MPI is the obvious mechanism for doing this and it was something we were comfortable with coming at it from the simulation side Our simulation code you know uses MPI from message passing And so it was natural that we would want to use it from within Python And so we started out using MPI for pi and its most you know trivial mechanism where it utilizes the The or trivial from the user standpoint mechanism where it uses pickle to serialize objects and pass them between You know different processors and then we moved on to using it from the more advanced Standpoint of actually broadcasting arrays directly, you know where it where it takes the underlying memory buffer and then supplies that directly to MPI Now how many Python applications for MPI do you see because in some respects in in high-performance computing people issue everything That detracts away from performance and there certainly is the argument that a higher level language like Python Won't give you that bare metal performance Well, I guess it's interesting right because what you're what you're getting at here is this idea of Bare metal performance and in a sense Yes if you're if you're broadcasting around Python objects and you have to rely on the interpreter to go through and you know Evaluate what a type of a given object is and how it how it's expressed to the underlying C code then yeah that can provide You know a number of barriers to performance, but that's not necessarily how it's exposed to MPI for pi For instance MPI for pi relies on on num pi and what num pi is is essentially a number of Shims that provide Python access to to fast underlying C arrays And so if you can broadcast those I'm sorry if you can supply those arrays directly to MPI Rather than having to do any interpreted steps It already knows the data type and it can broadcast those around to different nodes or it can send them and it can use the underlying MPI machinery directly I think I think you guys are interested in in some hard numbers, right? Right so so you want to know exactly How bad the performance? Overhead is and and and how much it's affected by going through Python so Lissandra ran quite a series of extensive tests on Gigabit ethernet and I owe him some tests on on a blue gene machine just to compare this and The way that we measured throughput is we have three different ways that you could write your MPI code, right? You could do it with just pure C. You could do it with num P Plus Python plus MPI for pi or you could just do MPI for pi is very native technique and what you'll see is if you just use a C of course It's the fastest, but you're within a fraction of one or two percent As long as you're using the the num P arrays beneath it and of course the pickle interface is the slowest, but it turns out that it's also The most flexible and just requires the least amount of code and thought And and a final thing I'll say is that of course if you you're doing this on shared memory Then you start seeing a performance hit due to just the Python overhead and that can be as much as a factor of two But never worse than that I would say Yeah, what I was really going for there was the the canonical argument that I have usually heard for doing MPI in higher level Languages is the abstraction win that you can actually get more done in less time because you're not constrained so much by what? C forces you to do with you know primitive string handling and type handling and all these things you can actually get More done even though it performs a little bit slower You can actually get your code written faster and get prototypes written faster and and things like that This is this kind of your experience as well Certainly Python is a more pleasant language to program and then then see in Fortran So so that's certainly one aspect of it the code tends to be a little bit more maintainable since there are less lines of code and Easier to debug and easier to see what's going on sometimes So let's back up a moment you mentioned you're using numpy and numpy is giving us performance of this We've had numpy on the show. We've had on it. They would do a lot of work with nthought kind of being a Commercial face behind commercialized Support and things for Python. Do you guys have any relationship with nthought? so We neither I nor Matt have any official relationship with nthought for a while nthought has been hosting the MPI for Pi and the Petty for Pi documentation But outside of that not really Okay, so then the actual MPI has multiple versions. You know we have version I think Two-point something is the current standard one and you know we're working on version three What MPI spec does MPI for Pi currently aim to support? Oh, this is the best part about MPI for Pi is that it freely supports both MPI one and two Specs so and open MPI and MPI CH so it doesn't matter what you're underlying MPI implementation is LaSandra was hidden that from the user all you have to do is write MPI code now if you write an MPI to call and You have an open MPI implement a or an MPI implementation that doesn't support that MPI to call And you get a Python error at runtime and it says all you couldn't do this But you're not limited, you know, you don't have to worry about that when you're writing the code. That's cool Have you had a lot of issues with a library support for the underlying MPI library providing your transport mechanism? Yeah, so LaSandra again, go ahead be honest. It's Yeah So I would say that one of the most interesting problems that you deal with Certainly with the older MPI implementations is that there was no requirement That MPI in it Had to be called Sort of it had it had to be able to pass the command line argument And of course if you're running the Python interpreter, those are long gone by the time you import MPI for Pi so Now in an MPI to this is a relaxed requirement and sort of MPI in it is is not allowed to have access to the argc and argv anymore But just to simplify and support MPI one implementations that still required that argc and argv LaSandra has built a MPI Python Interpreter basically and this is just a simple main it grabs argc argv Calls MPI in it and then it starts the Python interpreter So if you're in a situation with a really old MPI that's supported as well This is actually a problem for me on an older system where where we were using the SGI implementation And and we ended up having to use the Python MPI interpreter quite often. Yeah Yeah, and I will say there was actually a problem with open MPI for a while too because we open plugins and Python opens plug-ins and the Whole shared library interaction was actually quite a mess for a while until we figured out the way saying no you need to do it This way some of the darker side of of linkers unfortunately But let me the next question actually after that little commentary Are your functions in MPI for Pi? Are they? Bindings meaning are they kind of one-to-one for the the C functions, or are they a higher level? You know like a class library kind of approach Okay, so that's a that's a great question because there are actually two sets of bindings in MPI for Pi and so your traditional MPI bindings that you would call directly from C are available from Python as well and Those are the uppercase bindings and I refer to the first letter of the Python MPI for Pi routines And those look a lot like the C++ bindings in MPI to though they call directly into the C Bindings themselves. They don't touch the C++ bindings and So calm as an object and so a communicator You can call functions on it like send receive and broadcast and all of those if you call the uppercase versions look exactly like the C signatures for MPI now in addition to those there's a lower level set of calls that are implemented in lower case and Those calls are what I would call higher level or abstract or Python like and you can send any Python object over these things that can be serialized and and this is very friendly and very powerful and this nice abstraction where You don't worry about what you're doing You just say send this to process one and MPI for Pi does all the work of packing it up and turning it into something That could be sent over the network Do you see users when they're utilizing those kinds of like make it easy to send this thing Engaging in communication patterns that are generally a lower performance than using like collectives and such I Would say that most of the questions we get from users tend to be Really really how do I make this thing go? The I can't import library problems really really basic problems We I think by the time people figure out how to use Petsy or sorry MPI for Pi. They're They know they know what they're doing between the two sets of calls One of the very nice things about the way that Lissandro has designed MPI for Pi is just how one-to-one mapping it is between the MPI Standard and the function calls except with this added twist as as Aaron noted of Pythonic interface on top of that So how do you guys handle types then and and I I say that because MPI has this notion of data types Right so like in in the C world I have int and double and float and care and all these things and I tell MPI what the type is because in C It's the buffers past as a void star and MPI would have no other way of knowing But in Python you're much more strongly typed. How do you do the mapping particularly for non intrinsic data types? Okay, so If you're calling the the lowercase methods, this is this is what happens is There's a Python Module called pickle and and what pickle does is it knows how to handle the serialization of all of the major Python? Object types, so if you have a dictionary which looks like a hash map or you have a list Which is a C++, you know STL vector if you're familiar with with the STL containers all of these things are are Instantly turned into serialized objects and so normally you might serialize something and put it in a file But what we do is we serialize something and we put it in a buffer and then that buffer of course it's just a bunch of bytes it's a bucket of bytes with a size and We send that over and on the receiving side the unpickle operation reads the first few bytes of that Understands how it's gonna decompress that and then it turns it into an object on the same side and all of this is sort of Seamlessly handled by these lowercase methods, so I really just say calm dot send Object and then the process I want to send it to and pipe and NPI for pi takes care of the rest Gotcha, so there's really no notion of of native or intrinsic types everything is serialized and unsurrealized If it's something that you can turn into a numpy array Obviously, it'll go a lot faster if you turn it into a numpy array first and so MPI for pi knows about what an MPI numpy array is so it doesn't call Serialization on numpy arrays and also if you use a pep, this is a python enhancement proposal 3118 buffer. This is also an object that and MPI for pi knows how to send efficiently So as I said, a numpy array is really or as Matt said a numpy array is really just a c-buffer Of memory and it could be a one or two or three-dimensional array and have strides and all of these things MPI for pi knows how to take that and very efficiently send that using the native MPI Strides and any MPI data types for sending these things So as an example if you use the the uppercase the functions and you send a numpy array using one of those Then they'll be broadcasted over just as as Jeff noted with the void star Yeah, if they if their strides match correctly and if they're able to be And if you use the lowercase methods on even a complex derived type for instance, you know a python class That's defined in your module. It will serialize that in the way that Aaron described pass it over and it'll be deserialized on the receiving end cool This this is a really nice hybrid approach to to high-level and low-level programming using MPI In the sense that you can do really complex things using the pickle methods But at the same time you don't necessarily have to sacrifice the performance for for things that MPI natively understands So this would require that say I'm a I'm an application programmer I would actually have to be programming in the the numpy Kind of style of my application itself. This isn't like a something under the covers that says like I want to use the pickle Driver I want to use a numpy driver. I actually have to explicitly write everything and work with my arrays all in the numpy style If again, if you were trying to get the maximum performance You would be working with numpy arrays and generally for Numerical computing or scientific computing in Python. You're using numpy Anyway, because that's your matrix or vector storage for for data But if I've got an existing pile of Python, that's like Generic Python doesn't import anything and I wanted to start kind of hashing it around to make it work with this I can just use pickle and not even think about it and just go you don't even need to yeah You don't need to use pickle because MPI for pie does that for you and that's that's in the Python standard library So it's it's available. That's right. You do from MPI for pie import MPI you say comm equals MPI comm world and You know you grab your comm sorry grab your size grab your rank from the comm and send the data Right data equals comm broadcast data and root equals zero So one of the things that we added in MPI 3 and actually is already available in the open MPI trunk is something called m probe matched probe It was to address a couple of things and one of the rationale that was given was explicitly that it would be useful for higher level languages Where you might be sending, you know serialized data where you don't know the actual length of The message that's going to be sent or or to be received more specifically And so it can be useful to just say hey just give me whatever the next message is and I want to receive it But I don't know how long it's going to be So the matched probe the idea is that you can say hey Give me this signature and and not necessarily put in a length with it And if you match it that incoming message is removed from the matching queue so that nothing else can actually probe or Receive it, but you get a handle back to that message that you can then give to an M Receive matched receive and say okay now actually receive it kind of thing now Is this useful to you know MPI for pied you guys foresee being able to use this kind of functionality Yeah, so that actually resolves one of the issues we have with with with I receive so oh, oh, thank God because So so the way that we handle that now is we actually if we have to we send two messages Right, we send the size of the object ahead of time and then the next message Is actually the data when we don't if we if we know we can avoid it We just send one message, but you're right for safety We were often in that trap or we had to send two messages and that's not just for point-to-point In collective sometimes we have these weird funny things as well And and let me say this again You always have access to the C MPI functionality every single function and MPI is available to you from The normal C bindings what we occasionally cannot implement or we cannot do is give you a nice High-level Pythonic interface to some of these functions And a great example for while we're going on this is MPI reduce And why is MPI reduce hard? MPI reduce is hard because you have to provide a reduce operand in the general case and In Python though we could maybe somehow Sneak a callback into a Python function In the reduced call well what ends up happening or the current implementation just Takes all of the data Gathers it onto the root node and then the reduce operation is applied on the root node So that's that's sort of the dirty under the covers MPI for pi Trick to make things look more Pythonic, but it's certainly not the cleanest way to do it and of course it doesn't scale I'll be the first one to say I think Pythonic is a wonderful phrase. I'm gonna work that into my daily for cabaret Don't forget a Python not right if somebody was exploring Python for the first time I Would fall into that category. I would totally find that category. I'm sure you could tweet that somehow Brock When we write idiomatic Python, we are Pythonistas Don't make me start busting out MPI puns because then it would get really ugly We have all of Monty Python to fall back on so this is true Okay, so keep moving up. We kind of mentioned some issues you had with The SDO an old version of the SGI MPI library what MPI implementations do you guys officially support and Which ones do you know work? Open MPI MPI CH Are there any other MPI implementations worth mentioning? I Have also personally used it with MVA pitch with an older lamb However, I must confess I have been unable to or I have recently been using it with the Cray implementation as well And that has gone very nicely Yeah, I'll say that we use it with the IBM implementation of MPI CH But I feel that that most MPIs really are derivatives of one of those two So do you find the interoperability between them that you do actually sit very nicely on top of MPI and are mostly Isolated from differences Yes, and and some of that is is due to a bit of leakiness are you guys familiar with this scython tool? One of our other guests mentioned it Okay, so so scython is is a Python package it grew out of another package called Pyrex and the idea was that well Python is this slow interpreted language and Every once in a while we want to be able to compile a Python file basically into C and so we add a little bit of static typing to to a function and We force that Into the function file and then we compile it with a C compiler with a little bit of interpreting and in addition to that We can also use scython to generate interfaces and and so that's how MPI for Pi is Built it's built around a set of scython interfaces to the MPI Library and it just basically takes the MPI dot h header file and and build up the set of interfaces from there So why is this interesting or relevant? Well, if you're familiar with the internals of open MPI and MPI ch which you are you'll know that communicators are different implemented differently they they're fundamentally different base types and You would think that we needed to do something special to handle the fact that well, it's an integer here, and it's a pointer here But I thought only needs an approximate type. It turns out so even though It in some cases. It's an integer and in some cases. It's a pointer Just saying well, like we think it's an integer is is close enough and and things do work smoothly between open MPI and MPI ch It's like I can see you guys are horrified No comment That's right. I'm you know as we talked before we start recording the show here. I'm the Fortran MPI guy I don't know how I got sucked into that but I am and Shall we say in older versions of Fortran types are a very fluid concept as well But I mean even on platforms where integers and pointers are different sizes right the native int type is not the same size as a pointer it still works and it's because Scython only needs to sort of know what type you're going to be interfacing with and see and It does figure it out when it actually does do the compile what it's supposed to be converting the type to So it works So for upcoming things, I assume you guys are you know gonna implement MPI 3 when that comes out Yeah, I think that as soon as the MPI 3 stable implementation is out There's certainly enough interest in an MPI for Pi that will be able to support that and so What about any of these more pythonic things you have any Pi into sky ideas of future ways to make things more abstract more higher level easier for a grad student to get something running in parallel I I'm always full of ideas and I've I've recently seen some people start working with and building Libraries on top of MPI for Pi to start enabling a simple parallelism. I'm mostly interested in sort of really high-level utilities that sort of just Monitor for example, what's going on with a scientific application? Things like load all of the things that are really dirty from from C or Fortran sometimes to Incorporate or to cache or memorize or things like that might be more interesting from Python, but I don't think I have any hard ideas So a question I like to ask people just because everybody has Different answers and different rationale for this is what what version control system do you guys use for? maintaining your code base and why so Lysandra uses mercurial and mercurial is written in Python and I don't actually have anything to say beyond that. I'm a get guy myself Well, I'm a mercurial guy both of my other I suppose the two main projects that I work on are also versioned in mercurial, so I'll Skype high five Jeff on that one That's just my personal opinion, but they're all they're all good systems the Another question we like to ask is what's the strangest use that you have heard of with MPI for Pi You know something that you didn't necessarily intend or design it for but you found out that some users using it You go, huh? Well, that's kind of cool Well, I think Aaron has a has kind of a hero run to describe My understanding is that that Aaron runs on a tremendous number of cores with MPI for Pi 65,000 tremendous. Yes, I think that's I think that's not even in the ballpark for amazing these days, right?  Oh, yes I don't know how interesting or exciting this is to report negative or scary negative results, but bringing in Python importing numpy and importing MPI for Pi on Most or every supercomputing class machine that we've tried so far takes several hours. Oh Because that's a file operation at runtime Yeah, one of the problems with the import is is really how many directories and files it needs to touch during the import process on all Of the different processes are simultaneously Right, so it puts tremendous load on the metadata server usually That's right. And so what you're seeing is 65,000 processors doing a search over the standard DL open routine For all the paths over all the libraries and on top of that Python itself is also searching for every module and every package it needs to load and We have some good news and that's that Asher Langton who's a Key is a graduate student doing a research appointment at Lawrence Livermore National Labs has has a very nice Implementation that's trying to fix this by by simply letting only process zero Do the search and then reporting the results to the remaining processes of course, this doesn't help deal open and That's where Jed Brown and I have been working on trying to figure out How to intercept and we're all the way in G-Lib C at its its very base bootstrapping set to Intercept these file system calls and do something smarter with them Cool Yeah, we I think we have a smaller version of that problem in open MPI because you know We're all about the plug-ins and we have several dozen plug-ins and at larger scale We were actually requested way back in the early beginnings of open MPI say hey give us a way to Not make these plug-ins so that they're just part of you know Live MPI dot a instead so that I don't have a bajillion deal opens going on at the same time But probably fewer than Python and searching and things like that, but yeah similar issue. It's always cool to bring out these Things that people just never thought of until you start running them at tens of thousands of cores Well, thanks a lot for your time guys. Um, what is the MPI for pi a website where people can download it and how can they get involved? It's at code.google.com Ford says P Ford slash MPI for pi and of course we're always looking for people to contribute Especially with these pythonic routines Take a look at it. If you see something that you like or something that's interesting Send us an email. There's an MPI for pi developers list on Google groups. And of course, we're very chatty and friendly Okay, well, thanks again. Oh, thank you guys. Thank you very much, Jeff and Brock. Okay, and we're done