Everybody forced here ripping 20 to 23 prison basketball choice 10 box number 8 tiered find the results on your screen anytime elite sports gods calm We'll get started now. I'm not gonna recap this break. It's gonna be a quick one. That's right. Oh, yeah That's right. I just wanted all the all the packers all the mid-packers receivers to show up. Did he bring calm? Is he not I think he's a jet now So it's a clear number one that a bunch of like number four's Randall Cobb is like Josh. Holy and R. A. Dickey Silver Halliburton for the Pacers and Bertans Mavericks. Yeah, pelicans red choice rookie auto E. J. Liddell Zardin Cobb There you go pelicans blue yellow green Jamal Murray nugs John Marant Grizzlies and a trimmer for the third pelicans that Jordy Nelson Donald driver as well Bubba Franks blue Cameron Johnson sons this number to 49 and A red bam out of bio heat to 88 I'm on green Was it as a Jamaican Lee is that who was? That was hyped up every year and I only had like one good season Silver Halliburton Pacers again and Ray Allen Sonics going to the Thunder Red choice auto for the Warriors is Anton Jamison blue yellow green is a shooter Lakers Sabonis Kings kid for the Nets Luda 49 Warriors Andrew Wiggins 49 there and red Kendrick Dunn Lakers to 88 I guess 18 to go Sunday Fonday We're getting closer. We got to get it filled up Silver norm Powell for the Clippers Desmond Bain Grizzlies Johnny Juzang jazz red choice rookie auto You got a blue yellow green Wiggins for the Thunder Aaron Wiggins Tiger Stripe Tatum Great Tatum that's sick Congrats Celtics on that one Tiger Stripe Tatum Green to a George's Yang Sixers Yang Sixers to eight Luda 49 Dame for the Blazers and red 88 and bead Sixers Fifty nine 88 and the Dane was bookend 49 49 James F. Grabbing a spot in the mix of red 17 to go 17 to go breaks in about an hour Little over probably silver Nets Mills and Jalen Smith Pacers red choice rookie auto Jalen Duran Detroit Sensational six red choice rookie auto Jalen Duran Pistons He was Cowboys Niners legitimate shot blue yellow green Duncan Robinson heat Cameron Johnson sons and Malakai Brandon Spur rookie card there Blue again here to 49 Nicks RJ Barrett with the color match and a red and pretty Simon's Blazers to 88 Trying to think who else would there be? Wouldn't put Seattle up there They don't have a great quarterback silver holiday Hawks when no more junior rookie T Wolves Thunder Chet Holmgren rookie red choice signatures Back-to-back awesome hits for rookies Thunder Kevin K or won't a nice Chet tonight Kevin K congrats Blue yellow green Monte Morris wizards Kauai Leonard Clippers green out of eight Mike Conley jazz Jazz Conley three of eight there three plus eight is Jersey number red Brogdon Celtics to 88 as well as a Brandon Clark Grizzlies to 88. Oh my god. Jake. What was that? I Know Jake is making a mess you guys Really? Yeah, it feels takes a big leap. I don't I don't see why not but that's Like that that's that's a big wild card thing to have like a big question mark There's gonna be some of the NFC that surprises in a good way whether it be like the Saints or something or like the Valkins I don't know. He goes in the box probably about the box. They're pretty awful all the depots over silver Grizzlies On the off chance that Bryce young is like very good right away. The Panthers have a pretty solid team and probably win that division Signatures Dan Issel for the Nuggets brought in Miles Sanders It's Thelan who else Thelan Sanders running back they brought another receiver. I thought But their defense is solid the running game was good last year at the end of the season like I think Like if Bryce young is good right away, they probably win double-digit games in that division At the visions. Oh, man, it's it's a rough one. It's a rough one and the opposite of the AFC. He's just like the opposite Kenny Martin, Jr. D book and stutter Meyer the blue yellow greens blue Obi-Wan Jenobley to 49 spurs And a red rookie Tarry Easton Rockets 54 of 88 very nice color match As far as NFC East goes, I mean Cowboys Cowboys and Eagles are like the teams there NFC North man, that's another tough one Who wins the NFC North could be Chicago's Bears Vikings could I don't see it, but yeah, silver garland calves Peyton Watson Ricky Nuggets The Lions could here's a green auto RJ Barrett six of eight for the Knicks I think Lions probably have the safest chance right now, but I think their ceiling is lower Plus it's the Lions. I just got to see to believe it. I mean the Packers can easily do it Yeah, Jordan love I mean, yeah Jordan love is good right away. I think the Packers could do it All right blue yellow greens of DFS for the Mavs out of bio heats King and Murray King's rookie with the red to 88 magic Jonathan Isaac and Blue to 49 PJ Tucker Sixers. Yeah, Lions probably safest bet I think that a team could surprise they're like the Packers or Lions. Sorry Packers or Bears But Lions have the safest bet at a quarterback current, which is probably the most important thing there good receiving Defense got a lot better. They've added a lot of pieces Silver Jared Allen calves and Jalen Williams thunder rookie Justin Lewis bulls red choice rookie auto Louie yellow green you've got Kyrie Irving the Nets Marcus Moore senior clips Malachi random spurs rookie Blue again to 49 trade-jones spurs. I want to see some lower numbers here spurs trade-jones and red Shaq Lakers Falcons added pieces of defense to I think I'm with landing falcons could have a It all rides on Ritter though, which is which is like again. It's such a big question mark a lot of NFC teams Young QB's silver Poku and Gordon Hayward Jalen Suggs red choice auto magic.  He's ridiculous Louie yellow green Halliburton Pacers Kispert wizards Jason kid Nets Red rookie Dyson Daniels to 88 that goes to the pelicans And a blue Christian Wood Mavericks to 49 Last one y'all again. No recap. We are behind on the schedule. So I do want to make up some time Even it's just a minute and a half or so last one silver Jeff green for the nugs and a John Collins Hawks Rockets rookie auto Jabari Smith jr. Red choice with the color match Pits is so good if they can get pits and London working together. That's that's a that's a scary team if Ritter's decent As far as like offensively and they added pieces on the D like I said, so like they they're a team that could make a jump I don't know like who will but someone in that division will make a jump and stand out. I think when double-digit games Kimba Dfs not the buck. Sorry Jake, but Ben Wallace red to 88 Scotty Barnes Raptors wash. It's the Baker show and they're just winning like 14 games Nice Scotty there and the blue to 49 Duarte Pacers That'll do it everybody. Thanks again. We're on to football


Welcome everyone to this great webinar that we have in store for you today. This is the second webinar in our series to commemorate 2023 as the International Year of Millets. I'm Lauren Bereto, Chief of Staff at the Sustainable Development Solutions Network, and it's an honor for us to host this event and for me to be your moderator today. Today we're going to learn about the environmental benefits of millets and we're going to learn some tasty recipes that we can all make at home with folio. First, I'd like to introduce Dr. Rebi Harawa, Country Representative for Kenya and Regional Director for Eastern and Southern Africa at the International Crops Research Institute for the Semi-Arid Tropics, which most of you know as ICRSAT. She's an agricultural research and development expert with extensive experience across Africa and previously held the position of head of the soil fertility and fertilizer systems program for the Alliance for a Green Revolution for Africa. So thank you for giving me the opportunity to come and share on this very important topic about millets. As you have rightly put it, ICRSAT, we are one of the institutions that is working on crops such as millets because our work focuses on building resilience and transforming food systems of dry land agroecologists. So I really looking forward to a very interesting and interactive discussion. Next slide. Just by way of introduction, I don't know how many people know about ICRSAT, the International Crops Research Institute for Semi-Arid Tropics. We are an institution that has been in existence for 50 years. Our vision is to have a prosperous, full-secure and resilient dry land and we work in Asia as well as Africa. Our mission is to reduce poverty, hunger, and nutrition and environmental degradation in these dry land tropics. As you can see on the map, in terms of our locations, as I said, we are in Asia and Africa and where you see the green sheds is where we have our physical locations. Otherwise, in terms of our work, we cover a land of 6.5 million square kilometers in 55 countries. We have three programmatic areas. The first one is accross-rated crop improvement, which focuses on the delivery or development of technologies, particularly the improvement of crop varieties through our work in the collection of a number of these crops. We are one of the largest gene banks for crops like millets. We also have a second program, which is on the resilient farm and food systems. This focuses on again bringing technologies that complement the crop varieties. For example, with crop technologies to improve water and soil health. The third component of our programmatic areas is the enabling systems transformation. And this is where we are actually bringing the scaling of the water and crop technologies that I said. We deal with the issues of improving the value chains to make sure that they are sustainable, but also working around digital agriculture and cross-cutting themes like inclusivity, bringing women as well as youth to be part and parcel of this effort of transforming agriculture. Next, as I said, we specialize in crops that are adaptable for the drylands. And on this one, we have cereals, millet, sorghum, and grain legumes. And these crops are really good for you because they are really nutrient dense. They are also, they are adaptable to climate change, particularly drought. As I said, we work in these dryland agroecologies, and these crops are very adaptable even during drought conditions, but they are also resilient in terms of their ability to actually be able to grow and be able to produce even in this harsh climate condition, but also low nutrient content. As I mentioned that these crops have high nutrient dense and for the sake of this conversation we are having today, I'm going to highlight the sorghum and millet, peel millet and finger millet. These are very common here in Africa. I think even in the previous web seminar, we know that this have low glycemic index, which is very important for managing non-communicable diseases, for example, diabetes, but they also provide data requirements for iron and zinc. And iron and zinc is very critical, particularly for the growing of children, but also women who are pregnant women. And it's very important that these crops are actually part of the diets for our growing population. Of course, high fiber content, anti-oxidants, gluten free. Just to highlight that the finger millet, for example, it has three times calcium than milk. I think this is sometimes the information that people don't know, because we always have this notion that cow milk has more calcium. But I think we need to know that the finger millet has three times more calcium than the milk. And of course, when you compare with maize, which is the step of most of the countries, particularly in eastern southern Africa, we find that finger millet is actually contains three times calcium than maize. And of course this is an affordable protein. Next. So why are really millet becoming important? I think there's a lot of increased awareness on the health contributions of these millets. I think most of the lifestyle disease today, like diabetes, hypertension, you can easily avoid them by having these health diets. I think most of our areas, as I mentioned, eastern southern Africa, we are eating too much of the maize, which is, for me, I call it an empty calorie. We don't have the energy, but it's an empty calorie because you don't have the nutrition and you have, you know, a lot of, you know, we talked about the glycemic index. This one has low glycemic index and therefore that awareness that we are seeing, particularly in the middle class, I think it's now making these millets become an important crop in our diets. So those, as I said, resilient to climate change throughout the land, but they also have greater, you know, use efficient water use efficiency compared to maize, for example, 35%. But also they thrive in very limited use of nutrient. They can grow in poor soils. In fact, at the increase that we recommend what we call fertilizer micro dosing. Fertilizer micro dosing is where you add just a third of most of the recommended fertilizer just using a bottle top and you can be able to get the optimum yields for the varieties. They also have diverse use, not just for food, but you can use them as livestock and this is very important, particularly the dry land areas where we have agro-pastro system. So you can actually use them for livestock. And of course it's also part of the marketing and this is part of the industrial uses. At ECRESAT we have developed a number of varieties. You can see for SOGAM, we have over 200 improved varieties, over 100 pomeleate varieties and 30 finger millet varieties. And these varieties are bred, not just for the adaptation to the dry land agro-ecologies, but also responding to consumer and also the market demands. Next, we see a lot of opportunities with SOGAM and millet and for Africa, we are seeing that a number of the programs that have been introduced in schools, the school feeding programs. These types of crops, millets, as I said, they are very important to a growing population, the young people. So the school feeding program, I think most of the school feeding programs are now adopting these crops, but they're also very important when it comes to the making of confectionaries. From cookies, from breakfast cereals, and in East Africa it's commonly found in foods like Kei Cha Patti, but also we make what we call Ugarli, which is the major staple for East Africa and Southern Africa and also even in Western Central Africa. And at ACRISAT we have produced what we call cookbooks or recipes for actually communities to start adapting these to all kinds of things that they're used to. And these cookbooks or recipes that have been developed with communities where they actually try all kinds of recipes in order to make sure that they like the taste, they like the color. And I have to mention that you can also easily blend the flour of sorghum and millet, you can blend it with cassava flour, you can blend it with wheat, you can blend it with maize. And I think that's the most important part that this is also becoming a key area where policymakers now they see this as an opportunity to actually reduce the imports on wheat because most of the countries in Africa, they're actually importing wheat. But you can be able to make bread, for example, by blending with sorghum and millet and reduce their import bills on wheat. As I said, it's also very important, these crops are very important for livestock. And of course in the valley chain we see that you get a number of players from the production, from the, you know, the threshing during the harvest but also the value addition. So actually the value addition that can actually, you know, even bring employment to the youth, particularly in the rural areas. Next slide. I want to highlight, you know, some of the varieties as I said is several varieties have been bred, but I want to highlight this jacket variety. The jacket variety is a variety that is very high in iron, you can see 60 parts per million, but it's also early maturing, literally in two months, you can be able to harvest. This variety was released in 2018 in Africa, and you can see that it's one of the really answer to the problem that we have in, you know, anemia. We have a huge population that is anemic, and this becomes the answer to combat this anemia. I want to highlight that when this variety was released in 2018, we quickly saw the uptake because, even during the participatory process, people tested it and it's one of the tasty, you know, varieties. And it's a variety that you can even, you know, not just eat it like for breakfast, but you can even make dessert out of that. It's very fantastic and I want to tell people to say if you are in West Africa, if you're in a part of the Africa, you need to try this jacket variety. And then the other important thing to mention is that I think one of the things that Ikrissat is doing with the national partners is to make sure that seed is available. And you can see that even within the shortest period of time, we actually, you know, delivered seed in partnership with public private partnership, for example, 15 tons in Niger, and we saw also an expansion of this like to 1200 hectares, this is in Senegal. Next. The next one I want to highlight is Sorghum, hybrid variety. This is the first time that hybrid variety was released in Izimbabwe. And this is, you know, it was released in partnership with the private sector, and it's a white seeded variety. The reason why the white seeded variety is very important is because most of the people in this part of the world when we are eating our what we call Ugarli or Sardzai in Izimbabwe or Seema in Zambia, people are used to seeing it as white. And now when you have the brown, you know, Seema or brown Ugarli, sometimes children, they don't like it. People they don't like, they say, no, I want to see it white. And I'm glad to say that through the science, through the research, we are able to have this white variety, which now if they put on the table, they don't come and say, ooh, it's brown. Now they can have it, you know, in the white, the white color that they like. And of course it's early maturing, but also the yield, you're talking of eight times the potential of eight times per hectare, which actually competes even with, you know, comparatively when you look at the use that people get from maize. And most importantly, it's your papers. I think then my last slide. Thank you. Yeah, so this is for me a good opportunity to have this conversation in this forum, because as a research, we are actually, you know, facilitating the organizational for India Africa International Minute conference which is going to be held in August from 30s to 31st. Again, the objectives to create awareness on these different millets. You can see the photo that we have several writers of these millets loaded with the nutrients adaptable to climate. And I think there is no better time really for the world to come together and really start promoting these crops that are full that are loaded with the nutrients and I hope that we can be able to use it in this platform to broadcast this message that please you need to broadcast. It's going to be, you know, physical participation but also there's going to be a platform for people to join virtually. Thank you very much. Thank you so much Dr. Harawa what a great presentation. Now we're going to hear from chef team who's going to share some exciting recipe that we can all cook at home with Bonio. Just a little bit of a bio of chef team. He's a Senegalese raised New York City based chef author restaurateur social entrepreneur and culinary chef. He's executive chef of knock in Lagos Nigeria where I have had the privilege of dining and had a lovely experience. He's also signature chef of the Pullman hotel in Dakar Senegal and executive chef and co owner of Teranga right here in New York City where I am based where I'm hoping to have my next meal. Chef team over to you. Hello everyone. I'm not sure if you can see me. I don't see myself, but I am going to assume that you are seeing me. Thank you for this introduction. I truly enjoyed the increase at presentation earlier, just confirming to me that it's very important that we break the silos and we have conversations between the researchers. That should always begin with science. And there's not enough research being done on these varieties of millet that grows in Africa. And that's unfortunate because that makes us really dependent on our import Africa, the net import of food when we have so many interesting crops, plant crops that could be bringing solutions because they are resilient like Dr. said earlier they are resilient. I want to talk to you about a particular one today. It's a variety of millet called for you as a chef from Senegal, living in New York City early in my career. I just realized that, you know, there was not enough of representation of African within West Africa in particular. And I wanted it to be the source of my inspiration. This is how I studied really to start the info inspiration in the tradition of our cuisine. And in that journey, and the studying a company called Yolele, Yolele is the brand that's bringing these crops underutilized crops from Africa to a global platform. Yolele is very important for all the reasons that Dr. said earlier. It's a grain that's drought resistant that grows in an area called the Sahel as you can see on our map here in our branding, that red area is upon your thrives. And there's not much that grows in there. And which is very important to have a drought resistant crop these days that is also very nutritious, you know, with a rich in iron, rich in fibers have amino acids that are deficient in most of the major grains for your hazard in abundance. And the most important part is it cooks really easily. So you're going to see today I'm going to show you how to make two dishes of for you. The for your plain for your first of all, it's really is five minutes and less than that you have to be boiling water. And I'm going to fix my camera to the, to the store so you can see what's going on here. This is the water that's thank you for it's going to boil. I'm going to raise my heat so that it boils. In the meantime, I'll tell you about the ingredients that are going my first dishes called the Spongebob and mango salad. I'll have lots of herbs in it. So it's herbaceous and fresh. It's a parsley mint. I'm going to put some mango because that's this time Senegal does the mango season. I'll have some tomato. I'll have some cherry tomatoes that are already cut up in dice. And I'll have a little bit of red onions and olive oil and some lemon that's for the salad is inspired by the table with the three. Then I'll have a dessert with coconut milk, cocoa powder, and also some more mango for topping is a for no chocolate pudding, and it's non dairy. Okay, my water is coming to a boil while it's not coming to a boil yet. I'm going to show you just how this variety of for no looks. It's like it's a grain that's tiny. If you can see, I'm pouring it here so you can see it's tiny looks like sand. It's easy to cook. It cooks in five minutes, like I said, but it's difficult to process because you have to remove the skin. And this is the way where innovation had to come with my company, we decided to invest in the processing, but before that we had to create a demand. So here I'm going to pour the forno here into the boiling water, as you can see. I just pour it and I'll give it a quick stir with a spoon. And all I need to do now is reduce the heat to very low and keep it tightly covered as if you're cooking rice, but it cooks much faster than rice. So let me just put the brains here. All right, so you leave it colored here. And while it's covering, I'm going to bring a bowl to have all the other ingredients assembled in it. So my tomatoes, my chopped red onions a little bit about one tablespoon. And my mangrove, that's going to bring in the freshness and the sweetness. The thing about forno is a grain that's so easy to use in so many different types of cuisine. That's why I'm doing this different one today, the salad, because it's summertime, yeah, it's fresh, but you can also use it as a porridge. You can use it as a side, just like a grain, any grain, it has a neutral taste, which makes it really easy to adapt with any type of sauce and it likes to absorb the sauce. And when it's finished cooking, it looks fluffy like couscous, but it's not couscous is better than couscous is a whole grain couscous is actually a pasta that's been turned into flour from wheat is this one is gluten free wheat is not gluten free. So it's a great substitution for really any grain in your favorite recipes is very easy to adjust to adapt. So in few minutes in couple more minutes, the water is going to be absorbed and this forno is ready to be eaten as a grain. Here I'm just going to make it as a salad part of it. The other part I'm going to show you how to make the chocolate pudding with forno. And this is a grain that you really want to consider integrating into your diet, just like the chatty that the doctor was talking about earlier that it was developed. This one also grows in the European two months. It's a fast growing grain.  You know what 5000 years. It's resilient. We don't need to invent new resilient crops, especially not a new variety of corn. This is that doctors said earlier, this is so much more nutritious than corn. And it has the type of nutrition that we need to have for our own health, but for the health of our planet as well because it's a climate friendly croc. So and not only it grows in three months in two months, but it restored the top soil in the side that's very important for desertification is growing really fast. So a grain because of its deep roots that nutrients nutrients to the soil and restore it. So that's not the advance of the desert. So it's a way to mitigating the climate change effect. So again, that was your new here. It's gone. It's ready. Look at this. It's within two minutes, three minutes. This is ready. See the water has been absorbed and it's light and fluffy. Easy, easy, and you can be eating it like this. It's really nice has a slightly nutty flavor, but very neutral. But right now I'm going to cool it off. A little bit for my salad. I'll save a little bit for my salad here. Let it cool before I mix it with the rest. And while that's happening, I'm going to add some coconut milk here to prepare my chocolate pudding. I'll add a little bit of vanilla extract. You can put whole whole vanilla as well if you want a few drops. Sweeten it with honey, but you can use any sweetener of your liking. If you don't want any sweetening to you can just leave it as is. But honey is a perfect one to talk about today because we're talking about sustainability and we know that our bees population is depleting as well and we need to pay attention to that very close because without bees there's no agriculture for sure. Without bees there's no cross pollination, there's no millet, and without millet there's no future because those millets are actually the solution. Those underutilized crops, especially the ones that grow in Africa, why I'm insisting on Africa because that's the continent that has 60% of the world's arable land. So it's all important that we pay attention to that because the type of agriculture that we've been doing up to now. Monoculture, the type of agriculture that's like abusing the water system, the type of agriculture that's adding chemicals to the soil in a way that's like destroying it is what we need to get away from. And this continent Africa that has 60% of the world's arable land is offering us the opportunity to rethink our agricultural system and come up with a more resilient type of agriculture that integrates the crops that are called underutilized or forgotten or often like the millets or those varieties of millet need to be integrated. And we don't just integrate them as a commodity, which is very important. We need to really consider even the small farming communities that's been growing them.  If we have a system that integrates them, we are really considering something that's just more than bringing food solutions to climate change. We are also considering the path to development in a sense we are offering economic opportunities for those communities, the among the poorest one in the world. So what I'm saying that you see my coconut milk is starting to come to a boil. It's time to add my cocoa, pure cocoa powder. And if you want to add just chocolate as well as fine. Pure cocoa powder here, give it a stir. And while stirring. You can just add your cooked for you. So the cooked for you is going to cook deeper here to become a porridge. And that's the beautiful thing about for you. It can be turned into a couscous like kind of dish, or it can be turned into a porridge like kind of dish. So you put enough food for you. And let it absorb is going to pump up a little longer into this will give you this really lovely textured. And it's going to take only two minutes, two more minutes. And while this is happening. It's time to assemble my salad. I'm going to make sure all the team is taken off. I'll add a few spoonful of four new to my ingredients. And I could make a dressing on the side. This is an option, just because we have time limitation. I'm just going to add some lemon juice in it to squeeze some lemon juice fresh from my garden here.  Keep an eye here the water is boiling you want to reduce it a little bit. You need to be present when you're cooking and then some olive oil if you want to use other oil of your liking to it's really up to you. But this is again the quick option. If I don't put my dressing in it so you just got squeeze a little bit of lemon juice and olive oil salt and pepper and I finished by adding my mint. And my parsley, which I stir. So you have the fragrance coming from the mint. The basher's nest from the parsley, sweetness from the mango, that crunchy red onion pepper. And then all that is balanced with the tomato, the salt and the pepper, and you have a beautiful for your salad here. And here I'm going to come back to my dessert. What we have here, the pudding is happening. So really what's happened here, as you see, the formula is absorbing it. And then I'm just going to pour it here in my little bowl, dessert bowl, depending on how many you put, how many you're about to serve. And this is a great thing about foie gras goes a long way too. So once you have it in your dessert bowl after allowing it to thicken a little bit. Let me put a little more. You can refrigerate it. You refrigerate it is going to thicken even and harden. And once it's refrigerated, you finished it by topping it with some fruits, the mango, the berries that we talked about earlier and now you have a lovely, lovely chocolate pudding. I'm just going to just tease you a little bit by taking a spoonful of it, add some mango and some strawberries. The topping is up to you. And then, hmm, this is one of them.  And you have triple impact.  You have an impact on communities, small farming communities that's been growing it and that don't have access to market. And this is what we did with my company Yolele. We wanted to create a market. So we really went from the fork to the farm. We created a demand. We created demand. It started with the US early on, Whole Foods took us. And within five years we have a nationwide distribution, our mission to bring, to bring not only these grains for, for market, but also to teach about our food culture. So you have these different pilafs that we have now, you know, products, you know, some jollof, all inspired by the traditional West African cuisine. We have a Dawa Dawa, which is a fermented locus beans that also grows in the Sahel in a resilient way. We have one with moringa and baobab. So we, we, we're going in that direction. It's very exciting to see that there is a demand for this. And now we need to have a support from the communities, from, from the consumers, from organizations like ICRISAT from the United Nations to keep this growing. I mean, Fonyo is limitless. I even wrote a whole cookbook dedicated to Fonyo. And you have the whole journey here if you interested the Fonyo cookbook. And you see, you know, not only the farming communities that are growing it, you see interesting recipes, all, you know, dedicated to Fonyo around Fonyo. But not only the traditional ones, imagine recipes. There's so much interesting thing that we could do with these grains and have a great nutrition and have a fun time in the kitchen and really support the whole system into becoming more resilient. The food system that urgently needs to be revisited. The food system that needs to have millet in it. Millet is like something that's been feeding us for thousands of years. That's nutritious. And we know it's going to come, regardless of the, the, the climate change, you know, it's going to come so we need to support it. Anyway, so this is, this is this one month. My next book is coming up to, by the way, sorry, I'm plugging it is coming in September. It's simply West African and you will also have this type of recipe easy to grow, easy to cook at home. Only inspired by the traditional West Africa, lots of millet recipes as well in it. So thank you again for your time. I hope you enjoyed this presentation. And I'm going to go ahead and have my breakfast here. Good morning here. And if you have questions, I'll be around anyway. Thank you again. Thank you chef team it looks absolutely delicious I think everyone on the line is very jealous.  Go for it.  No I was going to say I know we started a moment late, and we were supposed to be ending in just two minutes, but since we started a little bit late I hope maybe I might put one or two questions to each of our panelists. I'm going to start with one for Dr. Harawa. Ben Jayena Ben Jayini is asking, who is producing the hybrid millet seeds that you were presenting is it like a private company is it a government agency is it a public private partnership. And what are they doing to preserve traditional varieties while they're also promoting these new hybrid varieties. Yeah. Thank you for that question so. We have our what we call public private partnership to produce hybrid. We have open primitive varieties. We work with, for example, public and sometimes farmer groups, because they are easy to, you know, produce seed. But when it comes to hybrid, then we work with private companies together with the public the national system so a number of the, you know, partnership that we have. We have actually formed what we call hybrid parents research consortium, really to promote this hybrid. The good thing about hybrids is that they are really high yielding and you can see that that's all gone variety. It's eight times. I think something that I have to mention is one of the reason why mays came like, you know, in the early nine, you know in the 90th century and literally pressed crops like millets which were growing. It was because of the quantity per unit land. So you have mays that can yield to five times. And then you have these small grains that will you two times. That's what really pushed the policies to expand on maze. And therefore it's important that we have to be mindful that we still need to have the quantities because we have to feed a bigger population. In particular, people are looking at $2 billion in 2050. And therefore we need to be looking at the options of having these hybrids. I will do it preserve the trace as I said that we have these gene banks where we have collected what we call wild varieties, some of the traditional varieties. And this is where we are making sure that these traits, they don't get lost in the system. And of course for farmers they have choices to use either hybrid or the open pollinated varieties. And I think for me what is very important is to make sure that we are balancing quality, but also the quantity. Thank you. Thank you. And we have a question from the floor for chef team. So need a Sean do car is asking about the fiber content of phony and the GI which I'm assuming is glycemic index. I know we talked about that with some of the other varieties that Dr. Harawa presented, but if you could comment on that on phony. So the fiber content on phony depends on the level of processing. So you see, and that's interesting because the doctor talked about it earlier, about how the common preference for phony is the white looking one that's been polished, which means the fiber is has been slightly removed from the phony. So because of the extra polishing, but we are also coming with two packages of phony or one is a whole grain. So that's one has a much higher fiber content and that's because the fiber is mostly in the skin part, which originally is removed. The exact numbers I can, I can't really come up with it because I'm like, I have it written somewhere, but I'm sure doctor would be able to tell you also that the glycemic index in Senegal in the whole West African region. The details have been for a while, recommending phony or consumption because of that element of the global glycemic index. Again, the exact numbers. I don't want to adventure myself on it, but it's compared to like the traditional rise that people tend to eat the phony is highly recommended because of that. So yes, it's those numbers available. It could be looked up. I mean, also Google it so I can connect with you later on, but I can't give you exact numbers. I don't know, Dr. Harawa, if you want to add to that sense or not, we can just move on to one more question. Yeah, I think we can move on. I think what is very important is that it's within the same range of the millets, for example. If you compare with the other staples like maize and rice, obviously, they, you know, these have logged by simic index compared to them. So I don't have the figures for phony or myself on my fingertips, but definitely we need to recognize that I think it's the same, you know, family of these millets. It's the same family and it's important that it's also highlighted the fact that we need to do so much more research, the amount of research done in those crops compared to the usual suspect, the mainstream crops is just astounding. You know, we've been neglecting it and then for different reasons, but we need to really invest in it and put more science behind it. But phony for some reason has been for the longest time recommended for people suffering of diabetes type two in West Africa. So because of its logistic aspect. Thank you so much. One more quick question, hopefully for each of you. Dr. Hawaii Harawa Milan meta is asking about the chalk tea, the white seed variety I think it was that you presented. Is that consumed seasonally or is it something that's available all year round. They were asking about available all year round.  And you can it's great you can store it you can process it. Yeah, definitely it's available. Turning to a kind of similar question for chef team, we do have a global audience. You know, everybody's saying that they're going to sign on to order their phony right now. What countries are you shipping to where is it available and you said that you're, you know, working to kind of globally increase the demand and consumption of millets and phony specifically, if it's not available somewhere, you know, right now are there places that you're looking to for the future. It's not available online. So, you know, that come and obviously Amazon and a few other fresh directs across in the US is available nationwide, we are distributed in all the whole food at Target at Sprouts, all the major markets are distributing our product. We even have for your chips now in the in the market so we innovating this way. But what we really wanted to do is have a global impact. And for that to happen, we needed to work on the innovation because for you, as I said earlier, easy to grow. It really grows so easily, but it's difficult to process because you have to remove the side tiny little green you have to remove the job, the skin. And so because of that, there's close to 50% of post harvest waste, which is high. And for us to really realize the dream of turning phony into a world-class crop, we had to work on that processing level. So what we did was we hired a milling equipment company to develop a processing for phony that's efficient. And we went from 50% of post harvest waste to like single digits, which is amazing almost doubling the production. Another element of the innovation was going from close to one ton per day of processing phony to two tons per hour. That's really how we were able to not only doubling the production without growing more, but making it more efficient and having phony now accessible soon to the US is already here, but to Europe and of course West Africa, the market in Africa. So we have a structure in Mali and in Senegal, two structures. The mill that's processing the phony, contracting with small farming communities, a network that's growing. And then that mill is bringing the phony to the hub of distribution in Senegal that will be bringing phony to all the other markets in Africa and in Europe. And India. That's wonderful in China. That's just so great. This has been such a wonderful session. It's been just so wonderful. You know, we've looked at the entire steps of the value chain from, you know, getting high quality seed to the farmers. I love your entrepreneurship around the innovation for the processing. You know, I think everyone will agree that what we've learned today is, you know, millet and phony and sorghum and, you know, the whole, all the millets, the whole family is just such a great solution for returning value to small holder farmers in Africa. And even the processing for me, I mean, it sounds like a challenge, but also an opportunity for, you know, local value addition and job creation, especially in Africa where you have these young populations that are looking for jobs and you know really want to get engaged in an exciting sector that's doing great things. So thank you both for such wonderful presentations. I know I've learned so much. I can't wait to go home and, you know, order my phony and make my chocolate pudding that sounded just absolutely delicious. Thank you so much for other participants who joined online and your wonderful questions. And there is a link in the chat. I hope everyone will join us for our last session in August, where we're focusing more on the nutritional aspects and nutritional benefits of millet and we have one more set of recipes from one more chef. Thank you everyone so much again. I wish everybody a great rest of your day and whatever time zone you're in and keep eating millet. Thank you. Thank you.


What is up, everybody? Welcome back to another YouTube video. My name is John Hammond, and we are still looking at the Linux Offset Club. You can find online, just an online war game for some Linux stuff, and let's get back to where we were. I'm going to change the directory, get us back into the folder that we've dedicated for this stuff, and we had just gotten the password for user 10, which we saw was Sharkbait, kind of a different format than what we were used to, because it was originally just an MD5 hash that we were able to see in the previous user 9 account. So let's paste that password in. Hopefully my connection will work through. Oh, am I right or wrong? Okay, cool. I didn't paste it all right. Sweet. What do we have here? Password.text. Whoa! Lot of randomness. Okay, whatever. What is that other file? WordCloud. Text. WordCloud in order. Hmm, so I thought this was pretty peculiar when I first looked at it. Keep in mind I am running through these challenges kind of, not, I can't say backwards, but I have done this already. I have gone through all these solutions, and I know what I'm doing already. So I want to say that, okay, what this is trying to tell us is that everything in this password file should be made into a WordCloud. I don't know where my accent came from when I slurred that word, whatever. They should be made into a WordCloud. So if you were to Google WordCloud, you can try this thing that I found on Google. I wasn't able to paste anything in there. Maybe if I, will that work? Okay, no, it's not in the format that it wanted. So I ignored this one. I went to Wordle, which is where I originally kind of heard of this idea. And then I gave it all those words and it didn't work. I waited here for a little bit and nothing happened. So, okay, I moved on. I went to the WordCloud generator where I could just paste this in, hit the go button, and I found Angry Major Watch. And I'm assuming that this is just by the, like I said, in order, just how we saw the file, in order of the size, the words, or how big that they're seeing. Originally, when I actually solved this challenge, like for real, for the very first time, I didn't do this because I had no idea that it was referring to a real WordCloud. The way I did this was I checked the file and then I separated these all into new lines by TR to transform and kind of replace. I removed all the spaces with new line characters so they were each on their own individual line.  And I'm assuming in order, I guess, I don't know. I put them in unique so they were all one by one. And then I used Tax C to note the count that they, all these words had. And a lot of these kind of had strange duplicates, right? Like each of them are all occurring like four times. That number four was the most common. So what I actually, I ignored all of those four words, all the ones that came in four times. I used Greptac V to inverse what I was searching for. And then I found Angry Major Watch having other occurrences more than the other words. Cool. So I essentially did the same process that Wordle or that WordCloud was doing just through Linux commands. Thought I would share that with you. The password is Angry Major Watch all as those words. That's user11.tex, Angry Major Watch. No spaces in between. Let's jump out of this and paste that into user11 and we are logged in. That works. All right, cool. Now what do we got here? Whoa. All right. Long file. Don't want to search through that by hand. What are we looking for here? Let's ask ourselves. Well, all we care about is a password, right? Let's check if there is any notion of password in here. Nope, not like that. What if we make it case insensitive? Oh, okay. Yeah, we have a hit. So all I did was I catted that file and piped it into Grep, piped it so that standard output, everything that cat spat out, we could just give to Grep. And I don't need to supply a file name because it's already being input into Grep. And we're just looking for password. We're supplying to Grep what we want to actually find. I use tag I for case insensitive because it looks like password match with the capital P and that's the password that we want. Nice. Okay, cool. Let's save that as user12.txt. Cool. Break out of this guy, move into user12 and let's try and solve this one. Catpasser.txt. Whoa, okay. A lot of base64. We know now that from kind of another video or anything else I've kind of covered that probably this string of random looking characters, a lot of capitalization and kind of numbers. This looks like base64.  I'm just kidding, not really. But it's a super common kind of encoding that you'll see in a lot of capture flag competitions for one thing. But it's just kind of used a lot to hide stuff, hide text, hide data because it's another form of encoding, whatever. This is a good example. You can always tell when it's base64 just by trailing equal signs because it has to be a multiple of four in length. So you'll see maybe zero, one, two, or three equal signs at the end just that it's used for padding. But you get used to seeing it enough that you'll be able to pick it up just with your eyes, get a lot of random capitalization letters and numbers and letters and stuff like that. Okay. So if this is base64, we can pipe this into the base64 command. There is one that's built into Linux. By default, it encodes into base64. But if you give it the tack D argument, it will decode. Okay. But it looks like it's still a lot of giant base64 stuff. Do I decode it again? It's still base64. Well, hmm, okay. So I'm thinking right now this is recursive base64. It's some message, the password that has been base64 encoded and then encoded again and encoded again and encoded again, et cetera. So we would have to just infinitely or who knows how long for how many times we would have to keep decoding this over and over and over again. And we don't know how to do this by hand, right? That's going to suck. So let's do this in a smart way. I'm going to make a directory for me in the temporary directory. Okay, whatever that exists. Let's just call it John two. And let's copy that password into temp John two, just so I have a place to live because I'm going to make a lot of files in this process. What I want to do is I want to kind of drill down into this base64 over and over and over again, this base64 message of the string that's been encoded over and over and over again. And I want to decode it as quickly as I can. So the way that I do this is I actually take this original file and I move it to something called zero or zero dot text. So that way I can use a numeric value for what I've actually kind of made here. And I can keep I'm using zero rather than one, because I'm going to refer to this, this file that I'm currently looking at backwards. I'm going to say, okay, I'm going to iterate from one to whoever much I want. And then I'll use one minus one or I'll use like the previous value as an as I'm iterating through these numbers to refer to the last file that I was using. So I got to start here with the zero dot text. This probably doesn't make a whole lot of sense as I'm talking through it, but I'll show it to you in code right now. So also a four I in one, two, I guess 50. And then we'll we'll just echo I right now. As you can see, okay, I'm counting one to 50. And let's get another command in here, let's say let so I can use math and bash. Let's let P equal to the value of I minus one. Cool. So now I can echo I and P. So I being my previous value. Great. I can refer to the previous value in that iteration that I'm looping through with that loop. This is just a syntax for a one line kind of inline for loop and bash. Normally you do this with a do and a done acting as your code blocks, maybe in a text editor, but for our quick and dirty stuff in one line. This will work just fine for us. I'm just using semicolons to denote. Okay, here's the start of a statement in the end of one in this block. And it's all, like I said, in one line. So okay, now that we're using let in that tack P to note the previous variable. We can say base 64 tack decode tack P dot tax dollar sign P to note the previous value. So zero in this case, right? The first iteration is zero. And let's put that to I dot text. So now we're going zero, decoded redirected to one, and then one decoded redirected to two, and then two decoded redirected to three. And it's making this loop for us and kind of moving across all of these files. Once we kind of run the crank on that, eventually we get an error. Okay, maybe we didn't hit as far as we thought we would. But now we have all these text files from everything that we've made. So how big are them? How big are they? You can see as the numbers kind of change, the file size decreases because we are decoding these. So let's check out the, sorry, I don't know why I keep getting accents. Let's check out the smallest thing we've got right now 41 dot text 41 dot text. Huh. Okay, it has a string in it password dot text, whatever. What about, what came out of that, what came before that 40 dot text? What is 40 dot text? Okay, that still looks like base 64. And you can, you can see it is because of the equal sign here. So what the heck is 41 dot text? It looks like it has a password dot text file name in it. So what is this? It's clearly not a text file. Let's run a file on it 41 dot text. Oh, and it thinks it's GZIP compressed data. All right, so let's move 41 dot text to pass dot GZ. Now pass dot GZ is or was password dot text and let's gun zip that. Let's G unzip pass dot GZ. Looks like it worked. Now we have a password dot text file. Let's check that out. No, no, no, that's the original one. So what happened here? Well, okay, our, excuse me, our pass dot GZ isn't there anymore. Now it's just pass. What is that? It looks like it's just ASCII text. There it is. Awesome. There is the password for user 13. Let's check that out. Linux offset user 13 dot text, paste that in. Get out of here. Try an association with that user. Paste it in and we are logged in. Perfect. Okay, levels and users 10 through 12 complete. Let's finish up the series with users 13 through 15 in the next video. Thank you guys so much for watching. I hope you guys are really enjoying these. I hope they're kind of a fun, quick series and you're still having a good time with them. Learn a few things. See you in the next video.


Hello everyone we are on time so I guess we are on time for lunch as well I'll try to wrap it up so that you know we are not delayed for that and I am Rahul I'm co-founder at imagekit.io it's a relatively new product I'm sure not a lot of you would have heard about it but then what we basically do is real-time image optimization and transformation and today I'm going to talk about something which as you know a lot of people have come up to us and ask that you know how do we optimize images based on the user's network right let's say if the user is on 3G or if he is on 2G how do we change the image that we are sending to them and consider typical case where you know an e-commerce website loads hundreds of images on the website they would want to do some kind of optimization for the users who are on a slower network so that is what we are going to discuss that how do you optimize images on the basis of what network the user is on and yes I am from imagekit and I would be using imagekit because you know this is a sponsored talk you would have read in your schedule but then what we discuss can you can implement that on your own as well you can use any in-house solution that you might have for images you can use any other third party that you have for images and not just images you can in fact apply what we discuss to other more critical parts of the application which is a JavaScript and the CSS you can optimize those as well on the basis of the network so let's get started this is a rather interesting start and I guess most of you you know who have worked on front end would be aware about this that all the new users that are coming on the internet are coming through mobile right and globally that's 55% of all users that are coming from mobile in India that's a slightly higher percentage that's 78% mainly because of cheaper handsets, cheaper data plans coming in with Geo and Airtel and why am I talking about mobile right when I'm talking about service workers because network speed is actually a problem on mobile devices and not you know you guys work in your offices and you have a very stable Wi-Fi or a LAN connection you do not have network problems there that network problem is on your mobile devices for example if you step outside your building you move into the lift lobby or let's say you move into basement parking your network speeds would drop right so our ideal target audience for this is people who are using mobile and that's a big chunk for all websites right and we often believe that you know with Geo and Airtel and everyone coming in our users you know they have a great 4G speed or a great 4G network but the fact is not right we did this study with one of the companies that we work with what we did was that Chrome exposes the downlink speed the estimated downlink speed that the user is observing at that time and we tried to measure that we did that for a lot of users over a million users and this is what we see that almost 45% of the users have a speed lower than 2 Mbps 2 Mbps and in fact almost 25% of users have a speed less than 1 Mbps so you can so we assume that our users have a really fast network but then the reality is that they do not right and contrary to this in the last 6 years our page sizes have gone up by 3 times and the reason is that you know we started pushing a lot more JavaScript code with the client side rendering happening we start pushing in lot to the client videos have gone up in the last last year right so our page sizes have increased our assumption that the network has improved stays but then the reality is that the networks have not improved as much and the result is that our users end up with a frustrated experience they might not even come back to the website right I'll go back to the previous slide I just wanted to focus on the green bar that is there at the bottom that basically corresponds to images and I would like you to notice that images still correspond to about 50% of the page width right videos are coming up but then images are still the major component in the pages right so this this makes it very clear right that up until now we have been able to modify our website and our content on the basis of let's say the user's DPR or let's say the user's device width we have made responsive websites but then not a lot of us have you know worked on optimizing the website on the basis of the network speed and that must change right we need to stop building for ourselves we need to stop building for people who are there on a wifi connection and can load our website really fast we need to start thinking of users who are not on a very good stable connection and we need to start building for them right and our target in the stock is we are going to be focusing on images reason being that like like we observe that they still form more than 50% of the page width plus the other reason being images are the lowest hanging fruit to be honest right they might not have as much impact on the overall page load time as you know optimizing JS or CSS would have but then that they are the easiest ones to optimize and they are the easiest ones to start off with and but then you can apply this concept to any other content on your page as well right so now we have two requirements one is that we need to determine what network the user is on and detect when that network changes and the second requirement is that when the network changes we need to change the image size that we are sending to them right so we look at the first part right how do we detect network changes so Chrome and Chrome mobile that is what I recall from what I last read have implemented this network information API what this does is it observes all the downloads that are happening in the browser and it tries to estimate what kind of network the user is on right and it exposes a read-only value which can be read from navigator dot connection dot effective type it basically classifies the user into four buckets 4g 3g 2g or slow 2g so when I say 4g it's basically speeds upwards of 3 mbps right that's the average it includes Wi-Fi as well so even though the classification is 4g and 3g 4g would include really good speeds including Wi-Fi as well right so we do know what what network the user is on what kind of speeds is he getting right and 4g obviously is faster than 3g 3g is faster than 2g and 2g is faster than slow 2g so the logic dictates that right on 4g which is the fastest network of all we need to serve the largest image size and on slow 2g which is the slowest of them all we will serve the smallest image size right that's that's what we want to do now how do we change image size right we're not talking about changing the image dimensions we're not saying that we will resize the image and send a smaller image to a slow 2g user what we want to do is to mince you know compress it further right compress the exact same image further and for those of you who would have worked on images on the front end you would know that there is a factor called image quality that is associated with an image so very simply put image quality is a scale of 100 100 being the best quality one being the lowest quality 100 being the you know the sharpest and the best image that you can get so I've taken this image as an example right let's say I have the image quality set at 90 which is a standard for a lot of websites they set their image quality at 90 the size is 47 kb right let's assume that we will use this for the 4g network next let's say for 3g network we use quality 70 which is giving us a 40% reduction in size now assume that you have a website which loads one MB of images if you are able to save 400 kb out of it you have actually saved a lot for the user who is on 3g similarly for 2g we will use a smaller quality level 55 for slow 2g we will use 40 and for slow 2g we are actually reducing the size of images by almost 72% right that's a huge reduction for the user right lot lesser data to download so how do you change quality this is where image kit comes in right we provide a lot of transformations that you can do in real time on an image so for example let's say I have this image URL image31.jpg and let's say I want to get a quality 90 image all that I am doing here is I am appending a query parameter PR equal to Q-90 it gets me a quality 90 image if I change that to 60 it will give me a quality 60 image if I change that to 10 it will give me a Q10 image and I am not sure if you can see it on the screen or not but then the Q10 images is actually really low in quality if you especially notice the clouds above the house you would find that those are really pixelated and that is the reason why the size is small right so apart from quality image kit does a lot of other transformations but for now I will stick to quality right that is what we are trying to optimize so we have figured out two parts we know what network the user is on we have figured out a way how to change the quality in real time you can use anything apart from image kit if you can do that right I am just using image kit as an example now how do we handle all of this in our code right the idea is that we do not want to be changing our code right we cannot have our server sending different URLs for different networks please we do not want those kinds of changes right so this is where the service worker comes in service worker is I guess a lot of you would have worked on service workers or would have worked with service workers right service worker sits as a intermediate proxy between the user's browser the cache storage in the browser and the network right and what the service worker allows us to do is it allows us to intercept every request and then decide where do we get the response from do we get it from the storage do we get it from the network do we modify the URL and that modify the URL part is what we are looking at right so what we will do is let's say I have in my html let's say I am using image 1.jpeg if I detect 4G in my service worker I will change the URL to use quality 90 if I find 3G I will change it to use quality 70 on 2G we will use 55 on slow 2G 40 right this is what we will use the service worker for we will intercept the request and we will change the URL from where we are getting the response so let's look at some code my image tag remains exactly the same I am not changing the image tag my quality parameter does not come in the image tag our image tag remains the same next part is obviously we install a service worker I won't go into the depths of it it's a pretty standard thing you just need to call service worker.register the file name and it gets registered now this is the main function right service worker allows us to hook on to an event called the fetch event this fetch event is basically fired for every request that is originating from your browser what we do in the first two lines is that we it's a very basic check we check if it's a JPEG image or a PNG or a J for a WebP right if it is we continue further we check the connection type for that connection type we determine what quality do we need to use and in line number 11 in line number 13 in fact we create the new URL the new URL basically would be we have appended the quality parameter let's say to that URL and in line 14 to 17 instead of responding with the same URL we respond with the modified URL so for example if the browser sent a request for image 1.jpeg and we modified it to let's say to use Q70 instead of so so we respond with Q70 we do not respond with the original URL right so let's look at an example and on how does this work so so this is a basic you know something which we have created similar to an e-commerce website I've already loaded it but then this has been loaded without without the service worker coming into picture what I've done is I have throttled the network to fast 3G this is something that you can do in Chrome and I will just reload the page once and I hope that the demo works it does so what I have done is I have also overlaid the quality number at which the images are being fetched on right so use if you see all images have been fetched on quality 70 right all of them have this number 70 overlaid in the top left corner and if you see the network tab this is the original request right this is the request that the browser fired I was resizing it to 300 by 450 the service worker intercepts it it issues a new request which has Q70 as one of the parameters because the service worker detected that the user is actually on a 3G network right so this is this is what the service worker was able to accomplish right so this this is very good to begin with right so we were able to detect the network and we were able to modify the image we were able to send a lighter image to the user but then there is a problem with this right and the problem is that the browser does not know that you have modified the URL in the service worker right for the browser it's a black box if the browser requested for image 1.jpeg and you responded with let's say quality 40 in the image the browser does not know and the browser would cast that low quality response forever or for as long as the cache control allows it to do it right we do not want this to happen since we are modifying the cache on the basis of network we do not want the browser to behave as a black box and cash everything that we are giving to it right so one one thing that we need to do is that we will skip the browser cache completely right instead what we will do is we will use the cache storage API which is there in in all modern browsers I guess in most of them and we will use it to create caches for different network ties for example there would be a different cache for 4G there would be a different cache for 3G 2G and slow 2G and what we will do is we will implement a waterfall kind of a lookup wherein we always look for the best resource we know that 4G has the best images it has images on quality 90 so we would always prefer looking for an image in the 4G image cache then we will go to 3G then we will go to 2G and slow 2G right this is how we will structure our cache lookups this is something that you cannot attain in a browser that is why we need to skip the browser cache completely so let's look at the code if you remember from the previous previous code example we were responding with the the the transformed URL so instead of that instead of responding with the transformed URL we have a new function which is a step down cache lookup we will we will do a cache lookup and if that cache lookup fails then we will go to the network right this is the cache lookup code I will give I will simplify this for you and I have shared the code on github as well I will share the link on where you can read the code I will just simplify it for you line number 10 9 and 10 is basically just looking for an object in the cache let's say in the 4G cache if you find it in the 4G cache well and good we return it from there if not we go to the next cache which is 3G right if you find it there we will return it from the 3G cache if let's say we do not find it from 3G cache and we look up let's say in the 2G cache and let's say the user is on 2G right now if if the object is not there in the 2G cache as well then we go to the network which is line number 16 and 17 we go to the network if we have a successful response we add it to the corresponding network cache which is being done in line number 18 right so now we have four different caches we are adding objects to different caches on the basis of network right and we are also picking up the best object that we have available at that time if we have 4G available we will use 4G object so let's see how does this actually work out in a demo right so let me just check if I have cleared all caches I have I'll start with a slow 3G right so this should get me a quality 50 image ideally because it's slow 2G everything is slow so you can see the first image which loaded its quality 50 I'll update this to fast 3G and I'll reload the page again now because the network has improved the browser automatically fetch the better variant of the image it fetch the quality 70 image let's say I remove the throttling completely and I reload the page again don't tell me it didn't work so basically it takes time for the network connection type to update so like I mentioned earlier the network information API it looks at the download times that the user has been observing and because I was observing 3G like download times it kept me in that 3G bracket for slightly longer now that I have moved to 4G now we get the 90 quality image now let's do the reverse let's say the network downgrades again let's say the user falls back to slow 3G what would happen right we still have the best image in cache and it should ideally just pick that up it picks up quality 90 image and if I look at the cache storage so we have four different cache storages here is this visible to everyone at the back the cache storages so we have a 4G network cache it has all the images cached in 4G we have a 2G cache we have a slow 2G slow TG we never access slow 2G so the cache is empty we have a cache in IKIT in the 3G cache as well but then 4G is the preferred one so our images would always be picked up from this right so basically we have implemented a way where as soon as the user's network speed upgrades the images would upgrade as well but then let's say if the user speeds goes down we would look for the best image that we can serve to them and you know not downgrade his experience now this presents another problem which is cache management earlier the browser was managing the cache for us now we are adding objects to the cache so we also need to ensure that we are clearing the objects from the cache for this I have used Google Workbox you can figure out any other way to do it what Google Workbox allows is that you can set up rules on every cache either on the basis of the number of objects that are there in the cache or on the on the time that for example let's say objects in the 4G cache would remain there for let's say 30 days and I can have a maximum of 1000 objects in that cache right I can set up this rule and I can create what is called an expiration manager right so this is what we do to manage our cache we instantiate an expiration manager the last part of the code this is how an expiration manager is defined using Workbox we specify the max age in seconds we specify the maximum cache entries that can be there and in addition to adding the object to the cache we also update the timestamp when the object was added in the cache that's been done on line number 6 right so that you know the expiration manager can see how long this object has been in cache and from time to time we keep expiring the entries you can you can do a very simple set interval kind of a thing every 60 seconds you just clear out all the objects that should not be there right so that's a very simple way of managing what stays in the cache so to summarize one thing is very clear it has been a long time that you know we have been optimizing for different devices different screen sizes it's time that we start optimizing for different network speeds as well because to be honest network speeds are not that great in India and we must stop considering that you know we are accessing our websites from our offices or from our Wi-Fi's for us everything works blazing fast right but then that's not the case for our users so we need to start thinking about them we need to start optimizing on the network speed and we talked about images but then you can get the gist right you can extend the same concept to JS and CSS you can basically tell your server that okay the user is on a 3G network send me a lighter version of the website right so this this can be extended to beyond images as well right we needed two parts of the problem one is to detect the network changes and to maintain different caches for every network for this we have the network information API the service workers and the cache storage the other part on how do we modify images in real time that is what we do at image get from quality we have real time resizing cropping transformation etc face detection overlays it comes integrated with the CDN so the performance stays right up there and you can integrate it with your infrastructure as well right we can talk about image kit later but then as I said you can do this even without image kit you can do this with your own in-house image management solution if you can modify quality in real time or you can use it with any other third party image product the demo page which I showed it's there on this link service were swopt one and the code is there on github in our image kits github it's a very basic code I haven't had time to add the readme file I'll do it as soon after the talk and you can contact me either via email or follow me on twitter if you have any questions that's it thank you so my question is in general also in context to image kit as a service to say I'm on a slow network and I have images which have been loaded in poor quality right but as a developer I want my user so my images to be upgraded so what I'm talking about is progressive enhancement right like so is image kit giving me something or in general there's a solution for this so what we discussed was a very general solution right if I see that the network has upgraded that let's say the earlier the user was on a 2G network and you loaded a low quality image but then the network upgraded to 4G the service worker automatically fires a new URL a new request right so the images automatically get updated right so that depends on your application logic right what you want to configure I configured it in a way where it upgrades instantly let's say you do not want that to happen let's say you want let's say you will wait for let's say 5 minutes before the user is on a better network to make a new request you can implement that in a service worker right it's a very generic thing it's not related to image kit like I said it's something that you can change in your service worker itself that do you want to instantly upgrade to a better image or do you want to wait for some time or you know on some other logic do you want to upgrade to a better image right it's something that you can do in the service worker itself hi Rahul where? here right here can you see me here? okay yeah hi Rahul my name is Shashank so your talk was quite informative so I am working on couple of products in which I have to support users on IE 6, 7 and 8 so you have to explore 6, 7 and 8 good luck with that sir that's all I can say I mean in the best case scenario see if you if you go back to the code the image tag basically doesn't change and if let's say the browser does not support service workers even then the same experience gets delivered to your user so in any case the experience is not getting hampered the only thing is that if the browser does support service worker then we do something additional otherwise the experience on IE etc would remain the same the image tag would load as it is right is there any alternatives because I have seen couple of GitHub projects where there are couple of alternatives but the options are a lot I cannot hear actually how about now is it clear? not yet can you hear me now? yeah okay so I was just trying to fix this and on GitHub there are lot of basically repositories which have this solution but as in the solution there are lot of products out there so I'm finding it difficult to choose the right one lot of products for network based optimization or image optimization for replacement for service workers for IE 8 and 7 you mean something like a polyfill for service workers right? yes that's right I haven't exploded to be honest I mean I haven't come across these polyfill so I cannot comment on it as well but then if there are maybe I'll look into it and maybe I'll update my presentation and talk as well thank you hey hi so Chrome provides this API to deter the network like 2G or 3G so what about Firefox, Safari and mobile applications so as of now the network information of the API is available only in Chrome and Chrome mobile which is basically almost 70% of the users accessing normal websites right but then I will update my presentation I recently came across an implementation which is done in service workers so basically what the network information API does that it is calculating the effective downlink on the basis of the download speeds that the user is observing the service worker does the same thing right so your support for network information kinds of get extended to other browsers which support service workers right so that's a slightly wider range of browsers than just Chrome and Chrome mobile but then beyond that like I said it's a progressive enhancement it's not something that you know if the browser does not support let's say network information or service workers the experience still remains the same but if it does support we do something better with it so this is a basic elementary question so can the same approach be extended to switch the format of the image so if I'm using Chrome and my browser supports WebP so can I intercept a PNG image and instead server WebP right so in ImageKit in fact we do that automatically right so that is why I didn't cover it because in ImageKit when we see that a browser or a device supports WebP we automatically switch it without even changing the URL right but then yes it can be extended to other browsers if you can detect that the browser supports WebP you know through content negotiation as such you can modify the URL to fetch a WebP image as well so there are no restrictions around the like if the result MIME type differs from the requested image format so there are no restrictions around that so for example you would have seen cases where in the URL ends with .php but then the response is image slash jpeg the content type is a jpeg image so that works perfectly fine because the browser is actually looking at the content type header and in fact the actual content that is being sent back and it tries to determine how to display that content on its own so it doesn't matter what the original URL has in the extension for WebP in fact you don't need to actually go to the service worker it's a very it's a much simpler way in which you can you know implement WebP which I can talk about you know after this talk it's not related to this but then you do not actually need to go to the extent of using service workers for it Thank you Hi, I have a question can I use this ImageKit IO if my image is not uploaded on the your domain Yes, you can integrate it with your own storage or your own image server anything right so we'll get it from there we'll do everything in real time and send it back Okay, thank you Hi, I have a question as you said that network type is returning 4G or 3G string right I'm not able to hear it again that network type is returning 3G or 4G or 4G right like that so what happens if 4G is returned but actual speed is actual downlink speed is low so there are two observations which I had when I was actually working on this yes there are cases where the actual downlink speed is low and the browser still reports it at 4G so in fact if you look at the code that we have uploaded in GitHub we take that into account that if the speed is less than 1 megabits per second we do not use the effective type that is being returned by the browser we automatically set it to 3G that is one way of doing it that you look at the downlink speed instead of the effective type that is being returned by the browser but then there is I read it in another place that these downlink speeds and their mapping to the effective type it depends on it varies from browser to browser and it can change in future releases as the network speeds improve the browsers would update their method of tagging as well so for example what is being tagged as 3G today it may not be be tagged as 3G let's say 2 years down the line so either you can rely on how the browser is tagging it or in certain exceptional cases like we have done if the downlink speed is really low then we do not actually rely on what the browser is using to tag that so it's something that you would need to take a call on it right if you want to go with the downlink speed or if you want to go with what the browser is telling you the effective type is can you hear me? can you hear me? can you just quickly run us through how imagekit would integrate with my infrastructure because I think in most use cases I would serve it from my infrastructure images offline ok cool thanks that's it? yeah hi so does this imagekit works only for images or it works for 3D models as well for network optimization? it works for more than images as well but then again not in the scope of the presentation so maybe we can catch up outside and you know we can talk about it ok so since it improves the network optimization by compressing the image size right what if we pass the data out of the image and show some business data when you compress the images or models the data are being lost right? ok so you are saying when I compressing the image the data is being lost yes but then see it's a trade-off that you need to decide on on the basis of your application I think showing a slightly lower quality image let's say which is 30 to 40 percent smaller but then at least showing that image to the user with let's say an option for him to be able to fetch the original image I guess that is still much better than not loading the image at all now imagine a e-commerce website where the image does not load at all versus you are at least able to show let's say a slightly lower quality variant but then where the user still gets an idea that ok this is a black t-shirt that you know that I'm looking at so if the user gets some idea I guess a fair bit of you know reduction in quality obviously you would lose out on detail that's a part of it but then the user still gets a fair idea of what is the object that he's looking at and I guess that turns out to be favorable for a lot of use cases but then again it depends on your application you may want not to go for it at all we pass the data of the 3d models as well as the 2d models sorry we pass the data based on the emails or the 3d files we pass it and show the business data to the end user for us it will be not relevant to that right I didn't get your question sorry to be honest hello yeah so for us we pass the data out of 2d or 3d models and show the business data to the end users ok so for this if you optimize this and reduce and compress the data and send it to the end user it won't be that much efficient for the end users maybe I mean that depends on what application you have like I said so this is very effective for a lot of use cases but then maybe not in your cases ok thank you yeah hi so how the lazy loading of images how is that difference and or should it be used in combination with image optimization so lazy loading of images is basically you're not loading something which is not visible on the screen but then when that image is visible on the screen you still load the highest quality variant right you do not take into account that the user is on let's say a 2g network you still attempt to fetch a larger version of the image that is what the difference is versus network based optimization that you know lazy loading is something different lazy loading is let's say you will load load 10 images and leave the rest of the 90 out but then network based optimization is that when you're loading those 10 images you would take into account that the user is on a 2g network and that you would load a lighter variant for him and not load the you know the best quality image so they're different concepts actually ok hi so my question is on the lines on her question I'm here oh right in front of you ok yeah so say for example I have the image as you know lazy loading I create a hook after like you know 50 or 80% of the scroll the next 10 images should load ok but if the speed is too low sorry if the speed is too low can I have the service worker like change the quality and how much time does it take for the browser to understand that the network has changed and they need to like you know right so ok so basically there is no lag in terms of what the browser tells you the network type is right so it's instantaneous when you were refreshing something happened and I was like ok it was slow because actually the page was still being fetched from the server right so the page load is still slow all the JavaScript that is being loaded that is also slow only the images have changed so that is why I said that you know images is the easiest bit but then the actual performance gain would come when you implement this thing for your pages and your JS and CSS that is where the performance bottlenecks usually are right so images though is the easiest bit in terms of if there is a delay when the service worker is modifying the request or not to be honest I haven't seen any significant delay it's probably just a few, a couple of milliseconds extra where the service worker is actually modifying the URL but then I guess it's a very small time and it doesn't really matter I mean the user on a 2G network would probably end up loading an image in 4 or 5 seconds if we can make him load it in 3 seconds by serving a lighter variant so that kind of compensates for the extra time that has been spent in the service worker one more question so say if you are implementing this service worker for image optimization you've seen how Medium does it they send a blurry image which is very low in size so that the user can get an idea it's loading so would you choose that over this? so are you saying something similar to what we see on let's say Medium.com loading their images see it's again a call that you can make on the basis of your business if you want to serve let's say a really blurred out image yes that would be the smallest image that you can serve to the user but then that's a call that you need to make that whether it suits your business or not for an e-commerce company it might not suit the business for a content company it may be fine if let's say you are loading the image of an actor let's say in an article it's fine if that image shows blurred up initially but then that might not be true for an e-commerce image wherein you are loading let's say the image of a t-shirt you would still want to show the actual object in a slightly more detail instead of loading a blurred image over there that's again depends on your business logic what do you want to achieve?