Welcome to Digital Asset News to get top stories and cryptocurrency and digital assets and bring them down to bite-sized pieces. Today we've got some more concerning news. First up, the People's Bank of China just delivered a death blow to local crypto OTC dealers and how this can happen in almost any country. Also, digital currency from Line called Bitfront is now offering interest on a collaboration with the Celsius Network. And this is just another example of how two exchanges are going to come together and make things better. Also, the biggest winners in the DeFi yield farming push is Wales says data, which is not a surprise, but we're going to go over some pretty interesting statistics where you might not be too happy with how much this people make. That'll lead us into Pew of the Day, which we'll go over at the very last segment, but let's take a look at what's going on in the market. So it is September 24th. It is 3 p.m. Texas time getting to all this stuff late. Had a lot of things going on, other stuff, other businesses, but it is what it is. So I'm taking a look at the market. Maybe it was good. I didn't do this until later because wow, this is a complete sea of red.  Bitcoin down 3%, 6% down Ethereum, XRP is XRP. Bitcoin cash 3%, 4%. Wow, 9% for chain link. Ouch. E789. What are you going to do? 2.3. And just, I mean, just going through all this, I remember three or four weeks ago when everything was just going super far up and everything was just going fantastic. And people were talking about these new projects and they put all their money into it. And I said, do not FOMO into these projects. Wait for later because you never know. You always want to have a little bit of extra reserves on the side so you can buy during times like this. And you don't feel that pressure. You don't feel like you just lost 16% in UMA or 9% in compound or 11% in year and you just, you don't have that pressure. And that is just the big thing. And I will just say it again. This is not my first rodeo. This is probably not your first rodeo either, hopefully. And when you're going through this, and well, even if it is your first rodeo, here's the thing, just learn from it and move on. Just remember from now on, don't FOMO on anything, just dollar cost average. And when you have days like this, these are the days when you're like, Hey, I should buy a bit more because that's a huge drop. And you don't feel that pressure. I did that issue in 2018. I bought up a ton of stuff. And when things went down 20%, 25%, I felt that crushing pressure because I was down. I didn't have money on the side to buy anything else. I was just down just sitting there going, wow, where do I want to go? So that's just one of those lessons that I've learned. And you can only learn it through pain. And that's just how it goes. So I'm not going to harp on it. Let's just jump into today's video. So first up, this is kind of concerning.  So what's going on here? So the Central Bank of China, People's Bank of China is blacklisting the accounts of OTC traders in the region and its recent crackdown efforts. And when I first read this, I always think the most negative, like, ah, these Chinese, the government, they're cracking down, they're, you know, making things very stringent on their citizens. But really, it's not that. These are blacklisted merchants will not be able to carry out online transactions for at least five years. So the problem here, and we're going to get to that in a bit, is that these OTC dealers, they can't really distinguish between who are the bad and who are the good because regulation is sparse. And that's the problem. When people say, we know, we don't need regulation, we do, we do need regulation to see, you know, what kind of boundaries that that we can actually have. However, there's also a flip side of that. It's called a decentralized exchange, but anyhow, getting all that in a bit. So since the start of the year, China's central bank has been cracking down on money laundering in the country. The top bank partnered with several major banks to assist in stopping nefarious activities, involving cryptocurrencies by sharing account details and transaction histories. So when I first read this, I was like, ah, those banks working together, you know, snapping down on people. And I thought to myself, hold on, wait, what am I talking about? We were just up in arms a couple of days ago because we heard about JP Morgan and Deutsche Bank and the other big bank where they had done the exact same thing, turn a blind eye, not reported their people that were actually investing through their bank and money laundering. And they were washing this money in a tune of $2 trillion. So when these banks step up and go, hey, there's some activities going on, we don't like to see. And this is illegal activity. This is cartel. This is drug money. This is the Yakuza, whatever it is over there. I don't know. But they step and go, we got to stop this. And they did. So, I mean, you can't have it both ways. And I think that's actually good. Moving on. After a bank system has restricted a certain amount, our account from conducting transactions, it will then report to the regional central bank. After review, the PBOC, People Banks of China, will then share the blacklisted accounts with all the banks across the country, thus hindering OTC merchants from registering for new accounts. But here's the thing, how can you tell which one is doing illegal activities and all these different nefarious projects and who are just regular OTC dealers that are trying to help institutional investors get their hands on Bitcoin? That's the thing. It should, however, be noted that the flagging of crypto accounts is not applicable to normal crypto trades. Huobi, who is based out of Singapore and Hong Kong, I believe. The Huobi OTC desk is quoted as saying, normal crypto transactions are not illegal and only those involving black money and illicit assets will be frozen. Again, how do you determine that? Who is responsible for that? Who pegs it and says, this is illegal, this is not illegal? Of course, there have to have their own financial crimes division. Lastly, it states yet due to the lack of common rules across the local banks, again, due to the lack of common rules across the local banks, a legitimate OTC dealer operating in China can easily be blacklisted despite not conducting any illegal crypto transactions. That's the problem. You're kind of caught in that middle like, hey, I'm just trying to provide a service. I'm not over here doing what these guys are doing. I'm just a regular small business that's trying to do the right thing and I got caught in the middle and now I'm out of a job and I can't feed my family. That is the big problem and that is why you really do need some type of regulation everywhere, I think. Now, there's a way to get around this, not to get around, excuse me, I shouldn't say like that. There is an alternative. And that alternative is a decentralized exchange, just like we have with Uniswap, just like with all the different decentralized exchanges popping up.  And that is one of those things that I see. However, I mean with decentralized exchanges, there's other problems on there. There are scams. Uniswap is one of those places. There's a lot of different scams going on there. A lot of different coins that are just, you know, brought in and who knows what's going on. It's not the most cleanest thing. So, of course, with freedom, you're also going to have the problems that go along with that. But it all depends and find that right equilibrium. Let me know what you think in the comments section. Let's move on. Next up, Line's global digital currency exchange bitfront, now offering interest on crypto asset deposits through collaboration with Celsius Network. And I was, first of all, I got this from Alex Machinsky off of Twitter because he tweeted this out. He says, I ain't Line. That's pretty fine.  And it gives you the article. Line is the largest company in terms of global users, 460 million to enter crypto and yet coin desk in the block would not write about it. I think they actually did later on. But at that point, Alex was right. They didn't write about it. But it is interesting. So I took a look at the actual article and of course here we are. And just to make this really quick bitfront, which is Line Corporation's global digital currency exchange is now providing interest on crypto asset deposits through a partnership with Celsius. And here's how it all works out. No minimum deposits, no lockups and trade offer may change on a weekly basis. Interest of paid users account every Monday and here's the rate. So kind of it's the same thing as Celsius because they're using Celsius. So let's get into it. First of all, what the heck is Line and what is bitfront? So Line, Line Corporation, Tokyo base subsidiary of South Korean internet search engine. The company's business is mainly associated with the development of mobile apps and internet services, particularly the Line communication app, which is right here. Line, which is free calls and text messages. So kind of like WhatsApp. But of course, in the Asian market, actually, I think it's I think it's global doesn't really matter. I've never seen Line. I don't use Line. I'm sure some people do. I'm sure it's fantastic, whatever. So that's what Line is. But I was curious. I'm like, well, how many users do they have? And just to look it up a little quick stats, Line is a Japan based cross-platform mobile messenger app with about 84 million active users in its home market as of 2020. Maybe it's growing a lot. Maybe there's some of the types of apps they're using, which Alex was talking about five or six million. I have no idea. That's a lot of, that's still a lot of people. It doesn't matter. So for reference, how many people does WhatsApp users have? And there are two billion. Again, really doesn't matter.  If you got 84 million people that are now being, having their eyes open to cryptocurrency, that's fantastic. We will take that. I will take that win. So let me take a look at, okay, so that's Line, Line Corporation. So they have the Line app and they have BitFront. And this is the cryptocurrency exchange itself and another exchange, fantastic USD market out of deposit USD. Well, let's take a look. I'm curious. So let's see. So here's how you do it. Fiat currency deposits. Only residents in the US who have completed some type of verification, AML KYC are able to do or actually make deposits. And it looks like it is ACH or automated clearinghouse in that regard. However, I did notice up here a little section that says by cryptocurrency. Once you click on that, you can put in your Visa or Mastercard right here. And then you can use that to fund your account. The problem here is, well, actually not right now, because they use no fees for Simplix. And for Simplix, it says, currently you don't have to pay a penny processing fees through Simplix, usually account for 3.5% of the amount you pay to purchase cryptocurrency. So if you're going to use that route, then it's going to be 3.5%. So that's not so great. And the thing I always am concerned with is what exactly are the fees? Because are they like Coinbase fees or like Kraken fees? That's not like to call it. So when I took a look at the actual fees, they're pretty low. So the market fees for both makers and takers, LN trades, line trades, you get 0.1% if you use their token. Trades on USD, BTC, OCT are 0.2%. So just real quick how transaction fees are calculated. It's the order amount, which is the quantity times the order price multiplied by the transaction fee, which is 0.2%. I'm good with that. That sounds fantastic, 0.2%. And then of course, if you scroll down, there's different things, you know, as far as like wire and then transfer fees and all the different things, if there are. And then of course, just like Voyager, they have a certain amount that you have to minimize withdrawal or a minimal draw and how much the actual withdrawal fee is. So I know in Celsius, there is no fees to take your cryptocurrency off, which is pretty cool. Voyager and some other places don't, no, do have that, excuse me. Coinbase doesn't have it. Coinbase Pro didn't use to, but with the different fees that are going on with the Ethereum network, they've actually instituted more fees to take your cryptocurrency off. So you want to see all those types of things that I talk about. There is a Google spreadsheet, it's called the exchange and wallet fees. And it's all the different exchange that I've used. I talk about this in every single video, because everybody wants to know what is the alternative to Coinbase. So I've used Coinbase, Coinbase Pro, Kraken, Celsius and Voyager, which are like, I guess I should call them like my one, two, three punch now, huh? Cause Kraken, I moved it from just slightly recommended, but because of their banking license, I moved them into highly recommended. I think they're going to be the future. And not only that, but I mean these fees are pretty darn smoking good. 0.16 to 0.26. And that's just a 50,000.  So just so you know. And then Celsius, of course, I love that one. I've got 30% of my entire portfolio sitting on Celsius, gaining interest. That's how much I like it. Voyager, I think it's easy, but it's teetering. Now tell me right now, it's teetering on my nerves for two reasons. One is that the cost to get things off the exchange for USDC, it's $8 flat fee, right? So if you're taking a hundred bucks of USDC off, that's going to cost you eight bucks. That's 8%. Now, if you want to move a million dollars, it'll only cost you eight bucks. So just something to keep in mind. Also, half of the cryptocurrencies that are on there, you cannot take off. So like Cardano and Polkadot and those other things, they cannot come off the exchange right now. That's something they have to fix. I've talked to them many a time about it. I like them, but they got to fix that. That is not good. I just don't like it. And then there's other things you can take off. Of course, the big ones, Bitcoin and Ethereum, all that good stuff. So just be aware. I've also got Jim and I talk about SimpleSwap, Uniswap, CashApp, Etoro and Crypto.com. And if you want to sign up for them, there's an affiliate link. You don't have to use it. But if you do, you get between 10 and 25 bucks. You can find the link for this spreadsheet in the description of all my videos. It looks just like this. And you can go through all the ins and outs and that's it. And that's it for that section. So I think that this partnership that BitFront and Celsius has just solidified, I think it's going to be big for both. And we'll see how it all works out. But again, I'm a huge believer in Celsius and what they're trying to do. Their motto is do good, meaning do good for the people that are around you and the people that you want to serve. And then finally, do well, meaning financially. So I like that whole segment there. All right, let's move on. Last up, Wales profit mightily from lucrative DeFi yield farming. And I just want to say the DeFi is another shiny object and you could have made a ton of money, but you could have lost a ton.  Not everybody of you, not all of you have held the bag. You've made you made out like bandits. Congratulations. But from what I've seen in the comment section, it's the lots are holding a lot. Anyhow, well, total value locked. And this is what I'm talking about DeFi dropped from 3.25 to 6.3 billion in only four days. It has now recovered a roughly nine and a half billion locked current data from DeFi pulse. Here's DeFi pulse.com. And you can see that this is how much is locked 9.68. So hey, great. This is interesting. Uniswap dominance 19% DeFi pulse index. Okay. So that's pretty interesting. 19.71%. Anyhow, your end up finances become quite popular among ethereum whales, especially after the launch of Y vaults, which allow users to deposit funds. And you put your money in those, in those vaults, and it pretty much just spreads them across a bunch of different DeFi finding you the best yields, gives you the best returns, right? So you don't have to do anything. It's an automated process. Y vaults have been shown to deliver incredibly high APYs or interest rates, percentage yields, to use with some even reaching the four digit percentages. However, these APYs can be somewhat misleading. Given that they only show the expected return for a variable rate at a given time, most yield farming ventures last only a few weeks or even days. Whilst that's a good one. Whilst the displayed APYs reflect the interest earned for over an entire year. So you could see like, you know, these interest rates of 93%, like, Oh, that's awesome. That's for a year. So just be aware.  I'm also going to get these governance tokens like sushi swap, which is going to pay me double and I'm going to get in, sell it and I'm done. And I can do it all in days, not weeks, not months, days. And I'm out of here. So how much are whales earning flip side crypto built a calculator that measures the interest being earned on year.finances. Y vaults using the Y curve vault, which leverages curve to earn holders interest. Flip side crypto concluded that one whale in the Y curve vault locked over. This is crazy. $97 million worth of Y curve tokens, a token backed by a basket of stable coins and eventually made 800 grand after three weeks, which you have to understand it's almost a hundred million dollars and you make $800,000, which of course is fast. But here's a, I mean, if you have a hundred million dollars, you're going to make money anyhow. It just, it's just, it's just a guaranteed process. You're going to make money.  I mean, I don't know, but if you got that much money, I think you're doing okay. So again, those are whales 800,000 up to three weeks. Another whale invested 40 million in the same vault and was able to secure a 500,000 profit in the same period of time. So wow, good for that person. And then lastly, this was the best one, a third whale gradually deposited gradually over almost 11 million and earned around a hundred and 77,000 in the same period of time. That person knows what they're doing because that was the smallest amount at a parched paltry 11 million to make 177,000. So that's pretty good. According to flip side crypto, while the API was not in the four-digit range, why curve users received a simple return of 2.17%, which equates to an annual percentage yield of 40%. So again, I've seen a lot of shiny objects out there in the crypto space. I've been here since 2017. Some of you have been here much longer, 2012, 2011. But I gotta tell you, DeFi is on another level. I haven't seen this much craze since the ICOs in 2017. I thought that was insane looking back. But this DeFi, you have to be careful. And again, be safe with what you do because you never know what's going to happen. All this FOMO is coming from all different sides. And there's no better place to look at than don'tbuymeme.com.  And it has over a million dollars into it already. So again, then look what they did. Don't buy, don't farm, don't drain telegram. But it was supposed to be a joke coin now turning into a real thing. But it's the same thing as Dogecoin. Dogecoin started off as a joke coin. Look, that's still unlike the top 50. So whatever. It's a strange place. It's a weird place. But it's a dangerous place. And you can lose a lot of money. Just be careful. It's all I'm saying. Anyhow, speaking of losing money and different things that are out there, let's jump into a cue of the day. All right, everybody, welcome back to the office. So we've got a cue of the day and actually a statement of the day, which is something that we really should be doing a lot more of that I have been neglecting. But I'll get that in a bit. So the first question here is from Kevin. And Kevin's got a pretty good question goes, Hey, Rob, I'm puzzled over why stable coins are getting ridiculously high interest rewards, which is a kind of odd too. Because when I go to Celsius and I see like, you know, bitcoins at 6.5%. And then a theorem is like 4.15. I see USDC is like 12% or 11%. Tether's the same way. I'm like, what the heck's going on? But the question is, if you look at the Celsius rates, Tether is 11%. Crib has been between 36%. So what's your take on this? And the next question he has is, and also why is Matic and Synthetic also having an interest rate of like 16%. So these are the prices right now, or these are the interest rates that you can get on Celsius. And I will say that it's pretty amazing we can get these high interest rates, as opposed to our local banks, which gives us like a whopping 0.0, well 0.2 or something like that.  And who knows, it might even go negative at some point, which please hope so. That would be awesome because it'd be great for our, what we are into right now, cryptocurrencies, that would be fantastic. So really this comes out of this, supply and demand. It doesn't matter if it is, if it is Celsius, if it is Voyager, or if it is BlockFi, there is a demand for a lot of these stable coins. And actually there was an article that was written up and the same question was asked, and Alex Machines, he actually answered this, Alex is the CEO of Celsius, many states. Stable coins act as the bridge from the fiat world to the crypto world for many of our customers. By turning their physical dollars into digital, stable coin holders can earn over 100 acts. So who are Celsius loaning out these stable coins to? Well, it is big institutions and institutional players. And there is something going on in the background right now where these institutions are going, hey, we want to get into it and we need a lot of these stable coins because we don't want to get our hands dirty with things like Bitcoin and those other type of dirty cryptos. We want to actually just get into the game, but we want to have somebody else do the dirty work for us. Really, that's what it is. And there's a lot of demand for that. Now the same thing is also happening, I think, with Matic and Synthetix. However, with those two tokens, you have to understand that if you're on a exchange, a new exchange or a new business or a new, well, we'll say a new bank, you need liquidity in some way, shape, or form. So even if you have just a little bit of demand for whatever it is, you're still going to need that liquidity. So on Celsius, they probably don't have a lot of Matic. They probably don't have a lot of Synthetix. So they are probably offering a pretty high percentage because there's a little bit of demand and they say, hey, we don't have it. We are short on it. So for the institutions that actually want that, we'll give it to you, but it's going to be, the percentage rate is going to go up because there's not a lot out there. So for you to put that in, that is probably what it is. So what I really need to do, what I really need to do is to get Alex back on the program and talk to us about exactly why the rates are exactly what they are and why they change and why they fluctuate from week to week. We know it's applying demand, but just to go into a little bit more detail would be fantastic. And some of the reasons why I like Celsius because when they loan these out to those institutions, so they're loaning your cryptocurrency out to an institution. And what they're saying is if you want this, that is fine, but you have to put up a pretty big amount of collateral. We're not going to give you to you one-for-one. It has to be like 150% or whatever else is. If the price of those cryptocurrencies goes down like it did in March, you either have to pay us back immediately for the whole loan or you have to bring in more collateral because the collateral you put up actually went down to the ground. So the same type of thing. And this actually just happened 304 weeks ago, I think it was about four weeks ago, where Alex Machinsky again in Twitter said, hey, we're going to have to either have you put in more for the collateral or we're going to recall those loans. And I think it's a pretty good system. So no one gets liquidated and he just says, this is what's going to happen. So that's a very easy, PZ type of way to say it. Supply and demand. I'd like to get Alex in here to really dig down deep into it. But I will say that there must be a pretty big amount of people, institutions, who want to be in this space because they're making a lot of loans. And that's all I'll say about that. So that is the first part. The second part is this is from Will. And Will says, hey Dan, just a heads up. I was on Facebook today. Tom McWall had a post about now accepting DOT.  And he said he was reading the comments and there was a post from Atomic Wallet in the comments about sending Bitcoin and receive some back. So before I even look at the image, I already know exactly what it is. If you send us 0.1 Bitcoin or 0.5 or 0.01, whatever it is, we'll send you double the Bitcoin back or we'll send you triple the Bitcoin back.  And of course, when I took a look at the actual image, that is exactly what it is. And it's just people going through. Now Will here has been on the YouTube channel for quite some time. And he goes, anyway, he goes, I've attached a screenshot. I thought they might be a scam. But when there was heaps of comments saying they had received the Bitcoin and thought, well, maybe it's like the Uniswap offer. And he goes, and I can hear you right now saying it's a scam.  And it seems like things started to, you know, mellow out. And then all of a sudden, when the Uniswap thing came in, then all of a sudden we had a bunch of videos about Uniswap and people were getting scammed left and right. And I know for people on this channel, you're pretty savvy.  But you have to understand, there's going to be new people that are coming in or somebody like Will, who just gets caught up in the moment. And we just have to constantly remind ourselves, you know, it's like, it's like working out, like we know we should all work out, know we should run the weights, all those things, right? But then we're like, well, the couch is right there. And so is that bag of Doritos. So it's one of those things where like, we just need a constant reminder of why we should be doing those things. So we don't be like, Hey, I don't want to get fat. Hey, I don't want to have a heart attack. Hey, I don't want to, you know, have all these problems. Same thing with scams. Hey, there are no asymmetrical giveaways. Hey, guess what? No one likes you that much. Hey, guess what? You're not special. Sorry. And hopefully that will be burned in your memory that there's scams everywhere. And if you see something like this, just remember, go directly to the official website. Go right to Atomic, send them an email going, Hey, are you sending, are you giving away 0.3 Bitcoin for 0.1? Let's let you know.  He's going to say no. Brian Armstrong is going to say no. Alex Machines is going to say no. All the different websites you go to, the official websites are going to say, we're not doing that.  I mean, maybe you are special, but not that special. So that is it for today. So thanks for going through the rambles there. Let's jump back. All right, so that's it. I just want to make this quick thanks for sticking with me for the whole thing. A lot of information out there, but it's good stuff. I think I just want to give some quick shout outs to all the people who have signed up. So let's see, Martin Benuelos, John Carter, that was a pretty good movie. Joey Serena, Jamie A, or Jaime A, Jesse Kirkland. I'm going to try this one. Check this out. Hervoje Soik. Pretty sure I nailed that one. Modern samurai. And I'm sure he'll be talking about my salmon shirt. I am not I, Bob, Telos, Telos, Telos, and Theameth. So thanks everybody for signing up. We appreciate it. If you like these types of videos, there's going to be two more that's going to pop up on your left and right. YouTube generally takes care of all that stuff. So I don't know what they're doing. And that is it. So again, thanks for sticking with me. Appreciate it. See you on the next one.


Welcome to Toffy TV, this is the Everton News Daily. Everton are hopeful of winning the race for Villarell forward on out Dan Diwme. The Blues are in need of more attacking options and have been trying to secure them. They missed out on Dango Uwetara, who was signed for Bournemouth. Dan Diwme has been doing the round for it over a week and I haven't been trying to get this deal sorted in Kevin Fell. Well another couple of teams in forum as well so as of now he still hasn't agreed to join Everton. The 25-year-old has scored 22 goals in 51 games for Villarell since moving from Bournemouth and overall his record is 175 games in 59 goals so like a one in three. Like I said the Everton are in need of attacking options just simply haven't scored enough goals this season and the lone deal for Dan Diwme with a view to a permanent would be a decent way of looking at him I guess and it would work for both parties wouldn't it obviously come in to see how he does in the Premier League if he does well enough Everton can take the option on him in the summer or it could be a situation where he moves someone else comes in for him away from Villarell so after watching this space with that one but just as now Everton haven't managed to complete the signing but are hopeful of getting it done. Everton have also been linked again with a move for Leon Stryker Moussa Dembale today that's coming out of France a £3 million fee has been quoted for the 26-year-old striker. There's been conflicting reports on France some saying he's reluctant to join Everton others saying he wants to come and try his luck in the Premier League again he obviously played in the Premier League with Fulham many years ago. He had his best spell at Celtic Dembale where he scored 51 goals in 94 games and he's done okay at Leon in the first couple of seasons went to Athletic Home and did have a good time there and this season he started six games and scored two goals but he is out of contract in the summer and he would represent the type of striker that Everton could do with. Let's see what happens Everton are thought to be chasing a centre forward and obviously a wide player as well. Westam today have confirmed the signing of Danny Ings and have admitted that he did sign in time so we can play against Everton tomorrow at the London Stadium. Everton were interested in Danny Ings, Frank Lampard's reaction in the press conference yesterday kind of hinted at that. Daddy liked Danny Ings, Ings does have an excellent record of scoring goals against Everton so I'm sure David Moyes has got one eye on that in the game that has been dubbed the El Sachico obviously Moyes and Lampard both under huge pressure to get a result tomorrow at the London Stadium. And there's more interest from Air the North East today in Antony Gordon, Newcastle, very very interested, lots of pressure up there seem to be hinting at the fact that Newcastle are about to make a bid for the 21 year old. He's been in and out of Frank Lampard's side this season, he scored three goals for Everton this season just hasn't quite been able to hit the heights of last season for Everton out the team again. Recently came on as a second out substitute in last week's two-one home defeat by Southampton, Antony Gordon give the free kick away. That led to Southampton's winner and for whatever reason it just hasn't happened for him and it'd be interesting now to see whether if Newcastle do test Everton's resolve at what price do Everton bite. Obviously that money could go into strengthening the squad if a bid comes in in the next few days. Obviously Everton have got till the 31st of January to bring in attacking options and it'll be interesting to see whether Everton would use that money in January or park that till the summer. But if we did let Gordon go out then we'd all move back to square one if we didn't spend the money but me in terms of reinforcements so interesting few days ahead certainly at Everton. That is it for the news daily give the video a thumbs up, subscribe if you haven't and if you want to join us on premier the links in the description and the QR code is on the screen now. See you later.


Welcome back to my channel and welcome back to another monthly meal prep video if you're new around here I do these about every two weeks. So about twice a month It's just what works best for me to be able to put things in the freezer and have easy meals ready to go Also, if you're new, I have all of the ingredients and instructions listed below in the description box You will also find links there where you can go and pin these recipes Individually to your Pinterest board so you can keep them more organized And if you're trying to jump to one specific recipe in this video There are time stamps by each recipe if you aren't subscribed already I would love it if you would subscribe to my channel and let's get cooking the first recipe We're starting off with today is some easy mini pizzas and I'll be honest I planned out this recipe. I hadn't tried it out before I filmed this video But I just kind of had in mind what I thought I was going to be putting together and they ended up being so much better than I even anticipated my sister-in-law was over this day while I was cooking and Even she was saying that they are so good She's like I'm never buying bagel bites or pizza pockets again because now this is such an easy way To make up pizza that tastes so much better So you just basically want to take some English muffins slice them in half and then you're gonna make a butter mixture So you have some butter some Italian seasoning and some garlic powder Mix that together and then you want to brush that over the English muffins After you have your English muffins coated well in butter You want to take your pizza sauce and go ahead and douse them up with that And as you guys know if you watch my channel often, I have to shred my own cheese I don't do pre-shredded cheese. So this was a block of mozzarella Shredded up into fine shreds and then just to make it a little extra fun I did do some mini pepperonis you could do regular absolutely and you could also do any toppings you want to for these So after that I just pop them in the oven in the description I will leave both the times that you want to do it If you're only partially baking them to put them in the freezer to finish baking them later when you're ready to eat them Or if you're gonna bake them all the way through to eat them right away This recipe does make 12 mini pizzas. I want to thank Telldronix for sponsoring today's video They offer this fabulous air fryer if you guys have been around for a while You know how much I appreciate using an air fryer And it is one way to cook a little bit healthier Because you use less fuel use 85% less fat than a deep fryer But you get the same crunch and it just gives food such an amazing texture The heat is distributed evenly through the air fryer and it always gives a great color to your food It has a built-in fan and a 360 air convection system That can quickly circulate the hot air around the food to cook dishes It has precise time settings and temperature control which I love Particularly for different types of meats and proteins has 11 preset settings For different types of foods It is definitely family-sized which I appreciate that I can get all of our food into one basket It's got a very deep large basket that you could put a whole chicken in The basket on the inside you can remove and put into your dishwasher It's super non-stick even with the things that I have made in it I haven't had any issues cleaning it. Check out the links and the information in the description box to pick up your own air fryer I highly recommend it and you guys know that you see a lot of recipes that can involve the air fryer here on my channel Alright, so the recipe that I'm making in the air fryer today is actually some healthy coconut shrimp This was something I have been wanting to try for a little while now And this was a great excuse to show you all how great this air fryer is So you just need a little bit of coconut flour some unsweetened coconut flakes some eggs a little bit of sweetener All of the instructions and ingredients are listed below and it's super simple to make I think for some reason I assumed this was going to be difficult But it was way easier than I imagined so you could eat these right away when you pull them out of the air fryer or Since they're already fried up You could put them in a bag and throw them in the freezer and then just reheat them in the air fryer It would be really simple lunch or even an appetizer if you're waiting on another meal I just think that this is something that I'm definitely gonna keep in my recipe book To go along with the shrimp. I decided to make a spicy Kind of Asian inspired sauce. I know that some people I think call it boom-boom sauce or something similar to that So it just has some mayo some sriracha a little bit of sweetener and then this chili Sauce I think that's what it's called or chili paste of some kind just mix it up If you're somebody that likes spicy then you will definitely love dunking the shrimp in this Also, this recipe does make a lot of this shrimp. It is two pounds of the really big shrimp So even if you ate some after you made it you definitely would have some for the freezer the next recipe that I jumped right into was a broccoli chicken soup or Broccoli cheddar chicken soup. I'm not sure exactly what I'm gonna call it but you start out by cutting up about three Chicken breasts. I actually had thought out four and didn't realize it So I went ahead and cut it up but I probably would get away with three for this bowl of soup and I cut them into really small pieces next I went Head and use my Dutch oven and put some avocado oil in the bottom and fried up the chicken pieces I put some salt and then a little bit of onion powder just to season it while it was cooking up next you'll need some chicken broth or You can opt for some bone broth. That's what I'm using here. I love this bone broth I think I used it in my last meal prep as well It's just a really quick way to make up broth when you need it for a soup plus It's got way more health benefits than regular broth does and it tastes good in my opinion So I'll leave the link for it below. It is from Amazon and this one does have some turmeric in it So it added to the yellowy color of the cheddar soup The next ingredient you'll need is some heavy cream. I actually got some coconut milk to try out for this You definitely do not need to do the coconut milk or go that extra step. You could use regular heavy cream but I just like the fact that it adds a few more health benefits and For some reason for myself when it comes to milk and creams I'm a little more sensitive to that than cheese. So that's why I decided to try this out You know that every good recipe has butter in it somewhere Okay, to get the cheesy cheesy flavor you got to mix some mild and sharp cheddar and again with the shredding my own cheese I had to shred up what I had going on for this I just don't like the powder that they put on the store-bought shredded cheese I feel like the cheese doesn't melt as well and it takes away from the flavor next you want to add in two bags of broccoli and cauliflower some salt pepper and One other thing I wanted to mention about the broccoli and cauliflower is Mine ended up being a little bit bigger in size and I wanted it to be so I didn't film it but I did end up running my Immersion blender kind of through the soup just to help chop up the broccoli and cauliflower But I'm sure you could get smaller chopped broccoli and cauliflower to dump right into this After it simmers on the stove all the cheese melts and the flavors combine. This is so delicious I would say that this soup has a very savory note to it with the bone broth and The worst chester shire sauce in it. It was so delicious So as I've shown you guys before my ideal situation with soup is to put it in these little cups So that I can reheat it quickly for lunches or a quick dinner the next recipe I dove into was Some cherry cheesecake bites. These are pretty healthy But I will give you some alternatives if you don't have special ingredients on hand like instead of the almond flour You can use crushed up Graham crackers. I'll leave it all in the description box. So you guys have options I like to do that so that anybody can make these or you may only have some of the ingredients on hand And you want to make them right now, which I totally understand I love watching cooking videos and then I'm in the mood to cook and I want to do it now So I did use the bottom of a little spice jar thing here to smash down the crust into the mini Muffin pan and I wanted to say this as well with this recipe I think it depends on the actual size of your mini muffins I feel like my pan is a little bit of a smaller mini muffin and It made more of these it did make more like two pans for me But depending on what size your pan is it may depend on how many you end up with from this recipe So I did use a sugar substitute. I'll leave the details below and then I use these red tart cherries I have never used these for anything before But I saw them on my Walmart pickup like online Which I love that I'm seeing things that are at Walmart that I would have never noticed before Just from doing Walmart pickup so often so I went ahead and use them They don't have any sugar added to them and they are delicious. My girls were eating them right out of the can They were so good So I had a little mishap in my week and my refrigerator broke the day that I was filming this And so I wasn't able to finish up the last recipe I wanted to share and that was making yogurt I have shown you guys this in the past, but I've never written out the instructions and the ingredients in the description box So here goes I'm going to insert some footage from This past year that I took explaining how to make my yogurt because I get a request for this a lot on Where is that video that you make your yogurt?  Okay a more detailed Like description or instructions on how to do this It's so easy and I'm also going to tell you kind of your alternate way to do it If you don't have a pressure cooker, so basically the first thing you need to do is heat the milk up to a hundred and eighty degrees So you will need something like this to tell you how hot it is no matter if it's in your pressure cooker or on the stove top So if you were doing on the stove top in a big pot You would just dump your milk in get it going and I'm gonna put the sautee setting on my pressure cooker And get it up to a hundred and eighty degrees Careful don't dump it Good job Okay, now get the other one open the lid Okay, it's almost at 180 and I'm filling up is think of ice water I just pull it out of here and you want to drop it down to a hundred and ten degrees Whenever you are at this point and it's slowly dropping down to a hundred and ten degrees You'll see that there's kind of what they call a skin that gets created on top and you can just remove it Do it drops to a hundred and ten degrees You want to immediately pull it out of the ice water because you don't want it to drop any further than that And then you can put it back in your pressure cooker I will tell you in a second how to do it if you're just doing it in a pot and not in a pressure cooker So I did that and then I actually hit my yogurt setting here and just hit on and then it pretty much does the rest But one very important step that you need to do when you're making yogurt is you actually need Yogurt from your last batch or you can buy yogurt if it's your first time around you just want to buy plain yogurt so you need about a fourth cup of it and then I take and Ladle out a little bit of the milk to kind of bring that yogurt to temperature So we'll just put a little bit in a bowl here Then you'll want to put the yogurt into the warm milk and I just kind of stir it into the milk Before I dump it back in so basically though that yogurt has the cultures in it to Culture the milk that you just cooked up. So it's like your little starter So every time you make a batch you want to put aside about, you know A fourth cup of yogurt just so that you have it for your next batch You'll dump it back in here. It doesn't really matter if your pressure cooker is Vented or unvented doesn't matter if your vent is open or closed I just put mine closed and then you just let it sit the eight hours on the yogurt setting And when the eight hours is up you will have an entire pressure cooker full of yogurt now I'm going to tell you what to do if you don't have a pressure cooker So you would put your pot in ice water once it hits a hundred and eighty degrees just like we did with this and then You'll pull it out as soon as it hits a hundred and ten and then you put the lid on your kettle and wrap it in a bath towel I know it sounds a little bit funny But wrap it in a bath towel and then you just stick it in your oven and that does a really good job I've made it that way before but that does a really great job at keeping the temperature where it needs to be And then again let it sit for you know eight to ten hours and check it and you should have Yogurt that is perfect So you would do the same thing with mixing in your yogurt starter if you were doing in a kettle as well This kind of saves the whole mess of needing to wrap it up and keep it in a bath towel So it just keeps it the exact temperature. It needs to be inside of here It's the next day and I just once the eight hours were up I actually didn't like it wasn't quite as thick as I wanted it to be So I left it go for another two hours in the pressure cooker You can kind of test it as you go, but as you can see it's got a pretty good consistency My last batch was a little thicker than this, but that's okay. It can just be different every time So anyway, so I will take out a little portion of this for my next batch And then here are the strawberries that were left from yesterday So I'm actually gonna throw those in this bowl and use my immersion blender and blend them up You could totally smash them up with a fork I just want them to be a little bit smoother and then I'm going to mix the yogurt in and then I'm gonna do my sweetener I think that it's better to mix the sweetener into the whole yogurt batch And then kind of taste as you go to see how much you want to add to it


So, hi everybody. My name is Victor Stine. I'm working for Red Hat to maintain Python downstream, which means on Fedora and Red Hat on two-piles Linux. But I'm also maintaining Python upstream. For example, fix the CI to make sure that the CI is always green. And I'm here to talk about the Python performance past, present, and future. So I would like to start my journey with the very beginning of Python and what has been tried in the past. So Python got many different implementations. And the first one has been created by Guido van Rosum almost 30 years ago. This is called C Python. C comes from the language C. So it's written half in Python and half in the C language. A few days later, a second implementation has been written in Java. It was first called Python, but later renamed Jyton. This one has been created by Jim Hagenin. For concurrency, a project has been created with the name Stackless Python. Stackless means that you are able to switch two different core routines, and the Stackless Python makes it efficient. This one has been created by Christian Thiesma. And the same Jim created also Iron Python, which is written in a C chart on the Microsoft runtime. And more recently, we saw MicroPython, which is designed for microcontroller. And this one has been created by Damien George. To make Python faster, we have a long list of different optimization projects. The first one was the JIT compiler created by Armin Rigo called Psyco. This one was only for a single function, and it was using a decorator. So when you call the function for the first time, it is JIT compiled, and the next call will be faster. But Armin saw that this design is not really the most efficient way to optimize Python. So later, a recharge project has been founded by the European Union, and the PyPython project has been created, which is a JIT compiler for Python. Google also had an intern creating an laden swallow, which promised to make Python five times faster. Dropbox also tried to make Python faster using an LLVM JIT compiler called Piston. I think it had one or two people working on that for a few years. And Microsoft also had this project called Pigeon. And if you notice the dates, you can see that most of this project has an end date. So we will try to figure out why they have an end date. When you create a new Python implementation, you have two main approaches. The first one is to start from the current C Python, and the other one is to start from the scratch. If you start from the C Python, this is the approach chosen by and laden swallow, Piston and Pigeon. When you do that, the cool thing is that you directly get a support for all existing code because it's already C Python. You support the extensions, everything works, and you can just put your change on top of Python. But when you do that, you inherit all the legacy code of Python and all the old design of C Python, which again has been created 40 years ago. And maybe some technical change made 30 years ago, made sense 30 years ago. But today our CPU are more coarse, and some design doesn't fit well to scale. For example, in Python, we have something called the global interpreter lock, or the GIL. And the GIL basically limits you to one thread. But we have also some specific C structures, reference counting on a specific garbage collector, which also prevents us to implement some kind of optimization. On the other side, if you start a new implementation from scratch, the design chosen by PyPy and Jyton on Python, you don't have to do all this legacy code and all this old design. You can do whatever you want. And for example, Jyton on Python don't have any GIL. So they are a little bit to scale on multiple CPU from the start, thanks to the GVM and the runtime of Microsoft. Another example is that PyPy doesn't use reference counting internally, but they use a tracing garbage collector, which is more efficient. But when you start from scratch, the main drawback is that for the C extensions, either you don't support them at all, which can be an issue depending on your kind of application, or it is slower than C Python. And for example, for PyPy, they have a module called CpyX, which creates a Cpy object on demand. So when you access something which comes for our C extensions, they have to emulate the Cpy structures and API. And this new object has been, should be synchronized with the PyPy objects, which works, but the implementation is quite complex and maybe not the most efficient way to interface with C extension. And another issue of the different implementation of Python is that you are in a competition with C Python. And C Python has almost 30 active core developers to maintain it just to remit the pull request and to work directly, but obviously we have way more contributors proposing changes. And another issue for the implementation of Python is that all the new features first land in the C Python code, which means that the other implementation have to catch up to Python to get these new features. And so why would a user prefer an audited or incomplete implementation and who will sponsor the developments if you have another implementation? And what is very interesting with the previous project that I listed to make Python faster is that they wrote a summary of why they decided to stop the project or why the project is tall. And for the case of unlanded Swallow, there are three main reasons. The first one is that at Google, the Python language is not really used for performance critical codes. So making Python faster is nice, but it's not a priority for Google. And having a different Python interpreter caused some deployment issues. It was too difficult to deploy. Being a replacement, it was not enough. And I think that, for me, the most important reason is that our potential customers eventually find other way of solving the performance problem. Because in Python, when you are able to identify is a bottleneck of your performance, there are many options available to make it faster. You don't need to work on that. Another optimization project was a Python, which was developed for three years. And again, they wrote a report explaining why they decided to stop. And again, one reason was that at Grabbox, they started to rewrite the performance bottleneck code in other languages, such as Go. But they were also very optimistic about optimization that would be possible to implement in Grabbox. But they figured out that if you would like to run any kind of Python application, the backward compatibility and the compatibility with C Python to have a very close behavior is very difficult to get it right. And to make it faster. So to summarize, C Python remains the reference implementation, but it shows it's an old age. There are multiple optimization projects which fails. And Python is a drop-in replacement. It's four times faster. But it's not widely adopted yet. So I would like to ask why. Okay, let's move to the present. When you, again, when you identify the bottleneck of your code, you have different options to make it faster. First of all, please try PyPy because for many users, it just works. You replace Python with PyPy and your application becomes twice faster or ten times faster or even more. It really depends on your workload, on your kind of function or what you do in your application. And there are many users who just replaced Python with PyPy and it was super fast. And the very nice part of PyPy is that it is really fully compatible with C Python. But there are some issues which explain why it's not widely used. And I think that the first reason is the support for C extension. So as I explained, it's a little bit slower than C Python even if it has been heavily optimized last year. But I would like to talk about that later. It has also two issues which are the memory footprints, which is a side effect of the JIT compiler because these JIT compilers use memory by itself and you have multiple versions of the code. So in some workload, it can be an issue. And another smaller issue is the startup time. When you have, for example, a command line interface, you may want to run it fast. But the JIT compiler makes it a little bit slower than C Python. But if you use the case of Mercurial when you run the same command multiple times, one solution can be to have a server running on the background and a client will just connect to the server. And this is a design chosen by Mercurial and PyPy is efficient in this case. And now I would like to come back to the very infamous global interpreter lock. To try to explain it, let's say that you have three threads in your application and they are all CPU bounds. For example, you compute anything with integers or floating point number. And because of the GIL, even if you have something called threads, technically they are Python threads and your C Python is only able to run it once at the same time. So the efficiency is only one-third here because I have three CPU. But you have to understand that the GIL doesn't prevent you to write efficient codes because the issue is only for CPU-bound codes. But for example, if you have a different workload of using C functions, we don't require the Python GIL. You can release the GIL and it means that you can run two threads in parallel. For example, when you read a file from the disk, Python release the GIL for you. When you compute hash one hash, it's also you also release the GIL. Or when you compress data with BZIP2, for example, you also release the GIL. So in practice, there are many cases where you can really use multiple threads and the efficiency is optimum. But to come back to the CPU-bound issue, there are solutions and one easy way to use all your CPU is a module called multiprocessing. It makes the architecture way easier to spawn multiple tasks in different process. Because in each process, you have a GIL. So thanks to that, you are able to distribute the workload on all your CPU. And again, the efficiency is 100 percent. So the multiprocessing module works around the GIL limitation. And there are two very good news for you for the next release of Python. First, the shared memory is now supported. And this is very important when you exchange a lot of data between the main process and the worker. Because if you exchange, for example, a very large numpy array, instead of having to copy the large array between each process, you can just put it in the shared memory. And all process will get it immediately. And there is also an optimization on the PICL protocol. PICL is a serialization module used by multiprocessing to distribute data across the worker. And a modification has been merged in Python 3.8, which avoids the memory copies. So you can take your array and write it into a socket. And you don't need to duplicate the objects. Because previously, you had a very high memory usage peak just for this realization. And now it's more efficient. Another option to optimize Python is to use the siton. And the nice thing with siton is that you can take your current Python code and compile it with siton. It's a compiler, so it's only done once. And after that, you distribute the compiled code. It's not a cheat compiler. And if you do that, it's already a little bit faster. But if you add some annotation about the type, siton can generate very efficient codes, because it knows the internal of Python, and it can rely on the type to use the most efficient way to execute your code. And the nice thing with siton is that it will handle the CIP for you. So you don't have to worry about, for example, the Python version. You don't have to worry about reference counting, which is tricky to get it right. It's like using a memory allocator. It's better than if Python does it for you. So it's a very nice way to write a C extension. And I suggest you to write, to use siton instead of using directly the C API. If your application is mostly using NumPy, you have other options. For example, NumBar is a cheat compiler, which is specialized in NumPy, and it translates your subset of Python and NumPy into fast code. Fast code means, for example, that you are able to take your function and execute it with the gil released. And thanks to that, you are able to distribute a task into different threads and run them in parallel, and NumBar makes it really easy to do. And it's not only about threading, it's also about single instruction, multiple data vectorization. So it means that in a single CPU instruction, you can execute multiple tasks, which is very efficient when you have code, which is very using a lot of numbers, especially floating point number. For example, the CPU supports SSE, AVX, or the newer version of AVX. And when you do that, you can make the code up to, for example, eight times faster. And you can also use a GPU acceleration using NumBar. Which means to take your code which looks Python and execute it on your GPU, because the GPU are really, really fast to execute floating point numbers. And it supports NVIDIA CUDA, but also RM WorkM. And one of the issues that we had in Python one or two years ago was that we got many optimization changes proposals, but we were not able to decide if this kind of change will make Python faster or slower, because when we run the benchmark, the benchmark sometimes says slower, but if you run it again, it said faster. So it was really hard to take a smart decision. So I spent time to work on the benchmark suites, to make it way more stable, to be able to reproduce the results. And thanks to that, now we have the speed.python.org website. Here you can see the performance of the decimal module on four years. And telco is a benchmark to compute a lot of numbers using the decimal module. And the good news is that if it goes below, it means that it's getting faster. And this is very important for us to be able to accept or to reject an optimization. To summarize, PyPy doesn't require any code change. So please, again, just try PyPy on your code, because it doesn't require you to do any kind of change. The multiprocessing module scales with the number of CPU. If you are able to distribute workload into a different sub-process, the issue is that you have to serialize data, which can be a little bit expensive, but now we have shared memory and faster picker. You should use siton and not use the C API directly. And numpy makes numpy faster. So let's move to the future. I would like to come back to a point which become very important for me. It's the Python C API. Because as we saw, the Python C API is causing a lot of trouble with the extension, especially on PyPy. I think we have to fix this issue to make Python usable by everybody. And to explain you the issue, you have to know that at the early day of Python, the C API evolved organically, which means that there was no clear design of what should be public, what should be private, what should be exposed or not. And because of that, we exposed many internal functions by mistake. Because the design was basically that Python is made of many C files and just to use a function defined in a wind file and call it in a different file, you have to expose it somehow. And for convenience, it was convenient to just expose everything. And at the beginning, it was first used inside Python, but some people saw that it would be interesting to use it outside Python. So some people started to write the extension using that. And this is also part of the success of Python. Because you are able to use all existing C codes, it's really easy to put Python on top of that. And it makes Python very successful. For example, in the scientific world with numpy. But because of the initial design of the C API, we exposed way too many implementation detail. But before going into the detail, the first good news is that the situation went better in Python 3.8, which is the next release of Python. So to explain you previously, we are all in the file in the same directory, which means that if you would like to hide a function from the public C API, you have to opt out for that using an if def block to say that, oh, this part is private. Don't use it. And we also have something called a stable ABI or stable API. But to declare functions which are not part of this API, again, you have to opt out using an if def. And because of the if def design, sometimes we added functions by mistake to the stable API or we added a private function by mistake. So the solution for that was a work started by Eric Snow is to create a subdirectories. And I continued this work in Python 3.8 to have a C Python for the API specific to C Python. And the internal is an API that you should not use. But we decided to expose it anyway because for very specific use case like debuggers or profilers, you may want to access C Python internals. And to access the internals, sometimes you cannot execute codes. You cannot call function when you inspect the internal of Python. So we have to expose all these structures. And now the include directory is only what I call the stable C API. Stable means that you should be able to use the same API and multiple Python versions. And during this work, we succeeded to move many private functions from the public headers to the internal header. And we also started to move some structure like the private interpreter states to the internal API. So slowly, we can hide more and more implementation detail. And another good news, it's something related to the API. When you take your extension and you compile it, you get a binary file. And when you go to the binary level, there is something called the ABI, which is an application binary interface. And the premise of Python is that if you use the stable API, you are able to use the same binary on multiple Python versions. But there was an issue with that, is when you would like to debug an application, it was very painful to use a debug build of Python because the ABI was different. So if you have a Linux distribution and you would like to use a debug build, you are not able to load all the extensions because all the extensions are compiled in release mode. And the ABI was different. So because of that, you had to recompile all the extensions. If the extension doesn't have many dependencies, it's fine. But if the extension is like a GTK, which has a lot of dependencies and requires a special compilation flag, it can be painful to have to recompile it manually. So now the good news is that because the ABI is the same, you can just use a debug build of Python and you don't have to recompile anything. And a debug build is a build which has many more sanity checks. And this is really efficient to detect many bugs in the extensions. To come back to the API issue, to try to explain you why it is causing us so much trouble, you have to understand that the C API is not an issue only for PyPy, but the C API is an issue for C Python itself. Because of the C API, we cannot implement many simple or obvious optimizations. And I use the example of a specialized list because I can explain two different problems of the C API with this example. To explain to you what is the specialized list in Python, when you create a list, it's basically in memory, it's an array of pointers. That's it. Technically, it's a pointer to PyObject. So it means that if you have a list of integers, for example, you have to first go to the list. From the list, you follow the pointer and you go to the number. So there is an indirection. But it's also used more memory because you have an array and for each item you have a second object, which means that memory footprint is not most efficient. And in PyPy, they manage to implement a different strategy is to have specialized lists. So the array of the list is an array of integers. So you don't have this second object, you don't have this indirection. Everything is directly in the list. And this is a very smart strategy. It's very memory efficient. If you have a list of integers, it's really convenient to do operation directly on integer. You can also specialize your code for this kind of list. But can we do that in Python? Can we modify the Python and the PyList object? It's not really easy. There are two problems which prevent us to do that. The first problem is that there is a PyList getItem macro, which access directly into the array. So you have your array of pointer and the macro goes directly into the array. And the extensions must not access the structure directly. Because if you do that, we cannot modify the structure. If the array becomes an array of integer instead of an array of pointer, you get the wrong type and you get a crash. But maybe we can modify the macro to say that, oh, if it's a specialized list, maybe in that case you return an integer. Or if it's an object, return an object. But again, there is an issue with that. Because the PyList getItem macro return a borrowed reference. To explain you what it is, usually when you call a Python function, like, for example, PyLong getLong to create an integer or PyString from string to create a string, you get something called a strong reference to the object. It means that when you are done with this object, you have to call Decref to say that I'm done. Python, you can release a memory. But a borrowed reference, it's something different, is a pointer to the object. But you must not call PyDecref. Because if you call PyDecref, you may get a crash. But what if we modify the PyList getItem macro to create a temporary object? So if you imagine that we have this list array of integer, and when you access into this array, you create a PyObject for this integer. Maybe we can do that in the macro. But what happens with this object? When should it be destroyed? We don't know. And this is an issue with borrowed references. We don't track the lifetime of the objects. And this is a big issue when you implement a language. So in PyPy, they manage to implement some strategy to support that. But it's a little bit tricky to get it right. It's maybe not the most efficient way. And the solution would be to just avoid borrowed references because it caused a lot of troubles to many people. So maybe we can take this API and make it better. So for example, we can try to hide structure fields, which means making structures opaque. And for example, this code must fail with a compilation error because on the second line, we access directly into the PyObjects. And this is a thing that I would like to prevent. Because if you give the ability to see extensions to inspect the internal Python, it means that we cannot modify the structures like PyObjects or like PyList object if you would like to implement a specialized strategy. So somehow we have to make sure that you never access any structure. Another change would be to remove all functions using borrowed references or even worse functions which are stealing references, which is another beast. And we should try to replace all macros with function calls. Maybe we will have some troubles because we already tried to modify to make significant changes between two Python versions. It was Python 2 and Python 3. And it didn't work very well. So the issue with modifying the C API is that people are actually using the C API. And there are many, many extensions on PyPI. And in my experience, every time that we make a change in Python, we break an unknown number of projects. So if we modify the C API, we will likely break many projects. So maybe we can try to fix most of these projects, but it will take a lot of time. So we have to do it anyway, but I'm not sure that it's the best strategy for the short term because maybe we can even not fix all issues of the C API. And it will just take too long. So maybe there is another way to do that. The good news is that the PyPI developers are already thinking about these issues for two years. And they came up with an idea of a PyUndle API. So that would be a brand new C API. And the cool thing is that it would be correct from day one. Which means that you avoid the borough references issues. You avoid all mistakes of the C API. And from the beginning, you start with a very clean and well-designed API. So in short, the idea is that instead of exposing everything in Python with a pointer to an object, you use an opaque integer. It's something similar to the UNIX file descriptor or to a Windows hundle. So we would have something like the open to create an hundle that you cannot inspect what is inside the hundle.  You can duplicate the hundle. And when you are done with the hundle, you just close it. And the nice thing with these ideas is that it's something doable. For example, for C Python, it would be written on top of the QNC API. So we can do it right now as a third-party project. For PyPy, it would be more efficient because it doesn't expose the internal of PyObjects. And the idea of hundle on the ability to duplicate a hundle, this is something which plays very well with tracing GC, which is a garbage collector used by PyPy. And the other very good news is that if you are already using Cyton, you would not have to modify your code because we can modify Cyton to generate the directly code using PyHundle. And now I would like to talk about something else. We saw the C API. But there is something else in the C API which is the reference counting. So to explain you the issue, Larry Hastings created a project called Gelectomy three or four years ago. And the idea was to remove the gill. So in practice, it means to replace a single lock with a smaller lock, one lock for each mutable object. Replacing the lock is doable. And he managed to do that. But the goal of the project was to make Python faster. And he got some performance bottleneck on something called the reference counting which is a way to track the lifetime of objects. So each time that you access an object in Python, you have to increment the reference count to say that you are using this object. And when you are done, you decrements the reference counts. And it means that each time that you access an object, you have to modify an integer. But if there are many threads which access to the reference counts, you have to make sure that the reference counting is consistent. So two threads might not identify the integer at the same time. And one strategy is a current one is to put a giant lock. Or maybe you can put one lock per object for each reference count. So Larry tried different strategies. For example, use the CPU atomic operation. The idea of this CPU instruction is that you put a lock on a CPU cache line to make sure that only one CPU access this cache line at the same time. And this is fine when you access different objects in the address space of a process. But if you access objects which are closed, you may quickly go into a performance bottleneck because you lock the same cache line and all CPUs are stored because they are waiting for the lock. Another strategy tried by Larry was to not write directly into the memory, but create something called a log of in-cref and decref operation like a queue of operation. And the nice thing is that if you in-cref and decref, when you read the log at the end, it means that you don't have to modify the reference counter because the in-cref and decref is a new operation. But again, the complexity of the solution and the cost of at runtime was not really efficient. So I don't want to elaborate too much into the detail. You just have to recall that reference counting doesn't scale well with the number of threads. So it's a very good solution when you have a single thread, but if you would like to spawn an application into multiple threads, it's not the best option. So one option that we have in Python is to get rid of the reference counting inside Python, which will replace the current garbage collector with a tracing garbage collector because this is this is a well-tested strategy. For example, PyPy is using that with success, and many modern language implementation are also using the tracing GC. And the nice thing is that we can use it inside Python, but outside Python, we can continue to use reference counting. This is not an issue for the performance because what is the most important is really the internal of Python. And another project to make Python faster is to create sub-interpreters. This is an idea of Ericsnow is to use multiple interpreter to add support for multiple interpreter in the standard library because, in fact, we already support something called sub-interpreter, but the API is currently hidden in the C language. You have to access the C API for that. So Despep wants to make it accessible in Python. And the main motivation for that would be to have not a single global interpreter lock, but have one lock per interpreter, which means to be able to run each interpreter or interpreter in parallel. But this is a work in progress because we have to refactor a lot of code to make it possible. And the internals of C Python sometimes are very tricky to be modified. So to explain you the idea of sub-interpreter, I would like to come back to the issue of the GIL. So if you have a workload which is CPU bound, you are only able to use one CPU because, in fact, the design of Python is to put all threads into a single object called interpreter and to handle the consistency of objects. In Python, we put a GIL on top of that, which is an easy solution, but not very efficient because we cannot use all CPU. So the idea of sub-interpreter is that you continue to get your multiple threads, but you put each thread in a different interpreter, and each interpreter is able to run in parallel. And thanks to that, again, we can reach 100% efficiency. And my expectation from this design, if you compare sub-interpreter to multiprocessing, is that because everything is a single, is into the same process, I expect that we can share more memory between the different threads. And so I expect a lower memory footprint, because when you have a very large application spawning 10 process or 20 process on even more, slowly you can reach the limits of your hardware or you may have to pay for a more expensive flavor of a virtual machine on a cloud. And so the expectation of a lower memory footprint is that you will have to use less memory and so pay less on the cloud, for example. And I also expect that we will get faster locks because, again, we are into the same process. So it's easier to do things, and I hope that we can do some locking without any system call. But one of the main limitations of the sub-interpreter is that you cannot exchange objects directly between two interpreters, because to be able to get full speed for a single process, a single interpreter, you must not share anything between the two interpreters. So each interpreter should be isolated from the other one, because as soon as you have a common resource, you need some kind of locking for the consistency. But obviously, we can imagine some solution, like, for example, share memory to pass data with a very low other rate. So to summarize the future of Python, in my opinion, the QNC API has design issue, and it will be tricky to fix them. The reason is the idea of creating a new API called PyHandler. We have to move to the replace reference counting with tracing garbage collector in C Python, and there is the idea of a sub-interpreter in Python. So to conclude, there are many previous optimization projects which failed. Right now, you have a site on multiprocessing and Numba, which are working very well to make your code faster. And there are very promising projects, which are the PyHandler API, tracing garbage collector and sub-interpreter. If you would like to know more about all these topics, here is my list of links to get more information. And I'm not sure if I have still time for questions. So thank you. We cannot hear you. Thank you very much, Victor, for this amazing keynote. We will have a few minutes for some questions, and I will currently ask the audience to come to the microphones here and there for your questions. Yeah. Thank you very much for the very interesting talk. Seeing all those changes, do you see, like, in the far future, emerging C Python and PyPythes at some time in the future? Of course, now you have a lot of changes that go in direction, like PyPy is doing with the garbage collection and so on. I'm not sure that you understood correctly. You are asking if this change benefits most to PyPy. If you would see, in the far future, a promise to merge C Python and PyPy and make it one project, eventually? I think that one easy solution is to remove C Python and just use to PyPy. Because PyPy is way more efficient, but right now I'm not sure that we can do that because of the few issues that I listed of PyPy. And I think that the most common issue is the C extension, which are slower. And depending on your workload, sometimes it can be really the bottleneck of your workloads. So right now, we have to keep both. But maybe in the future, we can at least converge to the same solution. Because we are discussing between C Python, PyPy developers, and we all agree that we have to move to the same solutions, especially for the PyPy API. Thank you. We have one more question over there. Thank you for the very interesting talk. I have a question for a very similar topic. You were kind of wondering why PyPy wasn't adopted more. And don't you think that's mostly due to the fact that it just isn't the reference implementation, so people will default to C Python? I'm not sure that I understood correctly your question, sorry. Is the reason that PyPy isn't adopted more not just simply due to the fact that C Python is the reference implementation, so that people have to choose and don't at the moment have any memory, any performance problems, they will choose C Python by default. So what I understood is the question is why people don't pick PyPy instead of C Python? Yes. And what I understood is that if PyPy would be just way better, people would just move to PyPy. No, I'm not talking about better, but just the fact that C Python is the reference implementation by declaration. As I said, one of the reasons is that new features first land into C Python. So people sometimes want to get the latest version of Python to get the latest features, but in PyPy they have a smaller team, so they cannot implement them as fast as C Python. So it's not an easy issue. I think we can maybe continue the discussion in the hallway because we are out of time.


Poor motivation has been identified as a major issue that could worsen the madness of brain-draining Nigerian health sector. A recent assessment done by a concerned civil society group in Akita state reviews that nurses are now in short supply at primary health centers leading to unpleasant experiences by patients. According to experts' information, almost 80,000 nurses and midwives may have left Nigeria in the space of five years. The National Association of Nigerian Nurses and Midwives in Akita state said by statistics, nurses working at the primary health centers in the state have reduced from 300 to 68 in the space of 10 years. Nigeria has witnessed increased migration of nurses to developed nations due to push factor which is the low renumeration, poor governmental policies, poor working condition, and the poor factual such as good working condition and better fee, all powered by the developed nation. Yes, we're not denying that. We do know that people are migrating. But then the question is what is the government doing or what has the government done? And this is where I was started. We are the first states in the entire southwest and probably one of the first three in the entire country that has matched the Azad Alamance, the federal government base. We started doing that about four or five months ago. There was a time a particular nurse in this state, I think I should recollect her name. That may be Mrs. Ola Dippo, Uluwa EMC. I think I still can recollect her name. I was able to deliver a woman when it was a state of pregnancy along that line. Till today I start to be corrected. That woman needs a lot of motivation doing something for that woman. And if I have my way, I will strongly recommend that that woman should be giving career progression to be motivated in the level of her career so that these people will not be moving what I can call what is popularly known.